
다중 아키텍처 라이브러리로, 프로그램 호출 스택을 추적하여 Linux, FreeBSD, HP-UX 시스템에서 저수준 디버깅, 충돌 분석 및 보안 연구를 가능하게 합니다.
-- mode: Outline --
이것은 unwind 라이브러리 버전 1.0입니다. 이 라이브러리는 다음과 같은 여러 아키텍처/운영체제 조합을 지원합니다:
Linux/x86-64: 잘 작동합니다. Linux/x86: 잘 작동합니다. Linux/ARM: 잘 작동합니다. Linux/IA-64: 완전히 테스트 및 지원됩니다. Linux/PARISC: 잘 작동하지만, C 라이브러리에 unwind 정보가 없습니다. 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"
현재로서는 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 버전에 따라 일부 컴파일러 문제가 있습니다.
일반 빌드 지침이 적용됩니다. 여러 테스트를 빌드하고 실행하려면 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에서 실패할 것으로 예상됩니다:
Gtest-bt (언와인드 정보 부족으로 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에서 예상 결과
HP-UX에서는 "make check"가 현재 지원되지 않습니다. 실행해 볼 수는 있지만 대부분의 테스트가 실패하고 일부는 종료되지 않을 수 있습니다. 현재 작동하는 것으로 알려진 유일한 테스트 프로그램은 다음과 같습니다:
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