Boost logo

Boost :

Subject: Re: [boost] [context] make_fcontext stack pointer unclear from documentation
From: Michael Marcin (mike.marcin_at_[hidden])
Date: 2013-05-28 12:55:07


On 5/25/2013 2:55 PM, Michael Marcin wrote:
> On 5/25/13 6:03 AM, Oliver Kowalke wrote:
>> 2013/5/25 Michael Marcin <mike.marcin_at_[hidden]>
>>
>>> The function make_fcontext takes a stack pointer. However it is not
>>> clear
>>> at all from the documentation that the stack pointer should actually
>>> point
>>> to the end of the stack buffer.
>>
>>
>> hmm - itis architecture depended in which direction the stack grows. The
>> current supported architectures use downward growing stacks.
>> The documentation contains [1]:
>> 'Note: Depending on the architecture *StackAllocator* returns an address
>> from the top of the stack (grows downwards) or the bottom of the stack
>> (grows upwards). '
>>
>>
>>> [1]
>>> http://www.boost.org/doc/libs/1_53_0/libs/context/doc/html/context/stack.html
>>>
>>>
>
> It's still not clear at all to me after reading that note. And that note
> is far removed from the documentation of make_fcontex which is where
> this matters. Additionally I have to now know how the architecture
> handles stack growth. Shouldn't the library be handling that?
>
> If it's architectures dependent why can't make_fcontext abstract the
> details as it does for other architecture dependent functionality. It
> has all the information necessary to determine if it should offset the
> stack buffer pointer by the stack size.
>
> So instead of:
>
> void* stackBuffer = std::calloc(stackSize, sizeof(char));
> #if TARGET_ARCH_STACK_GROWS_DOWNWARDS
> make_fcontext(static_cast<char*>(stackBuffer)+stackSize, stackSize, f);
> #else
> make_fcontext(stackBuffer, stackSize, f);
> #endif
>
> You could just always write:
> void* stackBuffer = std::calloc(stackSize, sizeof(char));
> make_fcontext(stackBuffer, stackSize, f);
>

I should also note that despite this minor confusion with the stack
pointer this library is amazing. Great abstraction, simple clean
interface and just works. It might have taken me a few hours to get it
working right but it no doubt saved me innumerable hours and saved our
project's milestone from missing its deadline.

Thank you for your contribution.


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk