RETURN_ADDRESS(9) | Kernel Developer's Manual (i386) | 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>

May 5, 2010 | NetBSD 8.2