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 9.4