abidiff(1): Skillnad mellan sidversioner

Från Wiki.linux.se
Hoppa till navigering Hoppa till sök
Ingen redigeringssammanfattning
Ingen redigeringssammanfattning
Rad 1: Rad 1:
Absolut — det som “blir fel” här är att texten har **hårda radbrytningar mitt i meningar** (från HTML/terminal-wrap). Nedan får du en version där jag:
= ABIDIFF(1) =
 
* tar bort “wrap-radbrytningar” i brödtext (varje stycke blir ett sammanhängande stycke)
* gör **en ren rad per flagga** och låter beskrivningen följa på egna rader utan konstiga brytningar
* lägger **exempel i `<pre>`** (där radbrytningar ska bevaras)
* använder tomrad mellan stycken/alternativ för bättre läsbarhet i MediaWiki
 
Kopiera/klistra in som den är:
 
---


== NAMN ==
== NAMN ==
'''abidiff''' – jämför ABI:er för ELF-filer
'''abidiff''' – jämför ABI:er för ELF-filer.<BR>


'''abidiff''' jämför *Application Binary Interface* (ABI) för två delade bibliotek i ELF-format (*Executable and Linkable Format*). Den genererar en meningsfull rapport som beskriver skillnaderna mellan de två ABI:erna.
'''abidiff''' jämför applikationsbinärgränssnitt (ABI, Application Binary Interface) för två delade bibliotek i ELF-format (Executable and Linkable Format). Verktyget skriver ut en meningsfull rapport som beskriver skillnaderna mellan de två ABI:erna.<BR><BR>


Verktyget kan också jämföra textuella representationer av ABI:t för två ELF-binärer (som genereras av '''abidw'''), eller jämföra en ELF-binär mot en textuell representation av en annan ELF-binär.
Det här verktyget kan också jämföra de textuella representationerna av ABI:t för två ELF-binärer (såsom de skrivs ut av '''abidw'''), eller jämföra en ELF-binär mot en textuell representation av en annan ELF-binär.<BR><BR>


För en omfattande ABI-ändringsrapport mellan två inmatade delade bibliotek som inkluderar ändringar i funktioners och variablers undertyper använder '''abidiff''' som standard felsökningsinformation i DWARF-format, om sådan finns. Annars jämför den gränssnitt med felsökningsinformation i CTF- eller BTF-format, om sådan finns. Om ingen felsökningsinformation i dessa format hittas beaktas endast ELF-symboler och rapporten handlar då om att symboler lagts till eller tagits bort.
För en omfattande ABI-ändringsrapport mellan två indata-delade bibliotek (som även inkluderar ändringar i funktions- och variabelundertypers strukturer) använder '''abidiff''' som standard felsökningsinformation i DWARF-format om den finns. Om DWARF saknas jämför den i stället med felsökningsinformation i CTF- eller BTF-format, om sådan finns. Om ingen felsökningsinformation i dessa format hittas, beaktas enbart ELF-symboler och verktyget rapporterar då om symboler har lagts till eller tagits bort.<BR><BR>


Verktyget använder biblioteket '''libabigail''' för att analysera binären samt dess tillhörande felsökningsinformation. Här är det generella arbetssättet.
Det här verktyget använder biblioteket libabigail för att analysera binären och dess associerade felsökningsinformation. Så här fungerar det i stora drag:<BR><BR>


När verktyget instrueras att göra det läses en binär och dess felsökningsinformation in och analyseras. För detta analyserar libabigail som standard beskrivningarna av de typer som är nåbara från gränssnitt (funktioner och variabler) som är synliga utanför sin översättningsenhet. När analysen är klar konstrueras en ABI-korpus genom att endast beakta den delmängd av typer som är nåbara från gränssnitt kopplade till ELF-symboler som är definierade och exporterade av binären. Det är denna slutliga ABI-korpus som libabigail betraktar som representerande ABI:t för den analyserade binären.
När du instruerar verktyget läses en binär och dess associerade felsökningsinformation in och analyseras. Libabigail analyserar som standard typbeskrivningar som kan nås från gränssnitt (funktioner och variabler) som är synliga utanför sin översättningsenhet. När analysen är klar konstrueras en ABI-korpus (ABI Corpus) genom att endast beakta den delmängd av typer som kan nås från gränssnitt kopplade till ELF-symboler som är definierade och exporterade av binären. Det är denna slutliga ABI-korpus som libabigail betraktar som binärens ABI.<BR><BR>


Libabigail har sedan möjlighet att generera textuella representationer av ABI-korpusar, jämföra dem, analysera deras förändringar och rapportera om dem.
Libabigail kan sedan generera textuella representationer av ABI-korpusar, jämföra dem, analysera ändringar och rapportera om dem.<BR>


== ANROP ==
== ANROP ==
'''abidiff''' [*alternativ*] <första-delade-bibliotek> <andra-delade-bibliotek>
== MILJÖ ==
'''abidiff''' laddar två standardfiler med *undertryckningsspecifikationer* (*suppression specification files*), slår samman deras innehåll och använder det för att filtrera bort ABI-ändringsrapporter som kan uppfattas som falska positiva.
'''Standardfil för systemomfattande undertryckningsspecifikation'''
Den hittas via den valfria miljövariabeln '''LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE'''. Om den inte är satt försöker abidiff läsa filen '''$libdir/libabigail/libabigail-default.abignore'''. Om filen inte finns laddas ingen systemomfattande standardfil.
'''Standardfil för användarundertryckningsspecifikation'''
Den hittas via den valfria miljövariabeln '''LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE'''. Om den inte är satt försöker abidiff läsa filen '''$HOME/.abignore'''. Om filen inte finns laddas ingen användarstandardfil.
== ALTERNATIV ==
'''--add-binaries1''' <bin1,bin2,bin3,..>
För varje kommaseparerad binär som anges: om binären hittas i katalogen som anges med '''--added-binaries-dir1''' så läser '''abidiff''' in ABI-korpusen för binären och lägger till den i en uppsättning korpusar (en *ABI Corpus Group*) som inkluderar första argumentet till '''abidiff'''.
Denna ABI-korpusgrupp jämförs sedan mot den andra korpusgruppen som anges som argument till '''abidiff'''.
'''--add-binaries2''' <bin1,bin2,bin3,..>
Som '''--add-binaries1''', men lägger till binärer i gruppen som inkluderar andra argumentet till '''abidiff'''. Denna grupp jämförs sedan mot den första gruppen.
'''--added-binaries-dir1''', '''--abd1''' <katalog-1>
Används tillsammans med '''--add-binaries1''', '''--follow-dependencies''' och '''--list-dependencies'''. Binärer som refereras av dessa alternativ och som hittas i katalog-1 läses in som ABI-korpus och läggs till i första ABI-korpusgruppen.
'''--added-binaries-dir2''', '''--abd2''' <katalog-2>
Som '''--added-binaries-dir1''', men för andra ABI-korpusgruppen.
'''--added-fns'''
Visa endast globalt definierade funktioner som lades till i <andra-delade-bibliotek>.
'''--added-vars'''
Visa endast globala variabler som lades till (definierades) i <andra-delade-bibliotek>.
'''--allow-non-exported-interfaces'''
När verktyget analyserar felsökningsinformation analyseras typer nåbara från gränssnitt synliga utanför sin översättningsenhet. Därefter byggs en ABI-korpus av typer nåbara från gränssnitt kopplade till definierade och exporterade ELF-symboler, och det är dessa ABI-korpusar som jämförs.
Detta kan bli mycket data (och långsamt) för applikationer, t.ex. Linux-kärnan. För “normalstora” binärer kan man ofta analysera alla synliga gränssnitt genom att använda detta alternativ.
Observera att detta alternativ är aktiverat som standard, utom när Linux-kärnan analyseras.
'''--btf'''
Vid jämförelse av binärer: extrahera ABI-information från BTF-felsökningsinformation, om sådan finns.
'''--changed-fns'''
Visa endast ändringar i undertyper för globalt definierade funktioner i <första-delade-bibliotek>.
'''--changed-vars'''
Visa endast ändringar i undertyper för globalt definierade variabler i <första-delade-bibliotek>.
'''--ctf'''
Vid jämförelse av binärer: extrahera ABI-information från CTF-felsökningsinformation, om sådan finns.
'''--debug-info-dir1''', '''--d1''' <di-sökväg1>
Om felsökningsinformation för <första-delade-bibliotek> ligger i en separat fil anger detta var abidiff ska hitta den filen.
di-sökväg måste peka på rotkatalogen under vilken felsökningsinformationen ligger i en trädstruktur (på Red Hat-baserade system ofta <root>/usr/lib/debug).
Alternativet kan anges flera gånger med olika rotkataloger; då letar abidiff i alla dessa.
'''--debug-info-dir2''', '''--d2''' <di-sökväg2>
Som '''--debug-info-dir1''', men för <andra-delade-bibliotek>.
'''--debug-self-comparison'''
Felsökningsläge som kan abortera körningen om avvikelser upptäcks när en binär jämförs med sig själv. Avsett för felsökning i debugger. Kräver att libabigail byggts med --enable-debug-self-comparison.
'''--debug-tc'''
Felsökningsläge som granskar typkanonisering: varje typjämförelse görs både strukturellt och kanoniskt och resultaten måste matcha, annars aborteras körningen. Kräver --enable-debug-type-canonicalization.
'''--deleted-fns'''
Visa endast globalt definierade funktioner som togs bort från <första-delade-bibliotek>.
'''--deleted-vars'''
Visa endast globalt definierade variabler som togs bort från <första-delade-bibliotek>.
'''--drop''' <regex>
Vid inläsning av ELF-filerna: uteslut globalt definierade funktioner och variabler vars namn matchar regex. Då rapporteras inga ändringar som involverar dessa.
'''--drop-fn''' <regex>
Som '''--drop''', men endast funktioner.
'''--drop-var''' <regex>
Som '''--drop''', men endast variabler.
'''--drop-private-types'''
Används med '''--headers-dir1''', '''--headers-dir2''', '''--header-file1''' och '''--header-file2'''. Med detta alternativ tas typer som INTE är definierade i publika headers bort helt ur libabigails interna ABI-representation, så de behöver inte filtreras bort senare. Detta kan minska minnesåtgången.
'''--dump-diff-tree'''
Efter diff-rapporten: skriv en textuell representation av diff-nodträdet (felsökningssyfte) till felutmatningen. Relevant endast för funktioner/variabler som har undertypsändringar.
'''--exported-interfaces-only'''
För att minska mängden data kan detta alternativ begränsa analysen till typer som är nåbara från gränssnitt kopplade till definierade och exporterade ELF-symboler. Detta är aktiverat som standard för Linux-kärnan, annars avstängt som standard.
'''--fail-no-debug-info'''
Om ingen felsökningsinformation hittas: avsluta med fel. Utan detta alternativ försöker programmet jämföra icke-debug-relaterade egenskaper (t.ex. rena ELF-egenskaper).
'''--follow-dependencies''', '''--fdeps'''
Konstruera ABI-korpusar även för beroenden som hittas via '''--added-binaries-dir1''' respektive '''--added-binaries-dir2''', och jämför sedan de två uppsättningarna (inmatning + beroenden).
'''--harmless'''
Visa endast ofarliga (*harmless*) ändringar. Som standard filtreras ofarliga ändringar bort för att göra rapporten mindre rörig.
'''--headers-dir1''', '''--hd1''' <headers-katalog-1>
Anger var publika headers för första biblioteket finns. ABI-ändringar för typer som inte definieras i publika headers filtreras bort. Kan anges flera gånger.


<pre>
<pre>
$ abidiff --headers-dir1 /some/path      \
abidiff [alternativ] &lt;första-delade-biblioteket&gt; &lt;andra-delade-biblioteket&gt;
          --headers-dir1 /some/other/path \
          binary-version-1 binary-version-2
</pre>
</pre>


'''--headers-dir2''', '''--hd2''' <headers-katalog-2>
== MILJÖ ==
Som '''--headers-dir1''', men för andra biblioteket. Kan anges flera gånger.
'''abidiff''' läser in två förvalda ''undertryckningsspecifikationsfiler'' (suppression specifications), slår ihop deras innehåll och använder detta för att filtrera bort ABI-ändringar som kan betraktas som falska positiva resultat.<BR><BR>


'''--header-file1''', '''--hf1''' <header-fil-1>
* '''Förvald systemomfattande undertryckningsfil'''<BR>
Anger en publik headerfil för första biblioteket.
  Platsen kan anges med miljövariabeln '''LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE'''. Om den inte är satt försöker '''abidiff''' läsa filen <code>$libdir/libabigail/libabigail-default.abignore</code>. Om filen inte finns laddas ingen förvald systemomfattande undertryckningsfil.<BR><BR>


'''--header-file2''', '''--hf2''' <header-fil-2>
* '''Förvald användarundertryckningsfil'''<BR>
Anger en publik headerfil för andra biblioteket.
  Platsen kan anges med miljövariabeln '''LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE'''. Om den inte är satt försöker '''abidiff''' läsa filen <code>$HOME/.abignore</code>. Om filen inte finns laddas ingen förvald användarundertryckningsfil.<BR>


'''--help''', '''-h'''
== ALTERNATIV ==
Visa kort hjälp och avsluta.
{| class="wikitable"
! Flagga
! Argument


'''--ignore-soname'''
| ! Beskrivning                                                                                                                                                                                                                                                                                        |
Ignorera skillnader i SONAME.
| ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
 
| <code>--add-binaries1</code>                                                                                                                                                                                                                                                                          |
'''--impacted-interfaces'''
| <code><bin1,bin2,bin3,..></code>                                                                                                                                                                                                                                                                      |
Vid visning av leaf-ändringar: visa lista över påverkade gränssnitt. Används tillsammans med '''--leaf-changes-only''', annars ignoreras det.
| För varje kommaseparerad binär som anges: om binären finns i katalogen som anges med <code>--added-binaries-dir1</code>, så läser '''abidiff''' in dess ABI-korpus och lägger till den i en uppsättning korpusar (en ”ABI Corpus Group”) som inkluderar första argumentet till '''abidiff'''.<BR><BR> |
 
| Denna korpusgrupp jämförs sedan mot den andra korpusgruppen som ges som andra argumentet till '''abidiff'''.                                                                                                                                                                                          |
'''--keep''' <regex>
| -                                                                                                                                                                                                                                                                                                    |
Behåll endast globalt definierade funktioner/variabler vars namn matchar regex. Alla andra utesluts och syns inte i rapporten.
| <code>--add-binaries2</code>                                                                                                                                                                                                                                                                          |
 
| <code><bin1,bin2,bin3,..></code>                                                                                                                                                                                                                                                                      |
'''--keep-fn''' <regex>
| Som <code>--add-binaries1</code>, men för andra argumentet till '''abidiff'''. Om binären hittas i katalogen som anges med <code>--added-binaries-dir2</code> läggs den till i korpusgruppen som inkluderar andra argumentet, och denna jämförs sedan mot den första korpusgruppen.                  |
Som '''--keep''', men endast funktioner.
| -                                                                                                                                                                                                                                                                                                    |
 
| <code>--added-binaries-dir1</code><BR><code>--abd1</code>                                                                                                                                                                                                                                            |
'''--keep-var''' <regex>
| <code><katalog-1></code>                                                                                                                                                                                                                                                                              |
Som '''--keep''', men endast variabler.
| Används tillsammans med <code>--add-binaries1</code>, <code>--follow-dependencies</code> och <code>--list-dependencies</code>.<BR>                                                                                                                                                                    |
 
| Binärer som refereras av dessa alternativ, och som hittas i <code><katalog-1></code>, laddas som ABI-korpus och läggs till i första korpusgruppen.                                                                                                                                                    |
'''--kmi-whitelist''', '''-w''' <vitlista>
| -                                                                                                                                                                                                                                                                                                    |
Vid analys av Linux-kärnans binär: vitlista ELF-symbolnamn för funktioner/variabler vars gränssnitt ska beaktas (KMI). Om ingen vitlista anges beaktas hela KMI:t.
| <code>--added-binaries-dir2</code><BR><code>--abd2</code>                                                                                                                                                                                                                                            |
 
| <code><katalog-2></code>                                                                                                                                                                                                                                                                              |
'''--leaf-changes-only''', '''-l'''
| Motsvarar <code>--added-binaries-dir1</code>, men för andra korpusgruppen.                                                                                                                                                                                                                            |
Visa endast leaf-ändringar (ingen konsekvens-/påverkansanalys). Detta alternativ implicerar '''--redundant'''.
| -                                                                                                                                                                                                                                                                                                    |
 
| <code>--added-fns</code>                                                                                                                                                                                                                                                                              |
Typisk utdata:
| (inget)                                                                                                                                                                                                                                                                                              |
 
| Visa endast globalt definierade funktioner som har lagts till i <code><andra-delade-biblioteket></code>.                                                                                                                                                                                             |
<pre>
| -                                                                                                                                                                                                                                                                                                    |
$ abidiff libtest-v0.so libtest-v1.so
| <code>--added-vars</code>                                                                                                                                                                                                                                                                            |
Functions changes summary: 0 Removed, 1 Changed, 0 Added function
| (inget)                                                                                                                                                                                                                                                                                              |
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
| Visa endast globala variabler som har lagts till (definierats) i <code><andra-delade-biblioteket></code>.                                                                                                                                                                                            |
 
| -                                                                                                                                                                                                                                                                                                    |
1 function with some indirect sub-type change:
| <code>--allow-non-exported-interfaces</code>                                                                                                                                                                                                                                                          |
 
| (inget)                                                                                                                                                                                                                                                                                              |
  [C]'function void fn(C&)' at test-v1.cc:13:1 has some indirect sub-type changes:
| Vid analys av debug-info analyseras typer som kan nås från gränssnitt synliga utanför sin översättningsenhet, och en ABI-korpus byggs sedan för exporterade/definierade ELF-symboler. Det är dessa korpusar som jämförs.<BR><BR>                                                                      |
    parameter 1 of type 'C&' has sub-type changes:
| Nackdelen är att ”alla externa gränssnitt” kan ge enormt mycket data (särskilt för applikationer snarare än bibliotek), t.ex. Linuxkärnan, vilket kan bli extremt långsamt.<BR><BR>                                                                                                                  |
      in referenced type 'struct C' at test-v1.cc:7:1:
| För ”normalt stora” binärer kan man ofta ha råd med detta; detta alternativ aktiverar den analysen.<BR><BR>                                                                                                                                                                                          |
        type size hasn't changed
| Observera: detta är på som standard, utom när binären är Linuxkärnan.                                                                                                                                                                                                                                |
        1 data member change:
| -                                                                                                                                                                                                                                                                                                    |
        type of 'leaf* C::m0' changed:
| <code>--btf</code>                                                                                                                                                                                                                                                                                    |
          in pointed to type 'struct leaf' at test-v1.cc:1:1:
| (inget)                                                                                                                                                                                                                                                                                              |
            type size changed from 32 to 64 bits
| Vid jämförelse av binärer: extrahera ABI-information från BTF-debug-info om den finns.                                                                                                                                                                                                                |
            1 data member insertion:
| -                                                                                                                                                                                                                                                                                                    |
              'char leaf::m1', at offset 32 (in bits) at test-v1.cc:4:1
| <code>--changed-fns</code>                                                                                                                                                                                                                                                                            |
$
| (inget)                                                                                                                                                                                                                                                                                              |
</pre>
| Visa endast ändringar i undertyper för globala funktioner definierade i <code><första-delade-biblioteket></code>.                                                                                                                                                                                    |
 
| -                                                                                                                                                                                                                                                                                                     |
Med leaf-läge:
| <code>--changed-vars</code>                                                                                                                                                                                                                                                                          |
| (inget)                                                                                                                                                                                                                                                                                              |
| Visa endast ändringar i undertyper för globala variabler definierade i <code><första-delade-biblioteket></code>.                                                                                                                                                                                      |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--ctf</code>                                                                                                                                                                                                                                                                                    |
| (inget)                                                                                                                                                                                                                                                                                              |
| Vid jämförelse av binärer: extrahera ABI-information från CTF-debug-info om den finns.                                                                                                                                                                                                               |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--debug-info-dir1</code><BR><code>--d1</code>                                                                                                                                                                                                                                                  |
| <code><di-sökväg1></code>                                                                                                                                                                                                                                                                            |
| Om debug-info för <code><första-delade-biblioteket></code> är separerad i en annan fil: anger var denna separata debug-info finns.<BR><BR>                                                                                                                                                            |
| <code><di-sökväg></code> måste peka på rotkatalogen där debug-info är organiserad i ett träd. På Red Hat-baserade system är detta ofta <code><root>/usr/lib/debug</code>.<BR><BR>                                                                                                                    |
| Kan anges flera gånger; då söker '''abidiff''' i alla angivna rotkataloger.<BR><BR>                                                                                                                                                                                                                  |
| Inte nödvändigt om split debug-info installerats via pakethanteraren ('''abidiff''' vet då var den finns).                                                                                                                                                                                            |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--debug-info-dir2</code><BR><code>--d2</code>                                                                                                                                                                                                                                                  |
| <code><di-sökväg2></code>                                                                                                                                                                                                                                                                            |
| Som <code>--debug-info-dir1</code>, men för <code><andra-delade-biblioteket></code>.                                                                                                                                                                                                                  |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--debug-self-comparison</code>                                                                                                                                                                                                                                                                  |
| (inget)                                                                                                                                                                                                                                                                                              |
| I detta läge skrivs felmeddelanden ut för typer som misslyckas med typ-kanonisering när en binär jämförs med sig själv. Vid avvikelser aborteras körningen för felsökning i debugger.<BR><BR>                                                                                                        |
| Detta är ett valfritt debug-/sanity-check-alternativ. Kräver att libabigail byggts med <code>--enable-debug-self-comparison</code>.                                                                                                                                                                  |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--debug-tc</code>                                                                                                                                                                                                                                                                              |
| (inget)                                                                                                                                                                                                                                                                                              |
| Lägger typkanonisering under hård granskning: varje typjämförelse görs två gånger (strukturellt och kanoniskt). Om resultaten skiljer sig aborteras processen så att det går att felsöka varför.<BR><BR>                                                                                              |
| Valfritt debug-/sanity-check-alternativ. Kräver libabigail byggt med <code>--enable-debug-type-canonicalization</code>.                                                                                                                                                                              |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--deleted-fns</code>                                                                                                                                                                                                                                                                           |
| (inget)                                                                                                                                                                                                                                                                                              |
| Visa endast globalt definierade funktioner som togs bort från <code><första-delade-biblioteket></code>.                                                                                                                                                                                              |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--deleted-vars</code>                                                                                                                                                                                                                                                                          |
| (inget)                                                                                                                                                                                                                                                                                              |
| Visa endast globalt definierade variabler som togs bort från <code><första-delade-biblioteket></code>.                                                                                                                                                                                                |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--drop</code>                                                                                                                                                                                                                                                                                  |
| <code><regex></code>                                                                                                                                                                                                                                                                                  |
| Vid inläsning av ELF-filerna: droppa globalt definierade funktioner och variabler vars namn matchar <code><regex></code>. Då rapporteras inga ändringar för dem.                                                                                                                                     |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--drop-fn</code>                                                                                                                                                                                                                                                                                |
| <code><regex></code>                                                                                                                                                                                                                                                                                  |
| Som <code>--drop</code>, men endast för funktioner.                                                                                                                                                                                                                                                   |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--drop-var</code>                                                                                                                                                                                                                                                                              |
| <code><regex></code>                                                                                                                                                                                                                                                                                  |
| Som <code>--drop</code>, men endast för variabler.                                                                                                                                                                                                                                                   |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--drop-private-types</code>                                                                                                                                                                                                                                                                    |
| (inget)                                                                                                                                                                                                                                                                                              |
| Används med <code>--headers-dir1</code>, <code>--headers-dir2</code>, <code>--header-file1</code>, <code>--header-file2</code>.<BR><BR>                                                                                                                                                              |
| Med detta alternativ droppas typer som '''inte''' är definierade i headerfilerna helt ur libabigails interna representation av ABI:t (de behöver alltså inte filtreras bort i efterhand).<BR><BR>                                                                                                    |
| Utan detta alternativ behålls privata typer internt och filtreras senare i rapporten.<BR><BR>                                                                                                                                                                                                        |
| Kan minska minnesanvändning, främst för binärer med många publikt definierade och exporterade typer.                                                                                                                                                                                                  |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--dump-diff-tree</code>                                                                                                                                                                                                                                                                         |
| (inget)                                                                                                                                                                                                                                                                                              |
| Efter diff-rapporten: skriv ut en textuell representation av diff-nodträdet som jämförelsemotorn använder för ändrade funktioner/variabler (till stderr), avsett för felsökning.<BR><BR>                                                                                                              |
| Relevant endast för ändringar i undertyper; tillagda/borttagna symboler har inget diff-träd.                                                                                                                                                                                                         |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--exported-interfaces-only</code>                                                                                                                                                                                                                                                              |
| (inget)                                                                                                                                                                                                                                                                                              |
| För att mitigera prestandaproblem kan detta alternativ instruera libabigail att endast analysera typer som kan nås från gränssnitt kopplade till definierade och exporterade ELF-symboler (i stället för ”alla externa gränssnitt”).<BR><BR>                                                          |
| Detta är på som standard när Linuxkärnan analyseras, annars av som standard.                                                                                                                                                                                                                          |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--fail-no-debug-info</code>                                                                                                                                                                                                                                                                    |
| (inget)                                                                                                                                                                                                                                                                                              |
| Om ingen debug-info hittas: misslyckas programmet. Utan detta alternativ försöker verktyget ändå jämföra rena ELF-egenskaper.                                                                                                                                                                        |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--follow-dependencies</code><BR><code>--fdeps</code>                                                                                                                                                                                                                                            |
| (inget)                                                                                                                                                                                                                                                                                              |
| För varje beroende till första argumentet: om beroendet hittas i katalogen som anges av <code>--added-binaries-dir1</code>, bygg en ABI-korpus av beroendet och lägg till den i första korpusgruppen.<BR><BR>                                                                                        |
| Motsvarande görs för andra argumentet med <code>--added-binaries-dir2</code>.<BR><BR>                                                                                                                                                                                                                |
| Sedan jämförs korpusgrupperna. Dvs '''abidiff''' jämför ”första indata + dess beroenden” mot ”andra indata + dess beroenden”.                                                                                                                                                                        |
| -                                                                                                                                                                                                                                                                                                     |
| <code>--harmless</code>                                                                                                                                                                                                                                                                              |
| (inget)                                                                                                                                                                                                                                                                                              |
| Visa endast ''ofarliga'' (harmless) ändringar. Som standard filtreras ofarliga ändringar bort för att minska brus.                                                                                                                                                                                   |
| -                                                                                                                                                                                                                                                                                                    |
| <code>--headers-dir1</code><BR><code>--hd1</code>                                                                                                                                                                                                                                                    |
| <code><headers-katalog-1></code>                                                                                                                                                                                                                                                                      |
| Anger var de publika headerfilerna för första biblioteket/binären finns. Verktyget filtrerar då bort ABI-ändringar för typer som inte definieras i publika headers.<BR><BR>                                                                                                                          |
| Kan anges flera gånger, t.ex.:<BR>                                                                                                                                                                                                                                                                    |


<pre>
<pre>
$ abidiff -l libtest-v0.so libtest-v1.so
abidiff --headers-dir1 /some/path \
'struct leaf' changed:
      --headers-dir1 /some/other/path \
  type size changed from 32 to 64 bits
      binary-version-1 binary-version-2
  1 data member insertion:
    'char leaf::m1', at offset 32 (in bits) at test-v1.cc:4:1
 
  one impacted interface:
    function void fn(C&)
$
</pre>
</pre>


'''--list-dependencies''', '''--ldeps'''
|-
Lista alla beroenden till indataargumenten som hittas i katalogerna angivna med '''--added-binaries-dir1''' och '''--added-binaries-dir2'''.
| <code>--headers-dir2</code><BR><code>--hd2</code>
 
| <code><headers-katalog-2></code>
'''--no-added-syms'''
Visa inte tillagda funktioner/variabler och inte heller deras ELF-symboler. Andra ändringar visas om de inte stoppas av andra alternativ.
 
'''--no-assume-odr-for-cplusplus'''
Inaktivera antagandet om *One Definition Rule* (ODR) vid analys av C++ med DWARF; libabigail jämför då faktiskt typer med samma namn istället för att anta att de är lika.
 
'''--no-architecture'''
Ta inte hänsyn till arkitektur vid ABI-jämförelse.
 
'''--no-change-categorization''', '''-x'''
Inaktivera kategorisering (harmless/harmful). Eftersom kategorisering krävs för filtrering stänger detta även av filtrering. Användbart för stora ändringsgrafer och tillsammans med '''--leaf-changes-only'''.
 
'''--no-corpus-path'''
Skriv inte ut path-attributet för ABI-korpusen.
 
'''--no-default-suppression'''
Ladda inte standardfilerna för undertryckningar.
 
'''--no-harmful'''
Visa inte skadliga (*harmful*) ändringar. Som standard visas annars endast skadliga ändringar.
 
'''--no-leverage-dwarf-factorization'''
Inaktivera optimeringar som används när DWARF har faktoriserats med DWZ.
 
'''--no-linkage-name'''
Visa inte länk-namn (*linkage names*) för tillagda/borttagna/ändrade symboler.
 
'''--no-linux-kernel-mode'''
Behandla Linux-kärnans binärer som vanliga ELF-binärer och använd ELF-exportlogik istället för __ksymtab/__ksymtab_gpl.
 
'''--no-redundant'''
Visa INTE redundanta ändringar (aktiverat som standard).
 
'''--no-show-locs'''
Visa inte var i det andra biblioteket respektive typ ändrades.
 
'''--no-show-relative-offset-changes'''
Visa inte hur många bitar en offset flyttats (visa bara gamla och nya offset).
 
'''--no-unreferenced-symbols'''
Visa inte ändringar för symboler som inte refereras av någon felsökningsinformation (för dessa visas annars endast tillägg/borttagning).
 
'''--non-reachable-types''', '''-t'''
Analysera och rapportera även typer som inte är nåbara från globala funktioner/variabler. Kan påverka prestanda kraftigt, men kan begränsas med headers/suppressions.
 
'''--redundant'''
Visa redundanta ändringar.
 
'''--show-bits'''
Visa storlekar och offset i bitar (standard).
 
'''--show-bytes'''
Visa storlekar och offset i byte.
 
'''--show-dec'''
Visa i decimal form (standard).
 
'''--show-hex'''
Visa i hexadecimal form.
 
'''--stat'''
Visa endast sammanfattande statistik istället för detaljerad diff.
 
'''--stats'''
Skriv ut intern statistik.
 
'''--suppressions''', '''--suppr''' <suppressions-fil>
Använd undertryckningsfil. Kan anges flera gånger; då används alla. Om detta inte anges laddas standardfiler.
 
'''--symtabs'''
Visa endast symboltabellerna för första och andra biblioteket.
 
'''--verbose'''
Skriv ut utförliga loggar.


'''--version''', '''-v'''
| Som <code>--headers-dir1</code>, men för andra biblioteket.                                                                                                                                                                                                                |
Visa programversion och avsluta.
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| <code>--header-file1</code><BR><code>--hf1</code>                                                                                                                                                                                                                          |
| <code><headerfil-1></code>                                                                                                                                                                                                                                                  |
| Anger en publik headerfil för första biblioteket som ska beaktas; filtrerar bort ändringar för typer som inte definieras i publika headers.                                                                                                                                |
| -                                                                                                                                                                                                                                                                          |
| <code>--header-file2</code><BR><code>--hf2</code>                                                                                                                                                                                                                          |
| <code><headerfil-2></code>                                                                                                                                                                                                                                                  |
| Som <code>--header-file1</code>, men för andra biblioteket.                                                                                                                                                                                                                |
| -                                                                                                                                                                                                                                                                          |
| <code>--help</code><BR><code>-h</code>                                                                                                                                                                                                                                      |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa kort hjälp och avsluta.                                                                                                                                                                                                                                                |
| -                                                                                                                                                                                                                                                                          |
| <code>--ignore-soname</code>                                                                                                                                                                                                                                                |
| (inget)                                                                                                                                                                                                                                                                    |
| Ignorera skillnader i SONAME vid jämförelse.                                                                                                                                                                                                                                |
| -                                                                                                                                                                                                                                                                          |
| <code>--impacted-interfaces</code>                                                                                                                                                                                                                                          |
| (inget)                                                                                                                                                                                                                                                                    |
| Vid visning av ”leaf changes”: visa listan av påverkade gränssnitt. Ska användas tillsammans med <code>--leaf-changes-only</code>, annars ignoreras den.                                                                                                                    |
| -                                                                                                                                                                                                                                                                          |
| <code>--keep</code>                                                                                                                                                                                                                                                        |
| <code><regex></code>                                                                                                                                                                                                                                                        |
| Vid inläsning: behåll endast globalt definierade funktioner/variabler vars namn matchar <code><regex></code>. Alla andra droppas och syns inte i rapporten.                                                                                                                |
| -                                                                                                                                                                                                                                                                          |
| <code>--keep-fn</code>                                                                                                                                                                                                                                                      |
| <code><regex></code>                                                                                                                                                                                                                                                        |
| Som <code>--keep</code>, men endast funktioner.                                                                                                                                                                                                                            |
| -                                                                                                                                                                                                                                                                          |
| <code>--keep-var</code>                                                                                                                                                                                                                                                    |
| <code><regex></code>                                                                                                                                                                                                                                                        |
| Som <code>--keep</code>, men endast variabler.                                                                                                                                                                                                                              |
| -                                                                                                                                                                                                                                                                          |
| <code>--kmi-whitelist</code><BR><code>-w</code>                                                                                                                                                                                                                            |
| <code><sökväg-till-vitlista></code>                                                                                                                                                                                                                                        |
| Vid analys av Linuxkärna: pekar på en vitlista över ELF-symbolnamn för funktioner/variabler vars gränssnitt ska beaktas. Denna lista kallas ”Kernel Module Interface white list” (KMI), eftersom man i kärnkontext pratar om gränssnittet mellan kärna och moduler.<BR><BR> |
| Symboler som inte finns i listan beaktas inte. Om alternativet inte anges beaktas hela KMI:t (alla publikt definierade och exporterade funktioner/variabler).                                                                                                              |
| -                                                                                                                                                                                                                                                                          |
| <code>--leaf-changes-only</code><BR><code>-l</code>                                                                                                                                                                                                                        |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa endast ”leaf changes”, dvs visa inte påverkningsanalysrapport. Detta alternativ implicerar <code>--redundant</code>.<BR><BR>                                                                                                                                          |
| (I manualen följer ett längre exempel på skillnaden mellan standardutdata och leaf-only-utdata; se avsnittet ”ANVÄNDNINGSEXEMPEL”.)                                                                                                                                        |
| -                                                                                                                                                                                                                                                                          |
| <code>--list-dependencies</code><BR><code>--ldeps</code>                                                                                                                                                                                                                    |
| (inget)                                                                                                                                                                                                                                                                    |
| Lista alla beroenden till indataargumenten som hittas i katalogerna angivna via <code>--added-binaries-dir1</code> och <code>--added-binaries-dir2</code>.                                                                                                                  |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-added-syms</code>                                                                                                                                                                                                                                                |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa inte tillagda funktioner/variabler i rapporten, och visa inte heller deras ELF-symboler. Övriga ändringstyper visas om de inte förbjuds av andra flaggor.                                                                                                              |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-assume-odr-for-cplusplus</code>                                                                                                                                                                                                                                  |
| (inget)                                                                                                                                                                                                                                                                    |
| Vid analys av binär från C++ med DWARF: libabigail antar One Definition Rule (ODR) för att snabba upp, så typer med samma namn antas lika.<BR><BR>                                                                                                                          |
| Detta alternativ stänger av antagandet och tvingar libabigail att faktiskt jämföra typerna.                                                                                                                                                                                |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-architecture</code>                                                                                                                                                                                                                                              |
| (inget)                                                                                                                                                                                                                                                                    |
| Ta inte hänsyn till arkitektur vid jämförelse av ABI.                                                                                                                                                                                                                      |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-change-categorization</code><BR><code>-x</code>                                                                                                                                                                                                                  |
| (inget)                                                                                                                                                                                                                                                                    |
| Stäng av kategorisering av ändringar i ofarliga/skadliga. Kategorisering krävs för filtrering, så detta stänger även av filtreringen.<BR><BR>                                                                                                                              |
| Syftet är att snabba upp när ändringsgrafen är enorm och du t.ex. vill se leaf-changes utan att bry dig om påverkan. Används ofta med <code>--leaf-changes-only</code>.                                                                                                    |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-corpus-path</code>                                                                                                                                                                                                                                              |
| (inget)                                                                                                                                                                                                                                                                    |
| Skriv inte ut attributet ”path” för ABI-korpusen.                                                                                                                                                                                                                          |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-default-suppression</code>                                                                                                                                                                                                                                      |
| (inget)                                                                                                                                                                                                                                                                    |
| Ladda inte de förvalda undertryckningsfilerna.                                                                                                                                                                                                                              |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-harmful</code>                                                                                                                                                                                                                                                  |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa inte ”skadliga” (harmful) ändringar. Som standard är det annars främst skadliga ändringar som visas.                                                                                                                                                                  |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-leverage-dwarf-factorization</code>                                                                                                                                                                                                                              |
| (inget)                                                                                                                                                                                                                                                                    |
| Om DWARF debug-info har processats med verktyget '''dwz''' antas typen vara faktoriserad och libabigail kan optimera. Detta alternativ stänger av dessa optimeringar.                                                                                                      |
| -                                                                                                                                                                                                                                                                           |
| <code>--no-linkage-name</code>                                                                                                                                                                                                                                              |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa inte länkarnamn (linkage names) för tillagda/borttagna/ändrade funktioner eller variabler.                                                                                                                                                                            |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-linux-kernel-mode</code>                                                                                                                                                                                                                                        |
| (inget)                                                                                                                                                                                                                                                                    |
| Utan detta alternativ: om '''abidiff''' upptäcker Linuxkärnebinärer (vmlinux/moduler) beaktas endast symboler listade i sektionerna <code>__ksymtab</code> och <code>__ksymtab_gpl</code>.<BR><BR>                                                                          |
| Med detta alternativ behandlas binären som en ”vanlig” ELF, och symboler som är definierade och exporterade i ELF-mening beaktas.                                                                                                                                          |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-redundant</code>                                                                                                                                                                                                                                                |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa '''inte''' redundanta ändringar (ändringar som redan visats någon annanstans i rapporten). Detta är på som standard.                                                                                                                                                  |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-show-locs</code>                                                                                                                                                                                                                                                |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa inte information om var i <code><andra-delade-biblioteket></code> respektive typ ändrades.                                                                                                                                                                            |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-show-relative-offset-changes</code>                                                                                                                                                                                                                              |
| (inget)                                                                                                                                                                                                                                                                    |
| När en medlems offset ändras: utan detta alternativ visas både gammal/ny offset och även hur många bitar ändringen är. Med detta alternativ visas inte ”förändringen i antal bitar”.                                                                                        |
| -                                                                                                                                                                                                                                                                          |
| <code>--no-unreferenced-symbols</code>                                                                                                                                                                                                                                      |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa inte ändringsinfo för funktions-/variabelsymboler som inte refereras av någon debug-info. För sådana symboler är ändringen annars typiskt ”tillagd” eller ”borttagen symbol”.                                                                                          |
| -                                                                                                                                                                                                                                                                          |
| <code>--non-reachable-types</code><BR><code>-t</code>                                                                                                                                                                                                                      |
| (inget)                                                                                                                                                                                                                                                                    |
| Analysera och rapportera ändringar för alla typer i binären, även de som inte kan nås från globala funktioner/variabler.<BR><BR>                                                                                                                                            |
| Kan ge kraftig prestandaförsämring om antalet typer är stort. Men om det kombineras med <code>--headers-dir{1,2}</code> och/eller <code>--header-file{1,2}</code> begränsas extra typer till sådana som definieras i publika headers, vilket kan göra det rimligt.<BR><BR>  |
| Även suppression-filer (via <code>--suppressions</code>) kan hjälpa att hålla analysmängden nere.<BR><BR>                                                                                                                                                                  |
| Utan detta alternativ analyseras bara ”nåbara” typer, och endast dessa ändringar upptäcks/rapporteras.                                                                                                                                                                      |
| -                                                                                                                                                                                                                                                                          |
| <code>--redundant</code>                                                                                                                                                                                                                                                    |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa redundanta ändringar (motsatsen till <code>--no-redundant</code>).                                                                                                                                                                                                    |
| -                                                                                                                                                                                                                                                                          |
| <code>--show-bits</code>                                                                                                                                                                                                                                                    |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa storlekar och offset i bitar, inte bytes. Detta är på som standard.                                                                                                                                                                                                    |
| -                                                                                                                                                                                                                                                                          |
| <code>--show-bytes</code>                                                                                                                                                                                                                                                  |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa storlekar och offset i bytes, inte bitar.                                                                                                                                                                                                                              |
| -                                                                                                                                                                                                                                                                          |
| <code>--show-dec</code>                                                                                                                                                                                                                                                    |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa storlekar och offset i decimal. Detta är på som standard.                                                                                                                                                                                                              |
| -                                                                                                                                                                                                                                                                          |
| <code>--show-hex</code>                                                                                                                                                                                                                                                    |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa storlekar och offset i hexadecimal.                                                                                                                                                                                                                                    |
| -                                                                                                                                                                                                                                                                          |
| <code>--stat</code>                                                                                                                                                                                                                                                        |
| (inget)                                                                                                                                                                                                                                                                    |
| I stället för detaljerad diff: visa sammanfattande statistik över skillnaderna.                                                                                                                                                                                            |
| -                                                                                                                                                                                                                                                                          |
| <code>--stats</code>                                                                                                                                                                                                                                                        |
| (inget)                                                                                                                                                                                                                                                                    |
| Skriv ut statistik om olika interna saker.                                                                                                                                                                                                                                  |
| -                                                                                                                                                                                                                                                                          |
| <code>--suppressions</code><BR><code>--suppr</code>                                                                                                                                                                                                                        |
| <code><sökväg></code>                                                                                                                                                                                                                                                      |
| Använd en suppression-specifikationsfil i <code><sökväg></code>. Kan anges flera gånger; då tas alla filer med i beräkningen.<BR><BR>                                                                                                                                      |
| Observera: om detta inte anges laddas de förvalda suppression-filerna (om de finns).                                                                                                                                                                                        |
| -                                                                                                                                                                                                                                                                          |
| <code>--symtabs</code>                                                                                                                                                                                                                                                      |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa endast symboltabellerna för första och andra delade biblioteket.                                                                                                                                                                                                      |
| -                                                                                                                                                                                                                                                                          |
| <code>--verbose</code>                                                                                                                                                                                                                                                      |
| (inget)                                                                                                                                                                                                                                                                    |
| Skriv ut utförliga loggar om diverse interna förloppssaker.                                                                                                                                                                                                                |
| -                                                                                                                                                                                                                                                                          |
| <code>--version</code><BR><code>-v</code>                                                                                                                                                                                                                                  |
| (inget)                                                                                                                                                                                                                                                                    |
| Visa programmets version och avsluta.                                                                                                                                                                                                                                       |
| }                                                                                                                                                                                                                                                                          |


== RETURVÄRDEN ==
== RETURVÄRDEN ==
Returkoden är 0 om ABI:erna är lika, annars icke-noll om de skiljer sig eller om ett fel inträffade.
Returkoden från '''abidiff''' är antingen 0 om ABI:t för binärerna som jämförs är lika, eller icke-noll om de skiljer sig eller om verktyget stötte på ett fel.<BR><BR>


Vid icke-noll är returkoden ett 8-bitars bitfält där varje bit har en betydelse:
I det senare fallet är returkoden ett 8-bitars bitfält där varje bit har en specifik betydelse:<BR><BR>


* 1 '''ABIDIFF_ERROR''' ett fel inträffade
* Bit 1 (värde 1), '''ABIDIFF_ERROR''': ett fel inträffade.<BR>
* 2 '''ABIDIFF_USAGE_ERROR''' fel i hur kommandot anropades (okänd flagga, fel antal argument, osv.); om denna bit är satt måste även '''ABIDIFF_ERROR''' vara satt
* Bit 2 (värde 2), '''ABIDIFF_USAGE_ERROR''': fel i hur användaren anropade verktyget (okänd flagga, fel antal argument, osv). Om denna bit är satt måste även '''ABIDIFF_ERROR''' vara satt.<BR>
* 4 '''ABIDIFF_ABI_CHANGE''' ABI:erna skiljer sig
* Bit 3 (värde 4), '''ABIDIFF_ABI_CHANGE''': ABI:t skiljer sig mellan binärerna.<BR>
* 8 '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''' ABI:erna skiljer sig på ett inkompatibelt sätt; om denna bit är satt måste även '''ABIDIFF_ABI_CHANGE''' vara satt
* Bit 4 (värde 8), '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''': ABI:t skiljer sig på ett inkompatibelt sätt. Om denna bit är satt måste även '''ABIDIFF_ABI_CHANGE''' vara satt. Om '''ABIDIFF_ABI_CHANGE''' är satt men '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''' inte är satt betyder det att ABI:erna kan vara kompatibla eller inte; en människa behöver då granska ändringarna.<BR><BR>


För närvarande finns bara några få typer av ABI-ändringar som alltid sätter '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''':
För närvarande finns bara några få typer av ABI-ändringar som alltid leder till att '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''' sätts:<BR>


* borttagning av symbol för en funktion/variabel som varit definierad och exporterad
* Borttagning av symbolen för en funktion eller variabel som varit definierad och exporterad.<BR>
* ändring av index för en medlem i en virtuell funktionstabell (C++)
* Ändring av index för en medlem i en virtuell funktionstabell (för C++-program och -bibliotek).<BR><BR>


Övriga bitar används inte för närvarande.
Med tiden kan fler mönster identifieras som alltid utgör inkompatibla ändringar; då kommer koden att uppdateras för att känna igen dessa fall. Om du hittar sådana mönster, rapportera dem gärna.<BR><BR>


== EXEMPEL ==
Övriga bitar används inte för tillfället.<BR>


1. Upptäcka ABI-ändring i en undertyp till en funktion:
== ANVÄNDNINGSEXEMPEL ==
=== 1. Upptäcka en ABI-ändring i en undertyp till en funktion ===


<pre>
<pre>
Rad 358: Rad 413:
</pre>
</pre>


Observera att returkoden 4 betyder att tredje biten (ABIDIFF_ABI_CHANGE, värde 4) är satt. Detta betyder att verktyget kategoriserar ändringen som skadlig (*harmful*) och att användargranskning krävs.
Notera att returkoden är 4, vilket betyder att biten '''ABIDIFF_ABI_CHANGE''' (värde 4) är satt. Det innebär att verktyget kategoriserar ändringen som ''skadlig'' och att en mänsklig granskning krävs.<BR>


2. Upptäcka inkompatibel ABI-ändring i typ för en funktion:
=== 2. Upptäcka en inkompatibel ABI-ändring i typen för en funktion ===


<pre>
<pre>
Rad 421: Rad 476:
</pre>
</pre>


Observera att returkoden 12 betyder att både bit 4 (ABIDIFF_ABI_CHANGE) och bit 8 (ABIDIFF_ABI_INCOMPATIBLE_CHANGE) är satta. Detta innebär ett ABI-brott.
Notera att returkoden är 12, vilket betyder att både '''ABIDIFF_ABI_CHANGE''' (4) och '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''' (8) är satta. Det betyder att verktyget kategoriserar ändringen som ''inkompatibel'' – ett ABI-brott.<BR>


3. Upptäcka en annan ändring i en undertyp:
=== 3. Upptäcka ytterligare en ändring i en undertyp till en funktion ===


<pre>
<pre>
Rad 479: Rad 534:
</pre>
</pre>


4. Upptäcka borttagna och tillagda funktioner:
=== 4. Upptäcka att funktioner har tagits bort eller lagts till i ett bibliotek ===


<pre>
<pre>
Rad 530: Rad 585:
</pre>
</pre>


5. Jämföra två uppsättningar binärer som anges på kommandoraden:
=== 5. Jämföra två uppsättningar binärer via kommandoraden ===


<pre>
<pre>
Rad 540: Rad 595:
</pre>
</pre>


Observera att filerna '''file2-v1''' och '''file2-v2''' ska finnas i '''dir1''' respektive '''dir2''' eller i aktuell katalog.
Observera att filerna <code>file2-v1</code> och <code>file2-v2</code> ska finnas i <code>dir1</code> och <code>dir2</code> eller i aktuell katalog.<BR>


6. Jämföra två bibliotek och deras beroenden:
=== 6. Jämföra två bibliotek och deras beroenden ===


<pre>
<pre>
Rad 551: Rad 606:
</pre>
</pre>


Detta jämför uppsättningen binärer som består av '''foo''' och dess beroenden mot uppsättningen binärer som består av '''bar''' och dess beroenden.
Detta jämför uppsättningen binärer bestående av <code>foo</code> och dess beroenden mot uppsättningen bestående av <code>bar</code> och dess beroenden.<BR>


== UPPHOV ==
== FÖRFATTARE ==
Dodji Seketeli
Dodji Seketeli<BR>


== COPYRIGHT ==
== UPPHOVSRÄTT ==
2014–2025, Red Hat, Inc.
2014–2025, Red Hat, Inc.<BR>


== COLOFON ==
== KOLOFON ==
Denna sida är en del av projektet ''libabigail'' (*ABI Generic Analysis and Instrumentation Library*). Information om projektet finns på [https://sourceware.org/libabigail/](https://sourceware.org/libabigail/).
Den här sidan ingår i projektet ''libabigail'' (ABI Generic Analysis and Instrumentation Library). Information om projektet finns på: [https://sourceware.org/libabigail/](https://sourceware.org/libabigail/)<BR><BR>


Felrapporter för denna manualsida hänvisas till [https://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail](https://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail).
För felrapport för manualsidan, se: [http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail](http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail)<BR><BR>


Sidan hämtades från projektets upstream Git-förråd (git://sourceware.org/git/libabigail.git) den 11 augusti 2025. Vid den tidpunkten var datumet för den senaste committen som hittades i förrådet 28 juli 2025.
Den här sidan hämtades från projektets uppströms Git-repo (git://sourceware.org/git/libabigail.git) den 2025-08-11. Vid den tidpunkten var datumet för den senaste commit som hittades i repot 2025-07-28.<BR><BR>


Om du upptäcker renderingsproblem i HTML-versionen, om du anser att det finns en bättre eller mer uppdaterad källa, eller om du har korrigeringar/förbättringar för denna COLOFON (som inte är del av originalmanualen), skicka e-post till [man-pages@man7.org](mailto:man-pages@man7.org).
Om du upptäcker renderingsproblem i HTML-versionen, eller tror att det finns en bättre/nyare källa för sidan, eller har korrigeringar/förbättringar till informationen i detta KOLOFON-avsnitt (som inte är del av originalmanualen), skicka e-post till [man-pages@man7.org](mailto:man-pages@man7.org)<BR>

Versionen från 10 januari 2026 kl. 06.27

ABIDIFF(1)

NAMN

abidiff – jämför ABI:er för ELF-filer.

abidiff jämför applikationsbinärgränssnitt (ABI, Application Binary Interface) för två delade bibliotek i ELF-format (Executable and Linkable Format). Verktyget skriver ut en meningsfull rapport som beskriver skillnaderna mellan de två ABI:erna.

Det här verktyget kan också jämföra de textuella representationerna av ABI:t för två ELF-binärer (såsom de skrivs ut av abidw), eller jämföra en ELF-binär mot en textuell representation av en annan ELF-binär.

För en omfattande ABI-ändringsrapport mellan två indata-delade bibliotek (som även inkluderar ändringar i funktions- och variabelundertypers strukturer) använder abidiff som standard felsökningsinformation i DWARF-format om den finns. Om DWARF saknas jämför den i stället med felsökningsinformation i CTF- eller BTF-format, om sådan finns. Om ingen felsökningsinformation i dessa format hittas, beaktas enbart ELF-symboler och verktyget rapporterar då om symboler har lagts till eller tagits bort.

Det här verktyget använder biblioteket libabigail för att analysera binären och dess associerade felsökningsinformation. Så här fungerar det i stora drag:

När du instruerar verktyget läses en binär och dess associerade felsökningsinformation in och analyseras. Libabigail analyserar som standard typbeskrivningar som kan nås från gränssnitt (funktioner och variabler) som är synliga utanför sin översättningsenhet. När analysen är klar konstrueras en ABI-korpus (ABI Corpus) genom att endast beakta den delmängd av typer som kan nås från gränssnitt kopplade till ELF-symboler som är definierade och exporterade av binären. Det är denna slutliga ABI-korpus som libabigail betraktar som binärens ABI.

Libabigail kan sedan generera textuella representationer av ABI-korpusar, jämföra dem, analysera ändringar och rapportera om dem.

ANROP

abidiff [alternativ] <första-delade-biblioteket> <andra-delade-biblioteket>

MILJÖ

abidiff läser in två förvalda undertryckningsspecifikationsfiler (suppression specifications), slår ihop deras innehåll och använder detta för att filtrera bort ABI-ändringar som kan betraktas som falska positiva resultat.

  • Förvald systemomfattande undertryckningsfil
 Platsen kan anges med miljövariabeln LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE. Om den inte är satt försöker abidiff läsa filen $libdir/libabigail/libabigail-default.abignore. Om filen inte finns laddas ingen förvald systemomfattande undertryckningsfil.

  • Förvald användarundertryckningsfil
 Platsen kan anges med miljövariabeln LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE. Om den inte är satt försöker abidiff läsa filen $HOME/.abignore. Om filen inte finns laddas ingen förvald användarundertryckningsfil.

ALTERNATIV

Flagga Argument
abidiff --headers-dir1 /some/path \
       --headers-dir1 /some/other/path \
       binary-version-1 binary-version-2
--headers-dir2
--hd2
<headers-katalog-2>

RETURVÄRDEN

Returkoden från abidiff är antingen 0 om ABI:t för binärerna som jämförs är lika, eller icke-noll om de skiljer sig eller om verktyget stötte på ett fel.

I det senare fallet är returkoden ett 8-bitars bitfält där varje bit har en specifik betydelse:

  • Bit 1 (värde 1), ABIDIFF_ERROR: ett fel inträffade.
  • Bit 2 (värde 2), ABIDIFF_USAGE_ERROR: fel i hur användaren anropade verktyget (okänd flagga, fel antal argument, osv). Om denna bit är satt måste även ABIDIFF_ERROR vara satt.
  • Bit 3 (värde 4), ABIDIFF_ABI_CHANGE: ABI:t skiljer sig mellan binärerna.
  • Bit 4 (värde 8), ABIDIFF_ABI_INCOMPATIBLE_CHANGE: ABI:t skiljer sig på ett inkompatibelt sätt. Om denna bit är satt måste även ABIDIFF_ABI_CHANGE vara satt. Om ABIDIFF_ABI_CHANGE är satt men ABIDIFF_ABI_INCOMPATIBLE_CHANGE inte är satt betyder det att ABI:erna kan vara kompatibla eller inte; en människa behöver då granska ändringarna.

För närvarande finns bara några få typer av ABI-ändringar som alltid leder till att ABIDIFF_ABI_INCOMPATIBLE_CHANGE sätts:

  • Borttagning av symbolen för en funktion eller variabel som varit definierad och exporterad.
  • Ändring av index för en medlem i en virtuell funktionstabell (för C++-program och -bibliotek).

Med tiden kan fler mönster identifieras som alltid utgör inkompatibla ändringar; då kommer koden att uppdateras för att känna igen dessa fall. Om du hittar sådana mönster, rapportera dem gärna.

Övriga bitar används inte för tillfället.

ANVÄNDNINGSEXEMPEL

1. Upptäcka en ABI-ändring i en undertyp till en funktion

$ cat -n test-v0.cc
         1      // Compile this with:
         2      //   g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
         3
         4      struct S0
         5      {
         6        int m0;
         7      };
         8
         9      void
        10      foo(S0* /*parameter_name*/)
        11      {
        12        // do something with parameter_name.
        13      }
$
$ cat -n test-v1.cc
         1      // Compile this with:
         2      //   g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
         3
         4      struct type_base
         5      {
         6        int inserted;
         7      };
         8
         9      struct S0 : public type_base
        10      {
        11        int m0;
        12      };
        13
        14      void
        15      foo(S0* /*parameter_name*/)
        16      {
        17        // do something with parameter_name.
        18      }
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ abidiff libtest-v0.so libtest-v1.so; echo "exit code: $?"
Functions changes summary: 0 Removed, 1 Changed, 0 Added function
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

1 function with some indirect sub-type change:

  [C]'function void foo(S0*)' has some indirect sub-type changes:
        parameter 0 of type 'S0*' has sub-type changes:
          in pointed to type 'struct S0':
            size changed from 32 to 64 bits
            1 base class insertion:
              struct type_base
            1 data member change:
             'int S0::m0' offset changed from 0 to 32
exit code: 4
$

Notera att returkoden är 4, vilket betyder att biten ABIDIFF_ABI_CHANGE (värde 4) är satt. Det innebär att verktyget kategoriserar ändringen som skadlig och att en mänsklig granskning krävs.

2. Upptäcka en inkompatibel ABI-ändring i typen för en funktion

$ cat -n test-v0.cc
     1  // Compile this with:
     2  //   g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
     3
     4  struct S0
     5  {
     6    int m0;
     7  };
     8
     9  S0
    10  foo()
    11  {
    12    S0 s = {};
    13    return s;
    14  }
$
$ cat -n test-v1.cc
     1  // Compile this with:
     2  //   g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
     3
     4  struct type_base
     5  {
     6    int inserted;
     7  };
     8
     9  struct S0 : public type_base
    10  {
    11    int m0;
    12  };
    13
    14  S0
    15  foo()
    16  {
    17    S0 s = {};
    18    return s;
    19  }
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ abidiff libtest-v0.so libtest-v1.so; echo "exit code: $?"
Functions changes summary: 0 Removed, 1 Changed, 0 Added function
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

1 function with incompatible sub-type changes:

  [C] 'function S0 foo(void)' at test-v0.cc:10:1 has some sub-type changes:
    return type changed:
      type size changed from 32 to 64 (in bits)
      1 base class insertion:
        struct type_base at test-v1.cc:4:1
      1 data member change:
        'int m0' offset changed from 0 to 32 (in bits) (by +32 bits)

exit code: 12
$

Notera att returkoden är 12, vilket betyder att både ABIDIFF_ABI_CHANGE (4) och ABIDIFF_ABI_INCOMPATIBLE_CHANGE (8) är satta. Det betyder att verktyget kategoriserar ändringen som inkompatibel – ett ABI-brott.

3. Upptäcka ytterligare en ändring i en undertyp till en funktion

$ cat -n test-v0.cc
         1      // Compile this with:
         2      //   g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
         3
         4      struct S0
         5      {
         6        int m0;
         7      };
         8
         9      void
        10      foo(S0& /*parameter_name*/)
        11      {
        12        // do something with parameter_name.
        13      }
$
$ cat -n test-v1.cc
         1      // Compile this with:
         2      //   g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
         3
         4      struct S0
         5      {
         6        char inserted_member;
         7        int m0;
         8      };
         9
        10      void
        11      foo(S0& /*parameter_name*/)
        12      {
        13        // do something with parameter_name.
        14      }
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ abidiff libtest-v0.so libtest-v1.so; echo "exit code: $?"
Functions changes summary: 0 Removed, 1 Changed, 0 Added function
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

1 function with some indirect sub-type change:

  [C]'function void foo(S0&)' has some indirect sub-type changes:
        parameter 0 of type 'S0&' has sub-type changes:
          in referenced type 'struct S0':
            size changed from 32 to 64 bits
            1 data member insertion:
              'char S0::inserted_member', at offset 0 (in bits)
            1 data member change:
             'int S0::m0' offset changed from 0 to 32

exit code: 4
$

4. Upptäcka att funktioner har tagits bort eller lagts till i ett bibliotek

$ cat -n test-v0.cc
         1      // Compile this with:
         2      //   g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
         3
         4      struct S0
         5      {
         6        int m0;
         7      };
         8
         9      void
        10      foo(S0& /*parameter_name*/)
        11      {
        12        // do something with parameter_name.
        13      }
$
$ cat -n test-v1.cc
         1      // Compile this with:
         2      //   g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
         3
         4      struct S0
         5      {
         6        char inserted_member;
         7        int m0;
         8      };
         9
        10      void
        11      bar(S0& /*parameter_name*/)
        12      {
        13        // do something with parameter_name.
        14      }
$
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
$
$ abidiff libtest-v0.so libtest-v1.so; echo "exit code: $?"
Functions changes summary: 1 Removed, 0 Changed, 1 Added functions
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable

1 Removed function:
  'function void foo(S0&)'    {_Z3fooR2S0}

1 Added function:
  'function void bar(S0&)'    {_Z3barR2S0}

exit code: 12
$

5. Jämföra två uppsättningar binärer via kommandoraden

$ abidiff --add-binaries1=file2-v1              \
          --add-binaries2=file2-v2,file2-v1     \
          --added-binaries-dir1 dir1            \
          --added-binaries-dir2 dir2            \
          file1-v1 file1-v2

Observera att filerna file2-v1 och file2-v2 ska finnas i dir1 och dir2 eller i aktuell katalog.

6. Jämföra två bibliotek och deras beroenden

$ abidiff --follow-dependencies                      \
          --added-binaries-dir1 /some/where          \
          --added-binaries-dir2 /some/where/else     \
          foo bar

Detta jämför uppsättningen binärer bestående av foo och dess beroenden mot uppsättningen bestående av bar och dess beroenden.

FÖRFATTARE

Dodji Seketeli

UPPHOVSRÄTT

2014–2025, Red Hat, Inc.

KOLOFON

Den här sidan ingår i projektet libabigail (ABI Generic Analysis and Instrumentation Library). Information om projektet finns på: [1](https://sourceware.org/libabigail/)

För felrapport för manualsidan, se: [2](http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail)

Den här sidan hämtades från projektets uppströms Git-repo (git://sourceware.org/git/libabigail.git) den 2025-08-11. Vid den tidpunkten var datumet för den senaste commit som hittades i repot 2025-07-28.

Om du upptäcker renderingsproblem i HTML-versionen, eller tror att det finns en bättre/nyare källa för sidan, eller har korrigeringar/förbättringar till informationen i detta KOLOFON-avsnitt (som inte är del av originalmanualen), skicka e-post till [man-pages@man7.org](mailto:man-pages@man7.org)