
Bibliothek zum Entwirren von Prozessor-Call-Stacks, die mehrere Architekturen und Betriebssysteme unterstützt, mit Anweisungen zum Erstellen und Regressionstesten.
-- mode: Outline --
Dies ist Version 1.0 der unwind-Bibliothek. Diese Bibliothek unterstützt mehrere Architektur-/Betriebssystem-Kombinationen:
Linux/x86-64: Funktioniert gut. Linux/x86: Funktioniert gut. Linux/ARM: Funktioniert gut. Linux/IA-64: Vollständig getestet und unterstützt. Linux/PARISC: Funktioniert gut, aber die C-Bibliothek fehlt unwind-info. HP-UX/IA-64: Funktioniert größtenteils, hat aber bekannte ernsthafte Einschränkungen. Linux/AArch64: Neu hinzugefügt. Linux/PPC64: Neu hinzugefügt. Linux/SuperH: Neu hinzugefügt. FreeBSD/i386: Neu hinzugefügt. FreeBSD/x86-64: Neu hinzugefügt (FreeBSD-Architektur ist als amd64 bekannt).
Im Allgemeinen kann diese Bibliothek mit den folgenden Befehlen erstellt und installiert werden:
$ autoreconf -i # Nur erforderlich beim Bauen aus Git. Hängt von libtool ab.
$ ./configure
$ make
$ make install prefix=PREFIX
wobei PREFIX das Installationspräfix ist. Standardmäßig wird ein Präfix von /usr/local verwendet, sodass libunwind.a in /usr/local/lib und unwind.h in /usr/local/include installiert wird. Für Tests möchten Sie möglicherweise ein Präfix von /usr/local verwenden.
** Version 8 und neuer
Ab Version 8 lautet der bevorzugte Name für den IA-64 Intel Compiler "icc" (gleicher Name wie auf x86). Daher sollte die configure-Zeile wie folgt aussehen:
$ ./configure CC=icc CFLAGS="-g -O3 -ip" CXX=icc CCAS=gcc CCASFLAGS=-g \
LDFLAGS="-L$PWD/src/.libs"
Zurzeit muss libunwind auf HP-UX mit GCC gebaut werden.
libunwind sollte auf HP-UX wie folgt konfiguriert und installiert werden:
$ ./configure CFLAGS="-g -O2 -mlp64" CXXFLAGS="-g -O2 -mlp64"
Achtung: Das Entwinden von 32-Bit-Binärdateien (ILP32) wird derzeit nicht unterstützt.
** Workaround für ältere Versionen von GCC
GCC v3.0 und GCC v3.2 werden mit einer schlechten Version von sys/types.h ausgeliefert. Der Workaround besteht darin, die folgenden Befehle vor dem Ausführen von "configure" auszuführen:
$ mkdir $top_dir/include/sys
$ cp /usr/include/sys/types.h $top_dir/include/sys
GCC v3.3.2 oder neuer wurden korrigiert und benötigen diesen Workaround nicht.
Für das Bauen für power64 sollten Sie Folgendes verwenden:
$ ./configure CFLAGS="-g -O2 -m64" CXXFLAGS="-g -O2 -m64"
Wenn Ihr Power altivec-Register unterstützt: $ ./configure CFLAGS="-g -O2 -m64 -maltivec" CXXFLAGS="-g -O2 -m64 -maltivec"
Um zu überprüfen, ob Ihr Prozessor Unterstützung für Vektorregister (altivec) hat: cat /proc/cpuinfo | grep altivec und sollte so etwas haben: cpu : PPC970, altivec supported
Wenn libunwind nicht zu funktionieren scheint (Backtracing schlägt fehl), versuchen Sie, es mit -O0, ohne Optimierungen, zu kompilieren. Es gibt einige Compiler-Probleme, abhängig von der Version Ihres gcc.
Allgemeine Build-Anweisungen gelten. Um mehrere Tests zu bauen und auszuführen, benötigen Sie die libexecinfo-Bibliothek, die in Ports als devel/libexecinfo verfügbar ist.
Die Entwicklung des Ports wurde auf FreeBSD 8.0-STABLE durchgeführt. Die Bibliothek wurde mit dem System-Compiler, einer modifizierten Version von gcc 4.2.1, sowie mit gcc 4.4.3 erstellt.
Nachdem Sie die Bibliothek erstellt haben, können Sie eine Reihe von Regressionstests mit folgendem Befehl ausführen:
$ make check
** Erwartete Ergebnisse auf IA-64 Linux
Sofern Sie keine sehr aktuelle C-Bibliothek und keinen aktuellen Compiler installiert haben, ist derzeit zu erwarten, dass die folgenden Tests auf IA-64 Linux fehlschlagen:
Gtest-init (sollte ab glibc-2.3.x/gcc-3.4 bestehen)
Ltest-init (sollte ab glibc-2.3.x/gcc-3.4 bestehen)
test-ptrace (sollte ab glibc-2.3.x/gcc-3.4 bestehen)
run-ia64-test-dyn1 (sollte ab glibc-2.3.x bestehen)
Dies bedeutet nicht, dass libunwind nicht mit älteren Compilern oder C-Bibliotheken verwendet werden kann, nur dass das Entwinden für bestimmte Randfälle fehlschlägt. Da es sich um Randfälle handelt, ist es unwahrscheinlich, dass Anwendungen sie auslösen.
Hinweis: Wenn Sie viele Fehler in Gia64-test-nat und Lia64-test-nat erhalten, ist dies fast sicher ein Zeichen für einen alten Assembler. Der GNU-Assembler kodierte früher Offsets relativ zum vorherigen Stackpointer falsch. Dieser Fehler wurde am 21. Sep. 2004 behoben, sodass jeder neuere Assembler in Ordnung sein wird.
** Erwartete Ergebnisse auf x86 Linux
Die folgenden Tests werden voraussichtlich auf x86 Linux fehlschlagen:
Gtest-resume-sig (erhält SIGUSR2 nicht)
Ltest-resume-sig (ebenso)
Gtest-dyn1 (noch keine dynamische unwind-info-Unterstützung)
Ltest-dyn1 (noch keine dynamische unwind-info-Unterstützung)
test-setjmp (longjmp() noch nicht implementiert)
run-check-namespace (noch kein _Ux86_getcontext)
test-ptrace
** Erwartete Ergebnisse auf x86-64 Linux
Die folgenden Tests werden voraussichtlich auf x86-64 Linux fehlschlagen:
Gtest-dyn1 (noch keine dynamische unwind-info-Unterstützung)
Ltest-dyn1 (noch keine dynamische unwind-info-Unterstützung)
Gtest-init (siehe http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18743)
Ltest-init (ebenso)
test-async-sig (stürzt aufgrund fehlerhafter unwind-info ab?)
test-setjmp (longjmp() noch nicht implementiert)
run-check-namespace (noch kein _Ux86_64_getcontext)
run-ptrace-mapper (??? untersuchen)
run-ptrace-misc (siehe http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18748
und http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18749)
** Erwartete Ergebnisse auf PARISC Linux
Achtung: Auf PA-RISC Linux wird GCC v3.4 oder neuer benötigt. Frühere Versionen des Compilers konnten den für das Entwinden erforderlichen Exception-Handling-Programm-Header (GNU_EH_FRAME) nicht generieren.
Die folgenden Tests werden voraussichtlich auf x86-64 Linux fehlschlagen:
Gtest-bt (Backtrace abgeschnitten bei kill() aufgrund fehlender unwind-info)
Ltest-bt (ebenso)
Gtest-resume-sig (Gresume.c:my_rt_sigreturn() ist irgendwie falsch)
Ltest-resume-sig (ebenso)
Gtest-init (ebenso)
Ltest-init (ebenso)
Gtest-dyn1 (noch keine dynamische unwind-info-Unterstützung)
Ltest-dyn1 (noch keine dynamische unwind-info-Unterstützung)
test-setjmp (longjmp() noch nicht implementiert)
run-check-namespace (Toolchain unterstützt noch kein HIDDEN)
** Erwartete Ergebnisse auf HP-UX
"make check" wird derzeit für HP-UX nicht unterstützt. Sie können versuchen, es auszuführen, aber die meisten Tests werden fehlschlagen (und einige werden möglicherweise nicht beendet). Die einzigen Testprogramme, die derzeit funktionieren, sind:
tests/bt
tests/Gperf-simple
tests/test-proc-info
tests/test-static-link
tests/Gtest-init
tests/Ltest-init
tests/Gtest-resume-sig
tests/Ltest-resume-sig
** Erwartete Ergebnisse auf PPC64 Linux
"make check" sollte mit nicht mehr als 10 von 24 fehlgeschlagenen Tests ausgeführt werden.
Diese Distribution enthält einige einfache Leistungstests, die eine grobe Vorstellung von den grundlegenden Kosten verschiedener libunwind-Operationen geben. Nach dem Bauen der Bibliothek können Sie diese Tests mit den folgenden Befehlen ausführen:
$ cd tests $ make perf
Bitte richten Sie alle Fragen zu dieser Bibliothek an:
Sie können dies tun, indem Sie eine E-Mail an [email protected] mit folgendem Inhalt senden:
subscribe libunwind-devel
oder Sie können sich über die Weboberfläche unter
https://savannah.nongnu.org/mail/?group=libunwind
anmelden und Ihr Abonnement verwalten.