
マルチアーキテクチャ対応のライブラリで、プログラムのコールスタックを展開し、Linux、FreeBSD、HP-UXシステム全体で低レベルデバッグ、クラッシュ解析、セキュリティ研究を可能にします。
-- mode: Outline --
これは unwind ライブラリのバージョン 1.0 です。このライブラリは以下のアーキテクチャ/オペレーティングシステムの組み合わせをサポートしています:
Linux/x86-64: 良好に動作します。 Linux/x86: 良好に動作します。 Linux/ARM: 良好に動作します。 Linux/IA-64: 完全にテストされサポートされています。 Linux/PARISC: 良好に動作しますが、C ライブラリに unwind-info がありません。 HP-UX/IA-64: ほとんど動作しますが、いくつかの深刻な制限があることが知られています。 Linux/AArch64: 新たに追加されました。 Linux/PPC64: 新たに追加されました。 Linux/SuperH: 新たに追加されました。 FreeBSD/i386: 新たに追加されました。 FreeBSD/x86-64: 新たに追加されました (FreeBSD アーキテクチャは amd64 として知られています)。
一般的に、このライブラリは以下のコマンドでビルドおよびインストールできます:
$ autoreconf -i # Needed only for building from git. Depends on libtool.
$ ./configure
$ make
$ make install prefix=PREFIX
PREFIX はインストールのプレフィックスです。デフォルトでは /usr/local がプレフィックスとして使用され、libunwind.a は /usr/local/lib に、unwind.h は /usr/local/include にインストールされます。テスト目的では、代わりに /usr/local をプレフィックスとして使用するとよいでしょう。
** バージョン 8 以降
バージョン 8 以降、IA-64 Intel コンパイラの推奨名称は "icc" です (x86 と同じ名前)。したがって、configure 行は次のようになります:
$ ./configure CC=icc CFLAGS="-g -O3 -ip" CXX=icc CCAS=gcc CCASFLAGS=-g \
LDFLAGS="-L$PWD/src/.libs"
当面、HP-UX では libunwind を GCC でビルドする必要があります。
libunwind は HP-UX 上で次のように設定およびインストールする必要があります:
$ ./configure CFLAGS="-g -O2 -mlp64" CXXFLAGS="-g -O2 -mlp64"
注意: 現在、32ビット (ILP32) バイナリのアンワインドはサポートされていません。
** 古いバージョンの GCC の回避策
GCC v3.0 および GCC v3.2 には、sys/types.h の不適切なバージョンが同梱されています。回避策は、"configure" を実行する前に以下のコマンドを実行することです:
$ mkdir $top_dir/include/sys
$ cp /usr/include/sys/types.h $top_dir/include/sys
GCC v3.3.2 以降は修正されており、この回避策は必要ありません。
power64 向けにビルドするには、以下を使用してください:
$ ./configure CFLAGS="-g -O2 -m64" CXXFLAGS="-g -O2 -m64"
お使いの Power が altivec レジスタをサポートしている場合: $ ./configure CFLAGS="-g -O2 -m64 -maltivec" CXXFLAGS="-g -O2 -m64 -maltivec"
プロセッサがベクタレジスタ (altivec) をサポートしているか確認するには: cat /proc/cpuinfo | grep altivec 次のような出力があるはずです: cpu : PPC970, altivec supported
libunwind が動作しないように見える場合 (バックトレース失敗)、最適化なしの -O0 でコンパイルしてみてください。gcc のバージョンによってはコンパイラの問題があります。
一般的なビルド手順が適用されます。いくつかのテストをビルドして実行するには、ports で devel/libexecinfo として利用可能な libexecinfo ライブラリが必要です。
このポートの開発は FreeBSD 8.0-STABLE で行われました。ライブラリは、gcc 4.2.1 の修正版であるシステムコンパイラ、および gcc 4.4.3 でビルドされました。
ライブラリのビルド後、以下のコマンドで一連の回帰テストを実行できます:
$ make check
** IA-64 Linux での期待される結果
非常に新しい C ライブラリとコンパイラがインストールされていない限り、IA-64 Linux では現在以下のテストが失敗することが予想されます:
Gtest-init (glibc-2.3.x/gcc-3.4 以降で成功するはずです)
Ltest-init (glibc-2.3.x/gcc-3.4 以降で成功するはずです)
test-ptrace (glibc-2.3.x/gcc-3.4 以降で成功するはずです)
run-ia64-test-dyn1 (glibc-2.3.x 以降で成功するはずです)
これは、libunwind が古いコンパイラや C ライブラリで使用できないという意味ではなく、特定のコーナーケースではアンワインドが失敗するという意味です。それらはコーナーケースであるため、アプリケーションがそれらをトリガーする可能性は低いです。
注意: Gia64-test-nat および Lia64-test-nat で多くのエラーが発生する場合、それはほぼ間違いなく古いアセンブラの兆候です。GNU アセンブラは、以前のスタックポインタ相対オフセットを誤ってエンコードしていました。このバグは 2004 年 9 月 21 日に修正されたため、それ以降のアセンブラでは問題ありません。
** x86 Linux での期待される結果
以下のテストは x86 Linux で失敗することが予想されます:
Gtest-resume-sig (SIGUSR2 を取得できない)
Ltest-resume-sig (同様)
Gtest-dyn1 (動的アンワインド情報のサポートはまだありません)
Ltest-dyn1 (動的アンワインド情報のサポートはまだありません)
test-setjmp (longjmp() はまだ実装されていません)
run-check-namespace (_Ux86_getcontext はまだありません)
test-ptrace
** x86-64 Linux での期待される結果
以下のテストは x86-64 Linux で失敗することが予想されます:
Gtest-dyn1 (動的アンワインド情報のサポートはまだありません)
Ltest-dyn1 (動的アンワインド情報のサポートはまだありません)
Gtest-init (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18743 を参照)
Ltest-init (同様)
test-async-sig (不良な unwind-info によるクラッシュ?)
test-setjmp (longjmp() はまだ実装されていません)
run-check-namespace (_Ux86_64_getcontext はまだありません)
run-ptrace-mapper (??? 調査中)
run-ptrace-misc (http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18748
および http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18749 を参照)
** PARISC Linux での期待される結果
注意: PA-RISC Linux では GCC v3.4 以降が必要です。それ以前のバージョンのコンパイラは、アンワインドに必要な例外処理プログラムヘッダ (GNU_EH_FRAME) を生成できませんでした。
以下のテストは x86-64 Linux で失敗することが予想されます:
Gtest-bt (unwind-info の欠如により kill() でバックトレースが切り詰められる)
Ltest-bt (同様)
Gtest-resume-sig (Gresume.c:my_rt_sigreturn() が何か間違っている)
Ltest-resume-sig (同様)
Gtest-init (同様)
Ltest-init (同様)
Gtest-dyn1 (動的アンワインド情報のサポートはまだありません)
Ltest-dyn1 (動的アンワインド情報のサポートはまだありません)
test-setjmp (longjmp() はまだ実装されていません)
run-check-namespace (ツールチェーンがまだ HIDDEN をサポートしていません)
** HP-UX での期待される結果
"make check" は現在 HP-UX ではサポートされていません。実行を試みることはできますが、ほとんどのテストは失敗します(一部は終了に失敗する可能性があります)。現在動作が確認されているテストプログラムは次のとおりです:
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
** PPC64 Linux での期待される結果
"make check" は、24 テスト中 10 以下の失敗で実行されるはずです。
この配布物には、さまざまな libunwind 操作の基本的なコストを把握できるいくつかの簡単なパフォーマンステストが含まれています。ライブラリのビルド後、以下のコマンドでこれらのテストを実行できます:
$ cd tests $ make perf
このライブラリに関するすべての質問は、以下の宛先にお送りください:
これは、[email protected] に以下の本文を送信することで行えます:
subscribe libunwind-devel
または、以下のウェブインターフェースから購読および購読管理ができます:
https://savannah.nongnu.org/mail/?group=libunwind