2014-09-19 8:53 GMT+02:00 TONGARI J <tongari95@gmail.com>:
I'm not familiar with the asm enough, but can't you adjust the sp in the asm so that in user code it always has to be the lowest position?

no idea what you want - fcontext_t is a pointer containing the address of the lowest address of the stack - but it is not the stack point position
if the context is resumed
 
So how would you modify them to support both upward and downward stack? preprocessor branch? runtime check?

preprocessor - because it is determined at compile time
 
My prevoius question stays unanswered, so let me repeat here:
what does "beginning of the stack" really means?
Suppose we have a stack of size 3, starting at [s]:

[s-1][s][s+1][s+2][s+3]

Why the beginning of a downward stack is [s+3], not [s+2]?
If it's a upward stack, is beginning [s] or [s-1]?


stackallocator using malloc():
        void * limit = std::malloc( size);
        if ( ! limit) throw std::bad_alloc();
        ctx.size = size;
        ctx.sp = static_cast< char * >( limit) + ctx.size;

if limit is at x and you allocated 64byte of memory for the stack you have to adjust your stack base
for downward growing stacks to address y=x+64, e.g. starting at y your stack has 64bytes to grow.