Contents|Index|Previous|Next
Getting
the return or frame address of a function
The following calls may
be used to get information about the callers of a function.
-
__builtin_return_address (level)
This function returns the
return address of the current function, or of one of its callers. The level
argument is number of frames to scan up the call stack. A value of 0
yields the return address of the current function, a value of 1
yields the return address of the caller of the current function, and so
forth.
-
The level
argument must be a constant integer. On some machines it may be impossible
to determine the return address of any function other than the current
one; in such cases, or when the top of the stack has been reached, this
function will return 0.
-
This function should only be
used with a non-zero argument for debugging purposes.
-
__builtin_frame_address ( level)
This function is similar
to __builtin_return_address,
but it returns the address of the function frame rather than the return
address of the function. Calling __builtin_frame_
address with a
value of 0
yields the frame address of the current function, a value of 1
yields the frame address of the caller of the current function, and so
forth. The frame is the area on the stack which holds local variables and
saved registers. The frame address is normally the ad-dress of the first
word pushed on to the stack by the function. However, the exact definition
depends upon the processor and the calling convention. If the processor
has a dedicated frame pointer register, and the function has a frame, then
__builtin_frame_address
will return the value of the frame pointer register.
-
The caveats that apply to __builtin_return_address
apply to this function as well.