Boost logo

Boost Users :

Subject: Re: [Boost-users] [context] How to set stack pointer in a platform-independent way?
From: Larry Evans (cppljevans_at_[hidden])
Date: 2014-09-20 05:59:04


On 09/20/2014 02:20 AM, TONGARI J wrote:
> 2014-09-19 22:03 GMT+08:00 Larry Evans <cppljevans_at_[hidden]>:
>
>> On 09/18/2014 10:02 PM, TONGARI J wrote:
>>> Hi,
>>>
>>> The problem had been discussed here:
>>> https://groups.google.com/forum/#!topic/boost-devel-archive/cl8B1oUPrVM
>>>
>>> But it's still not clear how to set the stack pointer portably, even
>> after
>>> examining the code of Boost.Coroutine. For now, Boost.Context only
>> supports
>>> downward stack, and Boost.Coroutine, which happened to be written by the
>>> same author, just assumes that the stack always grows downward, which is
>>> not really a portable implementation, if future Boost.Context supports
>>> upward stack, Boost.Coroutine has to be changed as well.
>>
>> Several years ago, I had a look at the Boehm garbage collector:
>>
>> http://www.hboehm.info/gc/
>>
>> IIRC, it had to determine whether the stack grew upward or
>> downward. I can't remember where in the code that was,
>> but I also vaguely remember reading (I think in the code
>> commets) that the method was not completely portable.
>>
>
> I guess something like below should work?
>
> #include <iostream>
>
> __attribute__((noinline)) bool is_upward_test(char* a)
> {
> char b[32];
> return a < b;
> }
>
> bool is_upward()
> {
> char a[32];
> return is_upward_test(a);
> }
>
> int main(int argc, char** argv) {
> std::cout << is_upward();
> return 0;
> }
>
Yep. Something like that. I, again, vaguely remember
seeing code something like that in the Boehm GC source code.

-regards,
Larry


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net