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).
