
-- mode: Outline --
これは unwind ライブラリのバージョン 1.0 です。このライブラリは以下のアーキテクチャ/OSの組み合わせをサポートしています:
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"
現時点では、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 (同様)
test-ptrace (同様)
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 (kill() で unwind-info の欠落によりバックトレースが切れる)
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
または、以下の Web インターフェースから購読の申し込みと管理ができます。
https://savannah.nongnu.org/mail/?group=libunwind