abidiff - Online en la nube

Este es el comando abidiff que se puede ejecutar en el proveedor de alojamiento gratuito de OnWorks utilizando una de nuestras múltiples estaciones de trabajo en línea gratuitas, como Ubuntu Online, Fedora Online, emulador en línea de Windows o emulador en línea de MAC OS.

PROGRAMA:

NOMBRE


abidiff - comparar ABI de archivos ELF

abidiff compara las interfaces binarias de aplicación (ABI) de dos bibliotecas compartidas en ELF
formato. Emite un informe significativo que describe las diferencias entre las dos ABI.

Para obtener un informe de cambios de ABI completo que incluye cambios sobre la función y la variable
subtipos, las dos bibliotecas compartidas de entrada deben ir acompañadas de su información de depuración
in ENANO formato. De lo contrario, solo ELF se informan los símbolos que se agregaron o eliminaron.

INVOCACIÓN


abidiff [opciones]

OPCIONES


· --ayuda | -h

Muestre una pequeña ayuda sobre el comando y salga.

· --versión | -v

Muestre la versión del programa y salga.

· --debug-info-dir1 | --d1 <di-ruta1>

Para los casos en los que la información de depuración de primera biblioteca compartida se divide en un
archivo separado, dice arbitro dónde encontrar ese archivo de información de depuración independiente.

Tenga en cuenta que di-camino debe apuntar al directorio raíz bajo el cual la información de depuración
está dispuesto en forma de árbol. En los sistemas basados ​​en Red Hat, ese directorio es
usually / usr / lib / debug.

Tenga en cuenta también que esta opción no es obligatoria para la información de depuración dividida instalada por
el administrador de paquetes de su sistema porque entonces arbitro sabe dónde encontrarlo.

· --debug-info-dir2 | --d2 <di-ruta2>

Como --debug-info-dir1, esta opción dice arbitro dónde encontrar la depuración dividida
información para el segunda biblioteca compartida archivo.

· --estat

En lugar de mostrar las diferencias ABI detalladas entre primera biblioteca compartida y
segunda biblioteca compartida, simplemente muestre algunas estadísticas resumidas sobre estas diferencias.

· --fichas simbólicas

Mostrar únicamente las tablas de símbolos del primera biblioteca compartida y segunda biblioteca compartida.

· --fns eliminados

En el informe resultante sobre las diferencias entre primera biblioteca compartida y
segunda biblioteca compartida, solo muestra las funciones definidas globalmente que se eliminaron
del primera biblioteca compartida.

· --cambiado-fns

En el informe resultante sobre las diferencias entre primera biblioteca compartida y
segunda biblioteca compartida, solo muestra los cambios en subtipos de las funciones globales
definido en primera biblioteca compartida.

· --añadido-fns

En el informe resultante sobre las diferencias entre primera biblioteca compartida y
segunda biblioteca compartida, solo muestra las funciones definidas globalmente que se agregaron a
segunda biblioteca compartida.

· --borrado-vars

En el informe resultante sobre las diferencias entre primera biblioteca compartida y
segunda biblioteca compartida, solo muestra las variables definidas globalmente que fueron eliminadas
del primera biblioteca compartida.

· --variado-vars

En el informe resultante sobre las diferencias entre primera biblioteca compartida y
segunda biblioteca compartida, solo mostrar los cambios en los subtipos de la global
variables definidas en primera biblioteca compartida

· --agregado-vars

En el informe resultante sobre las diferencias entre primera biblioteca compartida y
segunda biblioteca compartida, solo muestra las variables globales que se agregaron (definieron) a
segunda biblioteca compartida.

· --nombre-sin-enlace

En el informe resultante, no muestre los nombres de los vínculos de los elementos agregados, eliminados o
funciones o variables cambiadas.

· --locs-no-presentación
No mostrar información sobre en qué lugar del second compartido bibliotecas el respectivo
se cambió el tipo.

· --símbolos sin referencia

En el informe resultante, no muestre información de cambio sobre la función y
símbolos de variable a los que no hace referencia ninguna información de depuración. Tenga en cuenta que para
estos símbolos no referenciados por ninguna información de depuración, la información de cambio
se muestran símbolos agregados o eliminados.

· - supresiones | --suplemento <camino a las supresiones>

Utilice un archivo de especificación de supresión ubicado en camino a las supresiones. Tenga en cuenta que esto
La opción puede aparecer varias veces en la línea de comando; toda la supresión
A continuación, se tienen en cuenta los archivos de especificación.

· --soltar <expresiones regulares>

Al leer el primera biblioteca compartida y segunda biblioteca compartida Archivos de entrada ELF, soltar
las funciones y variables definidas globalmente cuyo nombre coincide con la expresión regular
expresiones regulares. Como resultado, no se emitirán cambios que involucren estas funciones o variables.
en el informe de diferencias.

· --drop-fn <expresiones regulares>

Al leer el primera biblioteca compartida y segunda biblioteca compartida Archivos de entrada ELF, soltar
las funciones definidas globalmente cuyo nombre coincide con la expresión regular expresiones regulares. Como
Como resultado, no se emitirá ningún cambio que involucre estas funciones en el informe de diferencias.

· --drop-var <expresiones regulares>

Al leer el primera biblioteca compartida y segunda biblioteca compartida Archivos de entrada ELF, soltar
las variables definidas globalmente que coinciden con la expresión regular expresiones regulares.

· --guardar <expresiones regulares>

Al leer el primera biblioteca compartida y segunda biblioteca compartida Archivos de entrada ELF, mantenga
las funciones y variables definidas globalmente cuyos nombres coinciden con la expresión regular
expresiones regulares. Todas las demás funciones y variables se dejan caer al suelo y, por lo tanto, no
aparecen en el informe de diferencias resultante.

· --mantener-fn <expresiones regulares>

Al leer el primera biblioteca compartida y segunda biblioteca compartida Archivos de entrada ELF, mantenga
las funciones definidas globalmente cuyo nombre coincide con la expresión regular expresiones regulares. Todos
otras funciones se caen al suelo y, por lo tanto, no aparecerán en el resultado
informe diff.

· --mantener-var <expresiones regulares>

Al leer el primera biblioteca compartida y segunda biblioteca compartida Archivos de entrada ELF, mantenga
el definido globalmente qué nombres coinciden con la expresión regular expresiones regulares. Todos los demás
las variables se caen al suelo y, por lo tanto, no aparecerán en la diferencia resultante
.

· --inofensivo

En el informe de diferencias, muestre solo los cambios inofensivos. Por defecto, los inofensivos
los cambios se filtran fuera del informe de diferencias mantener el desorden al mínimo y tener un
mayor cambio para detectar problemas reales de LCA.

· --no dañino

En el informe de diferencias, no muestre los cambios dañinos. Por defecto, solo los dañinos
los cambios se muestran en el informe de diferencias.

· --redundante

En el informe de diferencias, muestre los cambios redundantes. Un cambio redundante es un cambio
que se ha mostrado en otra parte del informe.

· --no redundante

En el informe de diferencias, haz NOT mostrar cambios redundantes. Un cambio redundante es un cambio
que se ha mostrado en otra parte del informe. Esta opción se activa mediante
predeterminado.

· --no-arquitectura

No tenga en cuenta la arquitectura al comparar ABI.

· --dump-diff-árbol
Después del informe de diferencias, emita una representación textual del árbol de nodos de diferencias utilizado por
el motor de comparación para representar las funciones y variables cambiadas. Ese
La representación se emite a la salida de error con fines de depuración. Tenga en cuenta que
este árbol de diferencias es relevante solo para funciones y variables que tienen algún subtipo
cambios. Las funciones y variables agregadas o eliminadas no tienen ningún árbol de nodos de diferencias
asociado a ellos.

· - estadísticas

Emite estadísticas sobre varias cosas internas.

· --verboso

Emite registros detallados sobre el progreso de diversos aspectos internos.

DEVOLUCION VALORES


El código de salida del arbitro El comando es 0 si la ABI de los binarios que se están comparando
son iguales o distintos de cero si difieren o si la herramienta encontró un error.

En el último caso, el código de salida es un campo de bits de 8 bits de ancho en el que cada bit tiene un
significado específico.

El primer bit, de valor 1, denominado ABIDIFF_ERROR significa que hubo un error.

El segundo bit, de valor 2, denominado ABIDIFF_USAGE_ERROR significa que hubo un error en la forma
el usuario invocó la herramienta. Podría configurarse, por ejemplo, si el usuario invoca la herramienta
con un modificador de línea de comando desconocido, con un número o argumento incorrecto, etc. Si este bit es
establecido, entonces el ABIDIFF_ERROR El bit también debe establecerse.

El tercer bit, de valor 4, denominado ABIDIFF_ABI_CHANGE significa que el ABI de los binarios es
comparados son diferentes.

El cuarto bit, de valor 8, denominado ABIDIFF_ABI_INCOMPATIBLE_CHANGE significa el ABI del
Los binarios comparados son diferentes de una manera incompatible. Si este bit está establecido, entonces el
ABIDIFF_ABI_CHANGE bit también debe establecerse. Si el ABIDIFF_ABI_CHANGE está configurado y el
ABIDIFF_INCOMPATIBLE_CHANGE is NOT , entonces significa que las ABI que se están comparando podrían
o puede que no sea compatible. En ese caso, un ser humano necesita revisar los cambios de ABI
para decidir si son compatibles o no.

Los bits restantes no se utilizan por el momento.

USO EJEMPLOS


1. Detectar un cambio en un subtipo de una función:

$ cat -n prueba-v0.cc
1 // Compila esto con:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 estructura S0
5 {
6 entero m0;
7};
8
9 nulo
10 foo (S0 * / * nombre_parámetro * /)
11 {
12 // haz algo con nombre_parámetro.
13}
$
$ cat -n prueba-v1.cc
1 // Compila esto con:
2 // g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 estructura type_base
5 {
6 int insertado;
7};
8
9 estructura S0: tipo_base público
10 {
11 entero m0;
12};
13
14 nulo
15 foo (S0 * / * nombre_parámetro * /)
16 {
17 // haz algo con nombre_parámetro.
18}
$
$ g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
Resumen de cambios de funciones: 0 eliminado, 1 modificado, 0 función agregada
Resumen de cambios de variables: 0 eliminado, 0 modificado, 0 variable agregada

1 función con algún cambio indirecto de subtipo:

[C] 'function void foo (S0 *)' tiene algunos cambios indirectos de subtipo:
el parámetro 0 de tipo 'S0 *' tiene cambios de subtipo:
en apuntado al tipo 'struct S0':
el tamaño cambió de 32 a 64 bits
1 inserción de clase base:
estructura type_base
1 cambio de miembro de datos:
El desplazamiento 'int S0 :: m0' cambió de 0 a 32
$

2. Detectar otro cambio en un subtipo de función:

$ cat -n prueba-v0.cc
1 // Compila esto con:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 estructura S0
5 {
6 entero m0;
7};
8
9 nulo
10 foo (S0 & / * nombre_parámetro * /)
11 {
12 // haz algo con nombre_parámetro.
13}
$
$ cat -n prueba-v1.cc
1 // Compila esto con:
2 // g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 estructura S0
5 {
6 char insert_member;
7 entero m0;
8};
9
10 nulo
11 foo (S0 & / * nombre_parámetro * /)
12 {
13 // haz algo con nombre_parámetro.
14}
$
$ g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
Resumen de cambios de funciones: 0 eliminado, 1 modificado, 0 función agregada
Resumen de cambios de variables: 0 eliminado, 0 modificado, 0 variable agregada

1 función con algún cambio indirecto de subtipo:

[C] 'function void foo (S0 &)' tiene algunos cambios indirectos de subtipo:
el parámetro 0 de tipo 'S0 &' tiene cambios de subtipo:
en el tipo de referencia 'struct S0':
el tamaño cambió de 32 a 64 bits
1 inserción de miembro de datos:
'char S0 :: insert_member', en el desplazamiento 0 (en bits)
1 cambio de miembro de datos:
El desplazamiento 'int S0 :: m0' cambió de 0 a 32

$

3. Detectar que las funciones se eliminaron o agregaron a una biblioteca:

$ cat -n prueba-v0.cc
1 // Compila esto con:
2 // g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
3
4 estructura S0
5 {
6 entero m0;
7};
8
9 nulo
10 foo (S0 & / * nombre_parámetro * /)
11 {
12 // haz algo con nombre_parámetro.
13}
$
$ cat -n prueba-v1.cc
1 // Compila esto con:
2 // g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
3
4 estructura S0
5 {
6 char insert_member;
7 entero m0;
8};
9
10 nulo
11 bar (S0 & / * nombre_parámetro * /)
12 {
13 // haz algo con nombre_parámetro.
14}
$
$ g ++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g ++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ ../build/tools/abidiff libtest-v0.so libtest-v1.so
Resumen de cambios de funciones: 1 eliminado, 0 modificado, 1 funciones agregadas
Resumen de cambios de variables: 0 eliminado, 0 modificado, 0 variable agregada

1 función eliminada:
'función void foo (S0 &)' {_Z3fooR2S0}

1 función agregada:
'función barra vacía (S0 &)' {_Z3barR2S0}

$

Use abidiff en línea usando los servicios de onworks.net



Últimos programas en línea de Linux y Windows