descriptionnone
repository URLhttps://github.com/libunwind/libunwind.git
ownerqvkljqk41itsgz@yandex.com
last changeWed, 10 Sep 2025 13:52:17 +0000 (10 09:52 -0400)
last refreshSat, 8 Nov 2025 06:32:18 +0000 (8 07:32 +0100)
content tags
README.md

libunwind

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.

Supported Systems

CI - Unix CI - Windows

This library supports several architecture/operating-system combinations:

SystemArchitectureStatus
Linuxx86-64
Linuxx86
LinuxARM
LinuxAArch64
LinuxPPC32
LinuxPPC64
LinuxSuperH
LinuxIA-64
LinuxPA-RISCWorks well, but C library missing unwind-info
LinuxMIPS
LinuxRISC-V64-bit only
LinuxLoongArch64-bit only
HP-UXIA-64Mostly works, but known to have serious limitations
FreeBSDx86-64
FreeBSDx86
FreeBSDAArch64
FreeBSDPPC32
FreeBSDPPC64
FreeBSDRISC-V64-bit only
QNXAarch64
QNXx86-64
Solarisx86-64

Libc Requirements

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

Architecturegetcontextsetcontext
aarch64p
armp
hppapp
ia64pr
loongarchp
mipsp
ppc32r
ppc64rr
riscvpp
s390xpp
shr
x86pr
x86_64pp

General Build Instructions

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.

Building with Intel compiler

Version 8 and later

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"

Building on HP-UX

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.

Building for PowerPC64 / Linux

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.

Building on FreeBSD

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.

Regression Testing

After building the library, you can run a set of regression tests with:

$ make check

Expected results on x86 Linux

The following tests are expected to fail on x86 Linux:

Expected results on x86-64 Linux

All tests are expected to pass on x86_64-linux-gnu.

Expected results on PA-RISC Linux

The following tests are expected to fail on hppa-linux-gnu hosts:

Expected results on HP-UX

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:

Expected results on ppc64-linux-gnu

make check currently has the following failures.

Expected results on Solaris x86-64

make check is passing 27 out of 33 tests. The following six tests are consistently failing:

Performance Testing

This 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

Contacting the Developers

Please raise issues and pull requests through the GitHub repository: <https://github.com/libunwind/libunwind>.

shortlog
2025-09-10 Stephen WebbFix stray `-lc` in configuremaster
2025-09-03 Stephen WebbDisable C++ exception report for HPPA by default
2025-09-02 dependabot... Bump the github-actions group with 2 updates
2025-09-02 Stephen M.... Add setjmp support for aarch64-linux-musl
2025-08-28 Stephen WebbFix off-by-one in aarch64 unw_backtrace()
2025-08-25 Stephen WebbMade -nostdlib depend on exception support
2025-08-25 H.J. Lux86-64: Add a configure option to enable Intel CET
2025-08-11 Stephen WebbFix some QNX test failures due to syscall name
2025-08-11 H.J. Lux86-64: Include <cet.h> for Intel CET
2025-08-07 kasperk81Update jmpbuf.h
2025-08-07 kasperk81Implement Gresume for freebsd riscv64
2025-08-07 dependabot... Bump github/codeql-action in the github-actions group
2025-07-29 Ross Burtonmips/getcontext.S: use assembler-friendly byte order...
2025-07-25 Stephen WebbUse file offset when reading GNU hash table
2025-07-24 Stephen WebbAdd support for x86_64 Control-Flow Enforcement
2025-07-04 dependabot... Bump github/codeql-action in the github-actions group
...
tags
2 months ago v1.8.3 Release 1.8.3
5 months ago v1.8.2
20 months ago v1.8.1
21 months ago v1.8.0
23 months ago v1.8.0-rc1
23 months ago v1.8-branchpoint
2 years ago v1.7.2
2 years ago v1.7.1
2 years ago v1.7.0
2 years ago v1.7.0-rc2
2 years ago v1.7.0-rc1
3 years ago v1.6.2
3 years ago v1.6.1
3 years ago v1.6.0
4 years ago v1.6.0-rc2
4 years ago v1.6.0-rc1
...
heads
5 weeks ago dependabot/github_actions/github-actions-83f1c65b4a
8 weeks ago master
8 weeks ago gh-920/master
2 months ago v1.8-stable
2 months ago v1.8.3-version-bump
2 months ago gh-889/master
2 months ago gh-885/sigjmp
2 months ago gh-885/master
2 months ago gh-911/master
2 months ago gh-907/master
3 months ago qnx-syscall-fails/master
5 months ago bump-to-1.8.2
19 months ago GH-693/master
2 years ago v1.7-stable
3 years ago v1.6-stable
3 years ago v1.3-stable
...