| description | none |
| repository URL | https://github.com/libunwind/libunwind.git |
| owner | qvkljqk41itsgz@yandex.com |
| last change | Wed, 10 Sep 2025 13:52:17 +0000 (10 09:52 -0400) |
| last refresh | Sat, 8 Nov 2025 06:32:18 +0000 (8 07:32 +0100) |
| mirror URL | git://repo.or.cz/libunwind.git |
| https://repo.or.cz/libunwind.git | |
| ssh://[email protected]/libunwind.git | |
| bundle info | libunwind.git downloadable bundles |
| content tags |
libunwind is a portable and efficient C API for determining the current call chain of ELF program threads of execution and for resuming execution at any point in that call chain. The API supports both local (same process) and remote (other process) operation.
The API is useful in a number of applications, including but not limited to the following.
setjmp()/longjmp()
libunwind optionally provides an alternative implementation of the
setjmp()/longjmp() functionality of the C standard library.This library supports several architecture/operating-system combinations:
| System | Architecture | Status |
|---|---|---|
| Linux | x86-64 | ✓ |
| Linux | x86 | ✓ |
| Linux | ARM | ✓ |
| Linux | AArch64 | ✓ |
| Linux | PPC32 | ✓ |
| Linux | PPC64 | ✓ |
| Linux | SuperH | ✓ |
| Linux | IA-64 | ✓ |
| Linux | PA-RISC | Works well, but C library missing unwind-info |
| Linux | MIPS | ✓ |
| Linux | RISC-V | 64-bit only |
| Linux | LoongArch | 64-bit only |
| HP-UX | IA-64 | Mostly works, but known to have serious limitations |
| FreeBSD | x86-64 | ✓ |
| FreeBSD | x86 | ✓ |
| FreeBSD | AArch64 | ✓ |
| FreeBSD | PPC32 | ✓ |
| FreeBSD | PPC64 | ✓ |
| FreeBSD | RISC-V | 64-bit only |
| QNX | Aarch64 | ✓ |
| QNX | x86-64 | ✓ |
| Solaris | x86-64 | ✓ |
libunwind depends on getcontext(), setcontext() functions which are missing from C libraries like musl-libc because they are considered to be "obsolescent" API by POSIX document. The following table tries to track current status of such dependencies
| Architecture | getcontext | setcontext |
|---|---|---|
| aarch64 | p | |
| arm | p | |
| hppa | p | p |
| ia64 | p | r |
| loongarch | p | |
| mips | p | |
| ppc32 | r | |
| ppc64 | r | r |
| riscv | p | p |
| s390x | p | p |
| sh | r | |
| x86 | p | r |
| x86_64 | p | p |
In general, this library can be built and installed with the following commands:
$ autoreconf -i # Needed only for building from git. Depends on libtool.
$ ./configure --prefix=PREFIX
$ make
$ make install
where PREFIX is the installation prefix. By default, a prefix of
/usr/local is used, such that libunwind.a is installed in
/usr/local/lib and unwind.h is installed in /usr/local/include. For
testing, you may want to use a prefix of /usr/local instead.
Starting with version 8, the preferred name for the IA-64 Intel
compiler is icc (same name as on x86). Thus, the configure-line
should look like this:
$ ./configure CC=icc CFLAGS="-g -O3 -ip" CXX=icc CCAS=gcc CCASFLAGS=-g \
LDFLAGS="-L$PWD/src/.libs"
For the time being, libunwind must be built with GCC on HP-UX.
libunwind should be configured and installed on HP-UX like this:
$ ./configure CFLAGS="-g -O2 -mlp64" CXXFLAGS="-g -O2 -mlp64"
Caveat: Unwinding of 32-bit (ILP32) binaries is not supported at the moment.
For building for power64 you should use:
$ ./configure CFLAGS="-g -O2 -m64" CXXFLAGS="-g -O2 -m64"
If your power support altivec registers:
$ ./configure CFLAGS="-g -O2 -m64 -maltivec" CXXFLAGS="-g -O2 -m64 -maltivec"
To check if your processor has support for vector registers (altivec):
cat /proc/cpuinfo | grep altivec
and should have something like this:
cpu : PPC970, altivec supported
If libunwind seems to not work (backtracing failing), try to compile
it with -O0, without optimizations. There are some compiler problems
depending on the version of your gcc.
General building instructions apply. To build and execute several tests on older versions of FreeBSD, you need libexecinfo library available in ports as devel/libexecinfo. This port has been removed as of 2017 and is indeed no longer needed.
After building the library, you can run a set of regression tests with:
$ make check
The following tests are expected to fail on x86 Linux:
test-ptraceAll tests are expected to pass on x86_64-linux-gnu.
The following tests are expected to fail on hppa-linux-gnu hosts:
Gtest-bt (backtrace truncated at kill() due to lack of unwind-info)Ltest-bt (likewise)Gtest-resume-sig (Gresume.c:my_rt_sigreturn() is wrong somehow)Ltest-resume-sig (likewise)Gtest-init (likewise)Ltest-init (likewise)Gtest-dyn1 (no dynamic unwind info support yet)Ltest-dyn1 (no dynamic unwind info support yet)test-setjmp (longjmp() not implemented yet)run-check-namespace (toolchain doesn't support HIDDEN yet)make check is currently unsupported for HP-UX. You can try to run
it, but most tests will fail (and some may fail to terminate). The
only test programs that are known to work at this time are:
tests/bttests/Gperf-simpletests/test-proc-infotests/test-static-linktests/Gtest-inittests/Ltest-inittests/Gtest-resume-sigtests/Ltest-resume-sigmake check currently has the following failures.
Gtest-concurrentLtest-concurrentLtest-init-local-signalGtest-excLtest-excGtest-resume-sigLtest-resume-sigGtest-resume-sig-rtLtest-resume-sig-rtmake check is passing 27 out of 33 tests. The following six tests are consistently
failing:
Gtest-concurrentLtest-concurrentLtest-init-local-signalLrs-racetest-setjmpx64-unwind-badjmp-signal-frameThis distribution includes a few simple performance tests which give some idea of the basic cost of various libunwind operations. After building the library, you can run these tests with the following commands:
$ cd tests
$ make perf
Please raise issues and pull requests through the GitHub repository: <https://github.com/libunwind/libunwind>.
| 2 months ago | v1.8.3 | Release 1.8.3 | tag | commitlog |
| 5 months ago | v1.8.2 | commitlog | ||
| 20 months ago | v1.8.1 | commitlog | ||
| 21 months ago | v1.8.0 | commitlog | ||
| 23 months ago | v1.8.0-rc1 | commitlog | ||
| 23 months ago | v1.8-branchpoint | commitlog | ||
| 2 years ago | v1.7.2 | commitlog | ||
| 2 years ago | v1.7.1 | commitlog | ||
| 2 years ago | v1.7.0 | commitlog | ||
| 2 years ago | v1.7.0-rc2 | commitlog | ||
| 2 years ago | v1.7.0-rc1 | commitlog | ||
| 3 years ago | v1.6.2 | commitlog | ||
| 3 years ago | v1.6.1 | commitlog | ||
| 3 years ago | v1.6.0 | commitlog | ||
| 4 years ago | v1.6.0-rc2 | commitlog | ||
| 4 years ago | v1.6.0-rc1 | commitlog | ||
| ... | ||||
| 5 weeks ago | dependabot/github_actions/github-actions-83f1c65b4a | logtree |
| 8 weeks ago | master | logtree |
| 8 weeks ago | gh-920/master | logtree |
| 2 months ago | v1.8-stable | logtree |
| 2 months ago | v1.8.3-version-bump | logtree |
| 2 months ago | gh-889/master | logtree |
| 2 months ago | gh-885/sigjmp | logtree |
| 2 months ago | gh-885/master | logtree |
| 2 months ago | gh-911/master | logtree |
| 2 months ago | gh-907/master | logtree |
| 3 months ago | qnx-syscall-fails/master | logtree |
| 5 months ago | bump-to-1.8.2 | logtree |
| 19 months ago | GH-693/master | logtree |
| 2 years ago | v1.7-stable | logtree |
| 3 years ago | v1.6-stable | logtree |
| 3 years ago | v1.3-stable | logtree |
| ... | ||