RETURN_ADDRESS(9)

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>