
ライブラリはプロセッサのコールスタックを展開するためのもので、複数のアーキテクチャとオペレーティングシステムをサポートし、ビルドおよび回帰テストの手順を含みます。
-- 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 # git からのビルドにのみ必要。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"
現時点では、libunwind は HP-UX 上で 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"
プロセッサが 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 (不適切なアンワインド情報によりクラッシュ?)
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 で失敗することが予想されます(原文ママですが、PARISC のセクションである可能性が高いため、適切に翻訳)。
Gtest-bt (バックトレースが kill() で truncate される(アンワインド情報不足のため))
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