| (index)= |
| |
| # libunwind LLVM Unwinder |
| |
| ## Overview |
| |
| libunwind is an implementation of the interface defined by the HP libunwind |
| project. It was contributed by Apple as a way to enable clang++ to port to |
| platforms that do not have a system unwinder. It is intended to be a small and |
| fast implementation of the ABI, leaving off some features of HP's libunwind |
| that never materialized (e.g. remote unwinding). |
| |
| The unwinder has two levels of API. The high level APIs are the `_Unwind_*` |
| functions which implement functionality required by `__cxa_*` exception |
| functions. The low level APIs are the `unw_*` functions which are an interface |
| defined by the old HP libunwind project. |
| |
| ### Getting Started with libunwind |
| |
| :::{toctree} |
| :maxdepth: 2 |
| |
| BuildingLibunwind |
| ::: |
| |
| ### Current Status |
| |
| libunwind is a production-quality unwinder, with platform support for DWARF |
| unwind info, SjLj, and ARM EHABI. |
| |
| The low level libunwind API was designed to work either in-process (aka local) |
| or to operate on another process (aka remote), but only the local path has been |
| implemented. Remote unwinding remains as future work. |
| |
| ### Platform and Compiler Support |
| |
| libunwind is known to work on the following platforms: |
| |
| | OS | Arch | Compilers | Unwind Info | |
| | ---------- | ------------------------ | ---------- | ----------- | |
| | Any | i386, x86_64, ARM | Clang | SjLj | |
| | Bare Metal | ARM | Clang, GCC | EHABI | |
| | FreeBSD | i386, x86_64, ARM64 | Clang | DWARF CFI | |
| | iOS | ARM | Clang | SjLj | |
| | Linux | ARM | Clang, GCC | EHABI | |
| | Linux | i386, x86_64, ARM64 | Clang, GCC | DWARF CFI | |
| | macOS | i386, x86_64 | Clang, GCC | DWARF CFI | |
| | NetBSD | x86_64 | Clang, GCC | DWARF CFI | |
| | Windows | i386, x86_64, ARM, ARM64 | Clang | DWARF CFI | |
| |
| The following minimum compiler versions are strongly recommended. |
| |
| - Clang 3.5 and above |
| - GCC 4.7 and above. |
| |
| Anything older *may* work. |
| |
| ### Notes and Known Issues |
| |
| - TODO |
| |
| ## Getting Involved |
| |
| First please review our [Developer's Policy](https://llvm.org/docs/DeveloperPolicy.html) |
| and [Getting started with LLVM](https://llvm.org/docs/GettingStarted.html). |
| |
| **Bug Reports** |
| |
| If you think you've found a bug in libunwind, please report it using |
| the [LLVM bug tracker]. If you're not sure, you |
| can ask for support on the [Runtimes forum] or on Discord. |
| Please use the tag "libunwind" for new threads. |
| |
| **Patches** |
| |
| If you want to contribute a patch to libunwind, please start by reading the LLVM |
| [documentation about contributing](https://www.llvm.org/docs/Contributing.html). |
| |
| **Discussion and Questions** |
| |
| Send discussions and questions to the [Runtimes forum]. Please add the tag "libunwind" to your post. |
| |
| ## Quick Links |
| |
| - [LLVM Homepage](https://llvm.org/) |
| - [LLVM Bug Tracker](https://github.com/llvm/llvm-project/labels/libunwind/) |
| - [Clang Discourse Forums](https://discourse.llvm.org/c/clang/6) |
| - [cfe-commits Mailing List](http://lists.llvm.org/mailman/listinfo/cfe-commits) |
| - [Runtimes Forum](https://discourse.llvm.org/tags/c/runtimes) |
| - [Browse libunwind Sources](https://github.com/llvm/llvm-project/blob/main/libunwind/) |
| |