
Biblioteca C multiarquitectura para desenrollado de pila, generación de backtrace y manejo de excepciones, utilizada para depuración, perfilado y análisis binario en Linux, FreeBSD y HP-UX.
-- mode: Outline --
Esta es la versión 1.0 de la biblioteca unwind. Esta biblioteca soporta varias combinaciones de arquitectura/sistema operativo:
Linux/x86-64: Funciona bien. Linux/x86: Funciona bien. Linux/ARM: Funciona bien. Linux/IA-64: Completamente probada y soportada. Linux/PARISC: Funciona bien, pero la biblioteca C carece de información unwind. HP-UX/IA-64: Funciona en su mayoría, pero se sabe que tiene algunas limitaciones graves. Linux/AArch64: Añadida recientemente. Linux/PPC64: Añadida recientemente. Linux/SuperH: Añadida recientemente. FreeBSD/i386: Añadida recientemente. FreeBSD/x86-64: Añadida recientemente (la arquitectura FreeBSD se conoce como amd64).
En general, esta biblioteca se puede compilar e instalar con los siguientes comandos:
$ autoreconf -i # Solo necesario para compilar desde git. Depende de libtool.
$ ./configure
$ make
$ make install prefix=PREFIX
donde PREFIX es el prefijo de instalación. De forma predeterminada, se utiliza un prefijo de /usr/local, de modo que libunwind.a se instala en /usr/local/lib y unwind.h se instala en /usr/local/include. Para pruebas, es posible que desee utilizar un prefijo de /usr/local.
** Versión 8 y posteriores
A partir de la versión 8, el nombre preferido para el compilador Intel IA-64 es "icc" (el mismo nombre que en x86). Por lo tanto, la línea de configure debería verse así:
$ ./configure CC=icc CFLAGS="-g -O3 -ip" CXX=icc CCAS=gcc CCASFLAGS=-g \
LDFLAGS="-L$PWD/src/.libs"
Por el momento, libunwind debe compilarse con GCC en HP-UX.
libunwind debe configurarse e instalarse en HP-UX de la siguiente manera:
$ ./configure CFLAGS="-g -O2 -mlp64" CXXFLAGS="-g -O2 -mlp64"
Advertencia: No se admite el desenrollado de binarios de 32 bits (ILP32) en este momento.
** Solución alternativa para versiones anteriores de GCC
GCC v3.0 y GCC v3.2 incluyen una versión defectuosa de sys/types.h. La solución alternativa es ejecutar los siguientes comandos antes de ejecutar "configure":
$ mkdir $top_dir/include/sys
$ cp /usr/include/sys/types.h $top_dir/include/sys
GCC v3.3.2 o posterior se ha corregido y no requiere esta solución alternativa.
Para compilar para power64 debe usar:
$ ./configure CFLAGS="-g -O2 -m64" CXXFLAGS="-g -O2 -m64"
Si su power admite registros altivec: $ ./configure CFLAGS="-g -O2 -m64 -maltivec" CXXFLAGS="-g -O2 -m64 -maltivec"
Para verificar si su procesador tiene soporte para registros vectoriales (altivec): cat /proc/cpuinfo | grep altivec y debería tener algo como esto: cpu : PPC970, altivec supported
Si libunwind parece no funcionar (el backtracing falla), intente compilarlo con -O0, sin optimizaciones. Hay algunos problemas del compilador dependiendo de la versión de su gcc.
Se aplican las instrucciones generales de compilación. Para compilar y ejecutar varias pruebas, necesita la biblioteca libexecinfo disponible en ports como devel/libexecinfo.
El desarrollo del port se realizó en FreeBSD 8.0-STABLE. La biblioteca se compiló con el compilador del sistema, que es una versión modificada de gcc 4.2.1, así como con gcc 4.4.3.
Después de compilar la biblioteca, puede ejecutar un conjunto de pruebas de regresión con:
$ make check
** Resultados esperados en IA-64 Linux
A menos que tenga una biblioteca C y un compilador muy recientes instalados, se espera actualmente que las siguientes pruebas fallen en IA-64 Linux:
Gtest-init (debería pasar a partir de glibc-2.3.x/gcc-3.4)
Ltest-init (debería pasar a partir de glibc-2.3.x/gcc-3.4)
test-ptrace (debería pasar a partir de glibc-2.3.x/gcc-3.4)
run-ia64-test-dyn1 (debería pasar a partir de glibc-2.3.x)
Esto no significa que libunwind no se pueda usar con compiladores antiguos o bibliotecas C antiguas, solo significa que para ciertos casos extremos, el desenrollado fallará. Dado que son casos extremos, es poco probable que las aplicaciones los activen.
Nota: Si obtiene muchos errores en Gia64-test-nat y Lia64-test-nat, es casi seguro que es una señal de un ensamblador antiguo. El ensamblador GNU solía codificar incorrectamente los desplazamientos relativos al puntero de pila anterior. Este error se corrigió el 21-Sep-2004, por lo que cualquier ensamblador posterior estará bien.
** Resultados esperados en x86 Linux
Se espera que las siguientes pruebas fallen en x86 Linux:
Gtest-resume-sig (no logra obtener SIGUSR2)
Ltest-resume-sig (lo mismo)
Gtest-dyn1 (aún no hay soporte de información unwind dinámica)
Ltest-dyn1 (aún no hay soporte de información unwind dinámica)
test-setjmp (longjmp() aún no implementado)
run-check-namespace (_Ux86_getcontext aún no disponible)
test-ptrace
** Resultados esperados en x86-64 Linux
Se espera que las siguientes pruebas fallen en x86-64 Linux:
Gtest-dyn1 (aún no hay soporte de información unwind dinámica)
Ltest-dyn1 (aún no hay soporte de información unwind dinámica)
Gtest-init (ver http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18743)
Ltest-init (lo mismo)
test-async-sig (se bloquea debido a mala información unwind?)
test-setjmp (longjmp() aún no implementado)
run-check-namespace (_Ux86_64_getcontext aún no disponible)
run-ptrace-mapper (??? investigar)
run-ptrace-misc (ver http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18748
y http://gcc.gnu.org/bugzilla/show_bug.cgi?id=18749)
** Resultados esperados en PARISC Linux
Advertencia: Se necesita GCC v3.4 o más reciente en PA-RISC Linux. Las versiones anteriores del compilador no lograban generar el encabezado de programa de manejo de excepciones (GNU_EH_FRAME) necesario para el desenrollado.
Se espera que las siguientes pruebas fallen en x86-64 Linux:
Gtest-bt (backtrace truncado en kill() debido a falta de información unwind)
Ltest-bt (lo mismo)
Gtest-resume-sig (Gresume.c:my_rt_sigreturn() es incorrecto de alguna manera)
Ltest-resume-sig (lo mismo)
Gtest-init (lo mismo)
Ltest-init (lo mismo)
Gtest-dyn1 (aún no hay soporte de información unwind dinámica)
Ltest-dyn1 (aún no hay soporte de información unwind dinámica)
test-setjmp (longjmp() aún no implementado)
run-check-namespace (la cadena de herramientas no admite HIDDEN aún)
** Resultados esperados en HP-UX
Actualmente, "make check" no es compatible con HP-UX. Puede intentar ejecutarlo, pero la mayoría de las pruebas fallarán (y algunas pueden no terminar). Los únicos programas de prueba que se sabe que funcionan en este momento son:
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
** Resultados esperados en PPC64 Linux
"make check" debería ejecutarse sin más de 10 de 24 pruebas falladas.
Esta distribución incluye algunas pruebas de rendimiento simples que dan una idea del costo básico de varias operaciones de libunwind. Después de compilar la biblioteca, puede ejecutar estas pruebas con los siguientes comandos:
$ cd tests $ make perf
Dirija todas las preguntas sobre esta biblioteca a:
Puede hacerlo enviando un correo a [email protected] con un cuerpo de:
subscribe libunwind-devel
o puede suscribirse y gestionar su suscripción a través de la interfaz web en:
https://savannah.nongnu.org/mail/?group=libunwind