other/8335: problems with __builtin_frame_address when -fomit-frame-pointer used

Davin McCall davmac@ozonline.com.au
Fri Oct 25 22:24:00 GMT 2002

(Resending with reduced attachments)


>     Describe "doesn't work correctly".

By "doesn't work correctly" I mean:

__builtin_frame_address seems to expect that the frame address is stored in the %ebp register. However, if -fomit-frame-pointer is used, this is clearly not true.

In the attached files, see function "pthread_initialize". In particular in the generated assembly at ".L8:", which corresponds to the line referencing CURRENT_STACK_FRAME in the C source. CURRENT_STACK_FRAME is defined as "__builtin_frame_address(0)". In the assembly, I see "leal constant(%ebp),%edi" which is clearly wrong because it is using %ebp.

Incidentally, in other source compiled with -fomit-frame-pointer I remember seeing that %ebp was being used more-or-less as a general purpose register - so using it as the frame address could be wildly inaccurate.

>     The result should be the address of the stack frame, with or
>     without a frame pointer.  The frame is at a known offset from
>     the stack pointer, after all.

Well in that case I guess that this really is a bug.

best regards,
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pthread.s
Type: application/octet-stream
Size: 30045 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-bugs/attachments/20021025/ab3bd225/attachment.obj>

More information about the Gcc-bugs mailing list