NAME
return_address —
return address from
call stack
SYNOPSIS
#include <i386/return.h>
void *
return_address(
unsigned
int level);
DESCRIPTION
The
return_address() function evaluates to the first return
address on the call stack if
level equals 0, or else to
the return address for the stack frame
level frames
down.
This function is intended to be called by diagnostic code to record the call
stack.
A special fault handler stops
return_address() from crashing
the kernel by examining a non-existent or corrupt stack frame.
Kernel compilation options affect both the ability of
return_address() to locate return addresses on the stack,
and the programmer's ability to interpret the addresses. The compiler may
optimize away the stack frame pointers that
return_address()
depends on.
To use
return_address() effecively, try a kernel configuration
option such as
makeoptions DEBUG="-g -fno-omit-frame-pointer \
-fno-optimize-sibling-calls -O0"
RETURN VALUES
The
return_address() function returns the requested return
address, or
NULL
if it cannot dissect the call stack.
CODE REFERENCES
sys/arch/i386/i386/copy.S,
sys/arch/i386/include/return.h
REFERENCES
config(5)
HISTORY
The
return_address() function first appeared in
NetBSD 6.0.
AUTHORS
David Young
<
dyoung@NetBSD.org>