man.bsd.lv manual page server

Manual Page Search Parameters

RETURN_ADDRESS(9) Kernel Developer's Manual (i386) RETURN_ADDRESS(9)

return_addressreturn address from call stack

#include <i386/return.h>

void *
return_address(unsigned int level);

The () 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 () from crashing the kernel by examining a non-existent or corrupt stack frame.

Kernel compilation options affect both the ability of () 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 () effecively, try a kernel configuration option such as

makeoptions     DEBUG="-g -fno-omit-frame-pointer \
		       -fno-optimize-sibling-calls -O0"

The return_address() function returns the requested return address, or NULL if it cannot dissect the call stack.

sys/arch/i386/i386/copy.S, sys/arch/i386/include/return.h

config(5)

The return_address() function first appeared in NetBSD 6.0.

David Young <dyoung@NetBSD.org>

May 5, 2010 NetBSD-9.2