 |

The primary goal of this project is to define a portable and efficient
C programming interface (API) to determine the call-chain of a
program. The API additionally provides the means to manipulate the
preserved (callee-saved) state of each call-frame
and to resume execution at any point in the call-chain (non-local
goto). The API supports both local (same-process) and remote
(across-process) operation. As such, the API is useful in a number
of applications. Some examples include:
- exception handling
- The libunwind API makes it trivial
to implement the stack-manipulation aspects of exception handling.
- debuggers
- The libunwind API makes it trivial for debuggers to generate the
call-chain (backtrace) of the threads in a running program.
- introspection
- It is often useful for a running thread to determine its call-chain.
For example, this is useful to display error messages (to show how the
error came about) and for performance monitoring/analysis.
- efficient setjmp()
- With libunwind, it is possible to implement an extremely efficient
version of setjmp(). Effectively, the only context that needs to be
saved consists of the stack-pointer(s).

|
|  |
|