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:
<h1>abidiff(1) &mdash; Linux manual page</h1>
= ABIDIFF(1) — Libabigail =


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


<table class="sec-table">
'''abidiff''' jämför applikationsbinärgränssnitt (ABI, Application Binary Interface) för två delade bibliotek i ''ELF''-format (Executable and Linkable Format). Programmet skriver en meningsfull rapport som beskriver skillnaderna mellan de två ABI:erna.
<tr>
    <td>
        <p class="section-dir">
<a href="#NAME">NAME</a> | <a href="#INVOCATION">INVOCATION</a> | <a href="#ENVIRONMENT">ENVIRONMENT</a> | <a href="#OPTIONS">OPTIONS</a> | <a href="#RETURN_VALUES">RETURN&nbsp;VALUES</a> | <a href="#USAGE_EXAMPLES">USAGE&nbsp;EXAMPLES</a> | <a href="#AUTHOR">AUTHOR</a> | <a href="#COPYRIGHT">COPYRIGHT</a> | <a href="#COLOPHON">COLOPHON</a>
        </p>
    </td>
</tr>
<tr>
    <td class="search-box">
        <div class="man-search-box">


            <form method="get" action="https://www.google.com/search">
Det här verktyget kan också jämföra textuella representationer av ABI:t för två ELF-binärer (som skrivs ut av '''abidw''') eller en ELF-binär mot en textuell representation av en annan ELF-binär.
                <fieldset class="man-search">
                    <input type="text" name="q" size="10" maxlength="255" value="" />
                    <input type="hidden" name="sitesearch" value="man7.org/linux/man-pages" />
                    <input type="submit" name="sa" value="Search online pages" />
                </fieldset>
            </form>


        </div>
För en omfattande ABI-ändringsrapport mellan två indata-delade bibliotek som inkluderar ändringar om funktions- och variabelundertyp(er), använder '''abidiff''' som standard felsökningsinformation i ''DWARF''-format om den finns; annars jämför den gränssnitt med debug-info i ''CTF''- eller ''BTF''-format, om det finns. Till sist, om ingen debug-info i dessa format hittas, beaktas endast ELF-symboler och rapportering sker om att symboler lagts till eller tagits bort.
    </td>
    <td> </td>
</tr>
</table>


<!--%%%TEXT_START%%%-->
Det här verktyget använder biblioteket libabigail för att analysera binären samt tillhörande debug-information. Här är dess allmänna arbetssätt.
<pre>
<span class="headline"><i>ABIDIFF</i>(1)                      Libabigail                    <i>ABIDIFF</i>(1)</span>
</pre>
<h2><a id="NAME" href="#NAME"></a>NAME  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
      abidiff - compare ABIs of ELF files


      abidiff compares the Application Binary Interfaces (ABI) of two
När verktyget instrueras att göra det läses och analyseras en binär och dess associerade debug-information. För detta analyserar libabigail som standard beskrivningar 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 byggs ett ABI-korpus (ABI Corpus) genom att bara beakta den delmängd av typer som är nåbara från gränssnitt associerade med ELF-symboler som är definierade och exporterade av binären. Det är detta slutliga ABI-korpus som libabigail ser som representerande ABI:t för den analyserade binären.
      shared libraries in �]8;;http://en.wikipedia.org/wiki/Executable_and_Linkable_Format�\<i>ELF</i>�]8;;�\ format. It emits a meaningful report
      describing the differences between the two ABIs.


      This tool can also compare the textual representations of the ABI
Libabigail kan sedan generera textuella representationer av ABI-korpora, jämföra dem, analysera förändringar och rapportera om dem.
      of two ELF binaries (as emitted by <b>abidw</b>) or an ELF binary against
      a textual representation of another ELF binary.


      For a comprehensive ABI change report between two input shared
== ANROP ==
      libraries that includes changes about function and variable
      sub-types, <b>abidiff </b>uses by default, debug information in �]8;;http://www.dwarfstd.org�\<i>DWARF</i>�]8;;�\
      format, if present, otherwise it compares interfaces using debug
      information in �]8;;https://raw.githubusercontent.com/wiki/oracle/binutils-gdb/files/ctf-spec.pdf�\<i>CTF</i>�]8;;�\ or �]8;;https://docs.kernel.org/bpf/btf.html�\<i>BTF</i>�]8;;�\ formats, if present. Finally, if no
      debug info in these formats is found, it only considers �]8;;http://en.wikipedia.org/wiki/Executable_and_Linkable_Format�\<i>ELF</i>�]8;;�\
      symbols and report about their addition or removal.


      This tool uses the libabigail library to analyze the binary as
<pre>
      well as its associated debug information.  Here is its general
abidiff [alternativ] <första-delade-biblioteket> <andra-delade-biblioteket>
      mode of operation.
 
      When instructed to do so, a binary and its associated debug
      information is read and analyzed.  To that effect, libabigail
      analyzes by default the descriptions of the types reachable by the
      interfaces (functions and variables) that are visible outside of
      their translation unit.  Once that analysis is done, an
      Application Binary Interface Corpus is constructed by only
      considering the subset of types reachable from interfaces
      associated to �]8;;http://en.wikipedia.org/wiki/Executable_and_Linkable_Format�\<i>ELF</i>�]8;;�\ symbols that are defined and exported by the
      binary.  It's that final ABI corpus which libabigail considers as
      representing the ABI of the analyzed binary.
 
      Libabigail then has capabilities to generate textual
      representations of ABI Corpora, compare them, analyze their
      changes and report about them.
</pre>
<h2><a id="INVOCATION" href="#INVOCATION"></a>INVOCATION  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
          abidiff [options] &lt;first-shared-library&gt; &lt;second-shared-library&gt;
</pre>
</pre>
<h2><a id="ENVIRONMENT" href="#ENVIRONMENT"></a>ENVIRONMENT  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
      abidiff loads two default <i>suppression specifications files</i>, merges
      their content and use it to filter out ABI change reports that
      might be considered as false positives to users.


      • Default system-wide suppression specification file
== MILJÖ ==
'''abidiff''' laddar två standardfiler för ''suppression specifications'' (undertryckningsspecifikationer), slår ihop deras innehåll och använder dem för att filtrera bort ABI-ändringsrapporter som kan betraktas som falska positiva.


        It's located by the optional environment variable
'''Standard systemomfattande undertryckningsfil'''
        LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE.  If that environment
        variable is not set, then abidiff tries to load the suppression
        file $libdir/libabigail/libabigail-default.abignore.  If that
        file is not present, then no default system-wide suppression
        specification file is loaded.


      • Default user suppression specification file.
Den hittas via den valfria miljövariabeln '''LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE'''. Om den variabeln inte är satt försöker abidiff ladda filen <pre>$libdir/libabigail/libabigail-default.abignore</pre>. Om filen inte finns laddas ingen systemomfattande standardfil.


        It's located by the optional environment
'''Standard undertryckningsfil för användaren'''
        LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE.  If that environment
        variable is not set, then abidiff tries to load the suppression
        file $HOME/.abignore.  If that file is not present, then no
        default user suppression specification is loaded.
</pre>
<h2><a id="OPTIONS" href="#OPTIONS"></a>OPTIONS  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
          • <b>--add-binaries1 </b>&lt;<i>bin1,bin2,bin3,..</i>&gt;


            For each of the comma-separated binaries given in argument to
Den hittas via den valfria miljövariabeln '''LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE'''. Om den variabeln inte är satt försöker abidiff ladda filen <pre>$HOME/.abignore</pre>. Om filen inte finns laddas ingen användarstandardfil.
            this option, if the binary is found in the directory
            specified by the <b>--added-binaries-dir1 </b>option, then <b>abidiff</b>
            loads the ABI corpus of the binary and adds it to a set of
            corpora (called an ABI Corpus Group) that includes the first
            argument of <b>abidiff</b>.


            That ABI corpus group is then compared against the second
== ALTERNATIV ==
            corpus group given in argument to <b>abidiff</b>.
'''--add-binaries1''' ''<bin1,bin2,bin3,..>''
: För varje kommaseparerad binär i argumentet: om binären hittas i katalogen som anges av '''--added-binaries-dir1''', laddar '''abidiff''' ABI-korpuset för binären och lägger till det i en uppsättning korpora (en ”ABI Corpus Group”) som inkluderar första argumentet till '''abidiff'''.
: Denna ABI-korpusgrupp jämförs sedan mot den andra korpusgruppen som ges som andra argument till '''abidiff'''.


          • <b>--add-binaries2 </b>&lt;<i>bin1,bin2,bin3,..</i>&gt;
'''--add-binaries2''' ''<bin1,bin2,bin3,..>''
: För varje kommaseparerad binär i argumentet: om binären hittas i katalogen som anges av '''--added-binaries-dir2''', laddar '''abidiff''' ABI-korpuset för binären och lägger till det i en uppsättning korpora (en ”ABI Corpus Group”) som inkluderar andra argumentet till '''abidiff'''.
: Denna ABI-korpusgrupp jämförs sedan mot den första korpusgruppen som ges som första argument till '''abidiff'''.


            For each of the comma-separated binaries given in argument to
'''--added-binaries-dir1''' | '''--abd1''' ''<katalog-1>''
            this option, if the binary is found in the directory
: Används tillsammans med '''--add-binaries1''', '''--follow-dependencies''' och '''--list-dependencies'''. Binärer som refereras av dessa alternativ laddas som ABI-korpus om de finns i ''katalog-1'', och läggs till i den första ABI-korpusgruppen som används i jämförelsen.
            specified by the <b>--added-binaries-dir2 </b>option, then <b>abidiff</b>
            loads the ABI corpus of the binary and adds it to a set of
            corpora(called an ABI Corpus Group) that includes the second
            argument of <b>abidiff</b>.


            That ABI corpus group is then compared against the first
'''--added-binaries-dir2''' | '''--abd2''' ''<katalog-2>''
            corpus group given in argument to <b>abidiff</b>.
: Används tillsammans med '''--add-binaries2''', '''--follow-dependencies''' och '''--list-dependencies'''. Binärer som refereras av dessa alternativ laddas som ABI-korpus om de finns i ''katalog-2'', och läggs till i den andra ABI-korpusgruppen som används i jämförelsen.


          • <b>--added-binaries-dir1 | --abd1 </b>&lt;added-binaries-directory-1&gt;
'''--added-fns'''
: I rapporten, visa endast globalt definierade funktioner som lades till i ''andra-delade-biblioteket''.


            This option is to be used in conjunction with the
'''--added-vars'''
            <b>--add-binaries1</b>, <b>--follow-dependencies </b>and
: I rapporten, visa endast globala variabler som lades till (definierades) i ''andra-delade-biblioteket''.
            <b>--list-dependencies </b>options.  Binaries referred to by these
            options, if found in the directory
            <i>added-binaries-directory-1</i>, are loaded as ABI corpus and are
            added to the first ABI corpus group that is to be used in the
            comparison.


          • <b>--added-binaries-dir2 | --abd2 </b>&lt;added-binaries-directory-2&gt;
'''--allow-non-exported-interfaces'''
: När verktyget läser debug-info analyseras typer nåbara från gränssnitt synliga utanför sin översättningsenhet. Därefter byggs ABI-korpus normalt bara från typer nåbara från gränssnitt associerade med definierade och exporterade ELF-symboler, och det är de ABI-korpora som jämförs.
: Nackdelen är att analys av ”alla synliga gränssnitt” kan bli enorm, särskilt för applikationer (t.ex. Linux-kärnan), vilket kan bli mycket långsamt.
: Med ”lagom stora” binärer kan man dock ha råd att analysera alla sådana gränssnitt med detta alternativ.
: Obs: detta alternativ är aktiverat som standard, om man inte är i närvaro av Linux-kärnan.


            This option is to be used in conjunction with the
'''--btf'''
            <b>--add-binaries2</b>, <b>--follow-dependencies </b>and
: Vid jämförelse av binärer, extrahera ABI-information från BTF-debug-info, om den finns.
            <b>--list-dependencies </b>options.  Binaries referred to by these
            options, if found in the directory
            <i>added-binaries-directory-2</i>, are loaded as ABI corpus and are
            added to the second ABI corpus group to be used in the
            comparison.


          • <b>--added-fns</b>
'''--changed-fns'''
: I rapporten, visa endast ändringar i undertyper för globala funktioner definierade i ''första-delade-biblioteket''.


            In the resulting report about the differences between
'''--changed-vars'''
            <i>first-shared-library</i> and <i>second-shared-library</i>, only display
: I rapporten, visa endast ändringar i undertyper för globala variabler definierade i ''första-delade-biblioteket''.
            the globally defined functions that were added to
            <i>second-shared-library</i>.


          • <b>--added-vars</b>
'''--ctf'''
: Vid jämförelse av binärer, extrahera ABI-information från CTF-debug-info, om den finns.


            In the resulting report about the differences between
'''--debug-info-dir1''' | '''--d1''' ''<di-sökväg1>''
            <i>first-shared-library</i> and <i>second-shared-library</i>, only display
: För fall där debug-information för ''första-delade-biblioteket'' är uppdelad i en separat fil anger detta var den separata debug-filen finns.
            the global variables that were added (defined) to
: ''di-sökväg1'' måste peka på rotkatalogen där debug-info ligger i en trädstruktur; på Red Hat-baserade system brukar det vara <pre><rot>/usr/lib/debug</pre>.
            <i>second-shared-library</i>.
: Kan anges flera gånger med olika rotkataloger; då letar '''abidiff''' i alla.
: Alternativet är normalt inte nödvändigt om split debug-info installerats via paket­hanteraren, eftersom '''abidiff''' då vet var den finns.


          • <b>--allow-non-exported-interfaces</b>
'''--debug-info-dir2''' | '''--d2''' ''<di-sökväg2>''
: Som '''--debug-info-dir1''', men för ''andra-delade-biblioteket''. Kan också anges flera gånger.


            When looking at the debug information accompanying a binary,
'''--debug-self-comparison'''
            this tool analyzes the descriptions of the types reachable by
: I detta läge skrivs felmeddelanden för typer som misslyckas med typkanonisering när en binär jämförs med sig själv. Vid diskrepanser skickas abort-signal och körningen stoppas. Avsett för felsökning i debugger.
            the interfaces (functions and variables) that are visible
: Kräver att libabigail byggts med configure-alternativet <pre>--enable-debug-self-comparison</pre>.
            outside of their translation unit.  Once that analysis is
            done, an ABI corpus is constructed by only considering the
            subset of types reachable from interfaces associated to �]8;;http://en.wikipedia.org/wiki/Executable_and_Linkable_Format�\<i>ELF</i>�]8;;�\
            symbols that are defined and exported by the binary.  It's
            those final ABI Corpora that are compared by this tool.


            The problem with that approach however is that analyzing all
'''--debug-tc'''
            the interfaces that are visible from outside their
: Skärper granskningen av typkanonisering: varje typjämförelse görs två gånger (strukturellt och kanoniskt). Om resultaten skiljer aborteras processen. Avsett för felsökning.
            translation unit can amount to a lot of data, especially when
: Kräver att libabigail byggts med <pre>--enable-debug-type-canonicalization</pre>.
            those binaries are applications, as opposed to shared
            libraries. One example of such applications is the �]8;;https://kernel.org/�\<i>Linux</i>
            <i>Kernel</i>�]8;;�\.  Analyzing massive ABI Corpora like these can be
            extremely slow.


            In the presence of an "average sized" binary however one can
'''--deleted-fns'''
            afford having libabigail analyze all interfaces that are
: I rapporten, visa endast globalt definierade funktioner som togs bort från ''första-delade-biblioteket''.
            visible outside of their translation unit, using this option.


            Note that this option is turned on by default, unless we are
'''--deleted-vars'''
            in the presence of the �]8;;https://kernel.org/�\<i>Linux Kernel</i>�]8;;�\.
: I rapporten, visa endast globalt definierade variabler som togs bort från ''första-delade-biblioteket''.


          • <b>--btf</b>
'''--drop''' ''<regex>''
: När ELF-indata läses: droppa globalt definierade funktioner och variabler vars namn matchar ''regex''. Då rapporteras inga ändringar som rör dem.


            When comparing binaries, extract ABI information from �]8;;https://docs.kernel.org/bpf/btf.html�\<i>BTF</i>�]8;;�\
'''--drop-fn''' ''<regex>''
            debug information, if present.
: Som '''--drop''', men endast funktioner.


          • <b>--changed-fns</b>
'''--drop-var''' ''<regex>''
: Som '''--drop''', men endast variabler.


            In the resulting report about the differences between
'''--drop-private-types'''
            <i>first-shared-library</i> and <i>second-shared-library</i>, only display
: Används med '''--headers-dir1''', '''--header-file1''', '''--header-file2''' och '''--headers-dir2'''. Med detta alternativ droppas typer som ''inte'' definieras i headers helt från libabigails interna representation. Utan alternativet behålls de internt och filtreras senare ur rapporten.
            the changes in sub-types of the global functions defined in
: Kan minska minnesåtgången och är främst tänkt att optimera minnesförbrukning för binärer med många publika exporterade typer.
            <i>first-shared-library</i>.


          • <b>--changed-vars</b>
'''--dump-diff-tree'''
: Efter diff-rapporten, skriv en textuell representation av diff-nodträdet som används för att representera ändrade funktioner och variabler. Skickas till felutmatningen (stderr) för felsökning. Gäller endast ändringar med undertypförändringar; tillagda/borttagna symboler har inget sådant träd.


            In the resulting report about the differences between
'''--exported-interfaces-only'''
            <i>first-shared-library</i> and <i>second-shared-library</i>, only display
: Som standard analyseras typer nåbara från gränssnitt synliga utanför sin översättningsenhet, men ABI-korpus byggs från typer nåbara från gränssnitt associerade med definierade och exporterade ELF-symboler – och det är dessa ABI-korpora som jämförs.
            the changes in the sub-types of the global variables defined
: Att analysera alla ”extern-synliga gränssnitt” kan vara mycket datatungt för applikationer (t.ex. Linux-kärnan) och långsamt.
            in <i>first-shared-library</i>
: Detta alternativ gör att libabigail endast analyserar typer nåbara från gränssnitt associerade med definierade och exporterade ELF-symboler, för bättre prestanda.
: Obs: detta alternativ är på som standard när Linux-kärnan analyseras; annars av som standard.


          • <b>--ctf</b>
'''--fail-no-debug-info'''
: Om ingen debug-info hittas, gör detta att programmet misslyckas. Utan alternativet försöker programmet annars jämföra icke-debug-relaterade egenskaper (t.ex. rena ELF-egenskaper).


            When comparing binaries, extract ABI information from �]8;;https://raw.githubusercontent.com/wiki/oracle/binutils-gdb/files/ctf-spec.pdf�\<i>CTF</i>�]8;;�\
'''--follow-dependencies''' | '''--fdeps'''
            debug information, if present.
: För varje beroende till första argumentet: om det hittas i katalogen från '''--added-binaries-dir1''', bygg ett ABI-korpus för beroendet och lägg till det i en ABI-korpusgrupp som inkluderar första argumentet.
: Motsvarande görs för andra argumentet med '''--added-binaries-dir2'''.
: Dessa två ABI-korpusgrupper jämförs sedan. Dvs: jämför ”indata + beroenden” för båda sidor.


          • <b>--debug-info-dir1 | --d1 </b>&lt;<i>di-path1</i>&gt;
'''--harmless'''
: I diff-rapporten, visa endast ''harmlösa'' ändringar. Som standard filtreras harmlösa ändringar bort för mindre brus och större chans att se riktiga ABI-problem.


            For cases where the debug information for
'''--headers-dir1''' | '''--hd1''' ''<headers-katalog-1>''
            <i>first-shared-library</i> is split out into a separate file, tells
: Anger var publika headers för första biblioteket/binären finns. Verktyget filtrerar då bort ABI-ändringar på typer som inte är definierade i publika headers.
            <b>abidiff </b>where to find that separate debug information file.
: Kan anges flera gånger för flera kataloger. Exempel:


            Note that <i>di-path</i> must point to the root directory under
<pre>
            which the debug information is arranged in a tree-like
abidiff --headers-dir1 /some/path       \
            manner.  Under Red Hat based systems, that directory is
      --headers-dir1 /some/other/path \
            usually <b>&lt;root&gt;/usr/lib/debug</b>.
      binary-version-1 binary-version-2
</pre>


            This option can be provided several times with different root
'''--headers-dir2''' | '''--hd2''' ''<headers-katalog-2>''
            directories.  In that case, <b>abidiff </b>will potentially look
: Som '''--headers-dir1''', men för andra biblioteket. Kan anges flera gånger.
            into all those root directories to find the split debug info
            for <i>first-shared-library</i>.


            Note also that this option is not mandatory for split debug
'''--header-file1''' | '''--hf1''' ''<header-fil-1>''
            information installed by your system's package manager
: Anger en publik headerfil för första biblioteket som ska beaktas, för filtrering till publika typer.
            because then <b>abidiff </b>knows where to find it.


          • <b>--debug-info-dir2 | --d2 </b>&lt;<i>di-path2</i>&gt;
'''--header-file2''' | '''--hf2''' ''<header-fil-2>''
: Anger en publik headerfil för andra biblioteket som ska beaktas.


            Like <b>--debug-info-dir1</b>, this options tells <b>abidiff </b>where to
'''--help''' | '''-h'''
            find the split debug information for the
: Visa kort hjälp och avsluta.
            <i>second-shared-library</i> file.


            This option can be provided several times with different root
'''--ignore-soname'''
            directories.  In that case, <b>abidiff </b>will potentially look
: Ignorera skillnader i SONAME vid jämförelse.
            into all those root directories to find the split debug info
            for <i>second-shared-library</i>.


          • <b>--debug-self-comparison</b>
'''--impacted-interfaces'''
: När ”leaf changes” visas instruerar detta att listan över påverkade gränssnitt ska visas. Ska användas tillsammans med '''--leaf-changes-only''', annars ignoreras det.


            In this mode, error messages are emitted for types which fail
'''--keep''' ''<regex>''
            type canonicalization, in some circumstances, when comparing
: När ELF-indata läses: behåll globalt definierade funktioner och variabler vars namn matchar ''regex''. Alla andra droppas och syns inte i rapporten.
            a binary against itself.


            When comparing a binary against itself, canonical types of
'''--keep-fn''' ''<regex>''
            the second binary should be equal (as much as possible) to
: Som '''--keep''', men endast funktioner.
            canonical types of the first binary.  When some discrepancies
            are detected in this mode, an abort signal is emitted and
            execution is halted.  This option should be used while
            executing the tool in a debugger, for troubleshooting
            purposes.


            This is an optional debugging and sanity check option.  To
'''--keep-var''' ''<regex>''
            enable it the libabigail package needs to be configured with
: Som '''--keep''', men endast variabler.
            the --enable-debug-self-comparison configure option.


          • <b>--debug-tc</b>
'''--kmi-whitelist''' | '''-w''' ''<sökväg-till-whitelist>''
: Vid analys av Linux-kärna: pekar på en vitlista över ELF-symbolnamn (funktioner/variabler) vars ABI ska beaktas. Kallas ”Kernel Module Interface white list” (KMI), eftersom man för kärnan talar om gränssnittet mellan kärna och moduler.
: Symboler som inte finns i vitlistan beaktas inte.
: Om alternativet inte ges beaktas hela KMI (alla publikt definierade och exporterade funktioner samt globala variabler i Linux-kärnan).


            In this mode, the process of type canonicalization is put
'''--leaf-changes-only''' | '''-l'''
            under heavy scrutiny. Basically, during type
: Visa endast leaf changes (visa inte impact analysis-rapport). Detta innebär '''--redundant'''.
            canonicalization, each type comparison is performed twice:
: Typisk utmatning kan visa hur en leaf change nås från ett gränssnitt; med detta alternativ visas endast leaf change, och (om '''--impacted-interfaces''' används) en lista över påverkade gränssnitt.
            once in a structural mode (comparing every sub-type
            member-wise), and once using canonical comparison.  The two
            comparisons should yield the same result.  Otherwise, an
            abort signal is emitted and the process can be debugged to
            understand why the two kinds of comparison yield different
            results.


            This is an optional debugging and sanity check option.  To
'''--list-dependencies''' | '''--ldeps'''
            enable it the libabigail package needs to be configured with
: Lista alla beroenden till indataargumenten som hittas i katalogerna från '''--added-binaries-dir1''' och '''--added-binaries-dir2'''.
            the --enable-debug-type-canonicalization configure option.


          • <b>--deleted-fns</b>
'''--no-added-syms'''
: I rapporten, visa inte tillagda funktioner eller variabler. Visa inte heller deras ELF-symboler. Alla andra typer av ändringar visas om de inte förbjuds av andra alternativ.


            In the resulting report about the differences between
'''--no-assume-odr-for-cplusplus'''
            <i>first-shared-library</i> and <i>second-shared-library</i>, only display
: Vid analys av C++-binärer med DWARF antar libabigail One Definition Rule för att snabba upp: flera typer med samma namn antas lika. Detta alternativ stänger av antagandet och tvingar verklig jämförelse.
            the globally defined functions that got deleted from
            <i>first-shared-library</i>.


          • <b>--deleted-vars</b>
'''--no-architecture'''
: Ta inte hänsyn till arkitektur vid ABI-jämförelse.


            In the resulting report about the differences between
'''--no-change-categorization''' | '''-x'''
            <i>first-shared-library</i> and <i>second-shared-library</i>, only display
: Stäng av kategorisering i harmlösa/skadliga ändringar. Eftersom kategorisering krävs för filtrering stängs även filtrering av. Syftet är att snabba upp när förändringsgrafen är enorm och man bara vill titta på t.ex. leaf changes utan att bry sig om impact. Används då ofta med '''--leaf-changes-only'''.
            the globally defined variables that were deleted from
            <i>first-shared-library</i>.


          • <b>--drop </b>&lt;<i>regex</i>&gt;
'''--no-corpus-path'''
: Skriv inte ut path-attributet för ABI-korpuset.


            When reading the <i>first-shared-library</i> and
'''--no-default-suppression'''
            <i>second-shared-library</i> ELF input files, drop the globally
: Ladda inte standardfilerna för undertryckningsspecifikationer.
            defined functions and variables which name match the regular
            expression <i>regex</i>.  As a result, no change involving these
            functions or variables will be emitted in the diff report.


          • <b>--drop-fn </b>&lt;<i>regex</i>&gt;
'''--no-harmful'''
: Visa inte ''skadliga'' ändringar. Som standard är det normalt skadliga ändringar som visas.


            When reading the <i>first-shared-library</i> and
'''--no-leverage-dwarf-factorization'''
            <i>second-shared-library</i> ELF input files, drop the globally
: När DWARF-debug-info bearbetats av verktyget DWZ antas typinformationen redan vara faktoriserad och libabigail kan optimera. Detta alternativ stänger av de optimeringarna.
            defined functions which name match the regular expression
            <i>regex</i>. As a result, no change involving these functions will
            be emitted in the diff report.


          • <b>--drop-var </b>&lt;<i>regex</i>&gt;
'''--no-linkage-name'''
: Visa inte länk-namnen (linkage names) för tillagda, borttagna eller ändrade funktioner/variabler.


            When reading the <i>first-shared-library</i> and
'''--no-linux-kernel-mode'''
            <i>second-shared-library</i> ELF input files, drop the globally
: Utan detta alternativ, om abidiff upptäcker Linux-kärn-binärer (vmlinux eller moduler), beaktas bara funktioner/variabler vars ELF-symboler listas i sektionerna __ksymtab och __ksymtab_gpl.
            defined variables matching a the regular expression <i>regex</i>.
: Med detta alternativ behandlas binären som en vanlig ELF och då beaktas ELF-definierade och exporterade symboler.


          • <b>--drop-private-types</b>
'''--no-redundant'''
: Visa ''inte'' redundanta ändringar (ändringar som redan visats någon annanstans i rapporten). Detta är på som standard.


            This option is to be used with the <b>--headers-dir1</b>,
'''--no-show-locs'''
            <b>header-file1</b>, <b>header-file2 </b>and <b>--headers-dir2 </b>options.  With
: Visa inte information om var i ''andra'' biblioteket respektive typ ändrades.
            this option, types that are <i>NOT</i> defined in the headers are
            entirely dropped from the internal representation build by
            Libabigail to represent the ABI.  They thus don't have to be
            filtered out from the final ABI change report because they
            are not even present in Libabigail's representation.


            Without this option however, those private types are kept in
'''--no-show-relative-offset-changes'''
            the internal representation and later filtered out from the
: Utan detta alternativ, när offset för en datamedlem ändras, visas både gammal/ny offset och med hur många bitar den flyttades. Med detta alternativ visas inte den senare delen.
            report.


            This options thus potentially makes Libabigail consume less
'''--no-unreferenced-symbols'''
            memory. It's meant to be mainly used to optimize the memory
: Visa inte ändringsinfo om funktions- och variabelsymboler som inte refereras av någon debug-info. För sådana symboler är den info som annars visas endast tillagda eller borttagna symboler.
            consumption of the tool on binaries with a lot of publicly
            defined and exported types.


          • <b>--dump-diff-tree</b>
'''--non-reachable-types''' | '''-t'''
              After the diff report, emit a textual representation of the
: Analysera och rapportera ändringar för alla typer i binären, inklusive de som inte är nåbara från globala funktioner och variabler.
              diff nodes tree used by the comparison engine to represent
: Kan ge stor prestandasmäll. Om det paras med '''--headers-dir{1,2}''' och/eller '''--header-file{1,2}''' begränsas extra typer till de som definieras i publika headers, vilket kan göra det mer acceptabelt.
              the changed functions and variables. That representation
: Tillsammans med undertryckningsspecifikationer ('''--suppressions''') kan man hålla mängden analyserade typer under kontroll.
              is emitted to the error output for debugging purposes.
: Utan detta alternativ analyseras bara typer nåbara från globala funktioner och variabler.
              Note that this diff tree is relevant only to functions and
              variables that have some sub-type changes. Added or
              removed functions and variables do not have any diff nodes
              tree associated to them.


          • <b>--exported-interfaces-only</b>
'''--redundant'''
: Visa redundanta ändringar (ändringar som redan visats någon annanstans i rapporten).


            By default, when looking at the debug information
'''--show-bits'''
            accompanying a binary, this tool analyzes the descriptions of
: Visa storlekar och offset i bitar, inte bytes. Detta är aktivt som standard.
            the types reachable by the interfaces (functions and
            variables) that are visible outside of their translation
            unit.  Once that analysis is done, an ABI corpus is
            constructed by only considering the subset of types reachable
            from interfaces associated to �]8;;http://en.wikipedia.org/wiki/Executable_and_Linkable_Format�\<i>ELF</i>�]8;;�\ symbols that are defined
            and exported by the binary. It's those final ABI Corpora
            that are compared by this tool.


            The problem with that approach however is that analyzing all
'''--show-bytes'''
            the interfaces that are visible from outside their
: Visa storlekar och offset i bytes, inte bitar.
            translation unit can amount to a lot of data, especially when
            those binaries are applications, as opposed to shared
            libraries.  One example of such applications is the �]8;;https://kernel.org/�\<i>Linux</i>
            <i>Kernel</i>�]8;;�\.  Analyzing massive ABI corpora like these can be
            extremely slow.


            To mitigate that performance issue, this option allows
'''--show-dec'''
            libabigail to only analyze types that are reachable from
: Visa storlekar och offset i decimal bas. Detta är aktivt som standard.
            interfaces associated with defined and exported �]8;;http://en.wikipedia.org/wiki/Executable_and_Linkable_Format�\<i>ELF</i>�]8;;�\ symbols.


            Note that this option is turned on by default when analyzing
'''--show-hex'''
            the �]8;;https://kernel.org/�\<i>Linux Kernel</i>�]8;;�\.  Otherwise, it's turned off by default.
: Visa storlekar och offset i hexadecimal bas.


          • <b>--fail-no-debug-info</b>
'''--stat'''
: Visa endast sammanfattande statistik över skillnader, i stället för detaljerad diff.


            If no debug info was found, then this option makes the
'''--stats'''
            program to fail.  Otherwise, without this option, the program
: Skriv statistik om olika interna saker.
            will attempt to compare properties of the binaries that are
            not related to debug info, like pure ELF properties.


          • <b>--follow-dependencies | --fdeps</b>
'''--suppressions''' | '''--suppr''' ''<sökväg-till-suppressions>''
: Använd en undertryckningsspecifikationsfil vid ''sökväg-till-suppressions''. Kan anges flera gånger; då beaktas alla angivna filer.
: Om alternativet inte anges laddas standard-undertryckningsfiler som standard.


            For each dependency of the first argument of <b>abidiff</b>, if it's
'''--symtabs'''
            found in the directory specified by the <b>--added-binaries-dir1</b>
: Visa endast symboltabellerna för ''första-delade-biblioteket'' och ''andra-delade-biblioteket''.
            option, then construct an ABI corpus out of the dependency,
            add it to a set of corpora (called an ABI Corpus Group) that
            includes the first argument of <b>abidiff</b>.


            Similarly, for each dependency of the second argument of
'''--verbose'''
            <b>abidiff</b>, if it's found in the directory specified by the
: Skriv utförliga loggar om framsteg och interna saker.
            <b>--added-binaries-dir2 </b>option, then construct an ABI corpus
            out of the dependency, add it to an ABI corpus group that
            includes the second argument of <b>abidiff</b>.


            These two ABI corpus groups are then compared against each
'''--version''' | '''-v'''
            other.
: Visa programversion och avsluta.


            Said otherwise, this makes <b>abidiff </b>compare the set of its
== RETURVÄRDEN ==
            first input and its dependencies against the set of its
Returkoden från kommandot '''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.
            second input and its dependencies.


          • <b>--harmless</b>
I det senare fallet är returkoden ett 8-bitars bitfält där varje bit har en särskild betydelse.


            In the diff report, display only the <i>harmless</i> changes.  By
Första biten (värde 1), '''ABIDIFF_ERROR''', betyder att ett fel inträffade.
            default, the harmless changes are filtered out of the diff
            report keep the clutter to a minimum and have a greater
            chance to spot real ABI issues.


          • <b>--headers-dir1 | --hd1 </b>&lt;headers-directory-path-1&gt;
Andra biten (värde 2), '''ABIDIFF_USAGE_ERROR''', betyder att användaren anropade verktyget felaktigt (t.ex. okänd flagga, fel antal argument, osv). Om denna bit är satt måste även '''ABIDIFF_ERROR''' vara satt.


            Specifies where to find the public headers of the first
Tredje biten (värde 4), '''ABIDIFF_ABI_CHANGE''', betyder att ABI:t för de jämförda binärerna skiljer sig.
            shared library (or binary in general) that the tool has to
            consider.  The tool will thus filter out ABI changes on types
            that are not defined in public headers.


            Note that several public header directories can be specified
Fjärde biten (värde 8), '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''', betyder att 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 och '''ABIDIFF_INCOMPATIBLE_CHANGE''' ''inte'' är satt innebär det att ABI:erna kan vara kompatibla eller inte – en människa måste granska ändringarna.
            for the first shared library. In that case the
            <b>--headers-dir1 </b>option should be present several times on the
            command line, like in the following example:


                $ abidiff --headers-dir1 /some/path      \
Obs: just nu finns bara några få typer av ABI-ändringar som leder till att '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''' sätts:
                          --headers-dir1 /some/other/path \
                          binary-version-1 binary-version-2


          • <b>--headers-dir2 | --hd2 </b>&lt;headers-directory-path-2&gt;
* borttagning av symbolen för en funktion eller variabel som är definierad och exporterad
* ändring av index för en medlem i en virtuell funktionstabell (för C++-program och -bibliotek)


            Specifies where to find the public headers of the second
Med tiden, när fler mönster hittas som ''alltid'' innebär inkompatibla ABI-ändringar, kommer koden att anpassas för att känna igen dem och sätta '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''' i dessa fall. Om du hittar sådana mönster, tala om det.
            shared library that the tool has to consider. The tool will
            thus filter out ABI changes on types that are not defined in
            public headers.


            Note that several public header directories can be specified
Övriga bitar används inte för tillfället.
            for the second shared library. In that case the
            <b>--headers-dir2 </b>option should be present several times like in
            the following example:


                $ abidiff --headers-dir2 /some/path      \
== ANVÄNDNINGSEXEMPEL ==
                          --headers-dir2 /some/other/path \
                          binary-version-1 binary-version-2


          • <b>--header-file1 | --hf1 </b>&lt;header-file-path-1&gt;
1. Upptäcka en ABI-ändring i en undertyp till en funktion:


            Specifies where to find one public header of the first shared
<pre>
            library that the tool has to consider. The tool will thus
$ cat -n test-v0.cc
            filter out ABI changes on types that are not defined in
        1      // Compile this with:
            public headers.
        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


          • <b>--header-file2 | --hf2 </b>&lt;header-file-path-2&gt;
1 function with some indirect sub-type change:


            Specifies where to find one public header of the second
  [C]'function void foo(S0*)' has some indirect sub-type changes:
             shared library that the tool has to consider.  The tool will
        parameter 0 of type 'S0*' has sub-type changes:
             thus filter out ABI changes on types that are not defined in
          in pointed to type 'struct S0':
             public headers.
             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
$
</pre>


          • <b>--help | -h</b>
Notera att returkoden är 4, vilket betyder att tredje biten '''ABIDIFF_ABI_CHANGE''' med värde 4 är satt. Det betyder att verktyget kategoriserar ABI-ändringen som ''skadlig'' och att användaren behöver granska.


            Display a short help about the command and exit.
2. Upptäcka en inkompatibel ABI-ändring i typen för en funktion:


          • <b>--ignore-soname</b>
<pre>
$ 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


            Ignore differences in the SONAME when doing a comparison
1 function with incompatible sub-type changes:


          • <b>--impacted-interfaces</b>
  [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)


            When showing leaf changes, this option instructs abidiff to
exit code: 12
            show the list of impacted interfaces.  This option is thus to
$
            be used in addition the <b>--leaf-changes-only </b>option,
</pre>
            otherwise, it's ignored.


          • <b>--keep </b>&lt;<i>regex</i>&gt;
Notera att returkoden är 12, vilket betyder att både tredje biten '''ABIDIFF_ABI_CHANGE''' (värde 4) och fjärde biten '''ABIDIFF_ABI_INCOMPATIBLE_CHANGE''' (värde 8) är satta. Det betyder att verktyget klassar ändringen som ''inkompatibel'' – ett ABI-brott.


            When reading the <i>first-shared-library</i> and
3. Upptäcka en annan ändring i en undertyp av en funktion:
            <i>second-shared-library</i> ELF input files, keep the globally
            defined functions and variables which names match the regular
            expression <i>regex</i>.  All other functions and variables are
            dropped on the floor and will thus not appear in the
            resulting diff report.


          • <b>--keep-fn </b>&lt;<i>regex</i>&gt;
<pre>
$ 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


            When reading the <i>first-shared-library</i> and
1 function with some indirect sub-type change:
            <i>second-shared-library</i> ELF input files, keep the globally
            defined functions which name match the regular expression
            <i>regex</i>.  All other functions are dropped on the floor and will
            thus not appear in the resulting diff report.


          • <b>--keep-var </b>&lt;<i>regex</i>&gt;
  [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


            When reading the <i>first-shared-library</i> and
exit code: 4
            <i>second-shared-library</i> ELF input files, keep the globally
$
            defined which names match the regular expression <i>regex</i>.  All
</pre>
            other variables are dropped on the floor and will thus not
            appear in the resulting diff report.


          • <b>--kmi-whitelist | -w </b>&lt;<i>path-to-whitelist</i>&gt;
4. Upptäcka att funktioner tagits bort eller lagts till i ett bibliotek:


            When analyzing a Linux kernel binary, this option points to
<pre>
            the white list of names of ELF symbols of functions and
$ cat -n test-v0.cc
            variables which ABI must be considered.  That white list is
        1      // Compile this with:
            called a "Kernel Module Interface white list".  This is
        2      //  g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
            because for the Kernel, we don't talk about <b>ABI</b>; we rather
        3
            talk about the interface between the Kernel and its module.
        4      struct S0
            Hence the term <b>KMI </b>rather than <b>ABI</b>.
        5      {
 
        6        int m0;
            Any other function or variable which ELF symbol are not
        7      };
            present in that white list will not be considered by this
        8
            tool.
        9      void
 
        10      foo(S0& /*parameter_name*/)
            If this option is not provided -- thus if no white list is
        11      {
            provided -- then the entire KMI, that is, the set of all
        12        // do something with parameter_name.
            publicly defined and exported functions and global variables
        13      }
            by the Linux Kernel binaries, is considered.
$
 
$ cat -n test-v1.cc
          • <b>--leaf-changes-only|-l </b>only show leaf changes, so don't show
        1     // Compile this with:
            impact analysis report.  This option implies <b>--redundant</b>.
        2      //   g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
 
        3
            The typical output of abidiff when comparing two binaries
        4      struct S0
            looks like this
        5      {
 
        6        char inserted_member;
                $ abidiff libtest-v0.so libtest-v1.so
        7        int m0;
                Functions changes summary: 0 Removed, 1 Changed, 0 Added function
        8     };
                Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
        9
 
        10      void
                1 function with some indirect sub-type change:
        11      bar(S0& /*parameter_name*/)
 
        12      {
                  [C]'function void fn(C&amp;)' at test-v1.cc:13:1 has some indirect sub-type changes:
        13        // do something with parameter_name.
                    parameter 1 of type 'C&amp;' has sub-type changes:
        14      }
                      in referenced type 'struct C' at test-v1.cc:7:1:
$
                        type size hasn't changed
$ g++ -g -Wall -shared -o libtest-v0.so test-v0.cc
                        1 data member change:
$ g++ -g -Wall -shared -o libtest-v1.so test-v1.cc
                        type of 'leaf* C::m0' changed:
$
                          in pointed to type 'struct leaf' at test-v1.cc:1:1:
$ abidiff libtest-v0.so libtest-v1.so; echo "exit code: $?"
                            type size changed from 32 to 64 bits
Functions changes summary: 1 Removed, 0 Changed, 1 Added functions
                            1 data member insertion:
Variables changes summary: 0 Removed, 0 Changed, 0 Added variable
                              'char leaf::m1', at offset 32 (in bits) at test-v1.cc:4:1
 
                $
 
            So in that example the report emits information about how the
            data member insertion change of "struct leaf" is reachable
            from function "void fn(C&amp;)".  In other words, the report not
            only shows the data member change on "struct leaf", but it
            also shows the impact of that change on the function "void
            fn(C&amp;)".
 
            In abidiff parlance, the change on "struct leaf" is called a
            leaf change.  So the <b>--leaf-changes-only</b>
            <b>--impacted-interfaces </b>options show, well, only the leaf
            change.  And it goes like this:
 
                $ abidiff -l libtest-v0.so libtest-v1.so
                'struct leaf' changed:
                  type size changed from 32 to 64 bits
                  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&amp;)
                $
 
            Note how the report ends by showing the list of interfaces
            impacted by the leaf change.
 
            Now if you don't want to see that list of impacted
            interfaces, then you can just avoid using the
            <b>--impacted-interface </b>option.  You can learn about that option
            below, in any case.
 
          • <b>--list-dependencies | --ldeps</b>
 
            This option lists all the dependencies of the input arguments
            of <b>abidiff </b>that are found in the directories specified by the
            options <b>--added-binaries-dir1 </b>and <b>--added-binaries-dir2</b>
 
          • <b>--no-added-syms</b>
 
            In the resulting report about the differences between
            <i>first-shared-library</i> and <i>second-shared-library</i>, do not
            display added functions or variables.  Do not display added
            functions or variables ELF symbols either.  All other kinds
            of changes are displayed unless they are explicitely
            forbidden by other options on the command line.
 
          • <b>--no-assume-odr-for-cplusplus</b>
 
            When analyzing a binary originating from C++ code using �]8;;http://www.dwarfstd.org�\<i>DWARF</i>�]8;;�\
            debug information, libabigail assumes the �]8;;https://en.wikipedia.org/wiki/One_Definition_Rule�\<i>One Definition Rule</i>�]8;;�\
            to speed-up the analysis.  In that case, when several types
            have the same name in the binary, they are assumed to all be
            equal.
 
            This option disables that assumption and instructs libabigail
            to actually actually compare the types to determine if they
            are equal.
 
          • <b>--no-architecture</b>
 
            Do not take architecture in account when comparing ABIs.
 
          • <b>--no-change-categorization | -x</b>
 
            This option disables the categorization of changes into
            harmless and harmful changes. Note that this categorization
            is a pre-requisite for the filtering of changes so this
            option disables that filtering.  The goal of this option is
            to speed-up the execution of the program for cases where the
            graph of changes is huge and where the user is just
            interested in looking at, for instance, leaf node changes
            without caring about their possible impact on interfaces. In
            that case, this option would be used along with the
            <b>--leaf-changes-only </b>one.
 
          • <b>--no-corpus-path</b>
 
            Do not emit the path attribute for the ABI corpus.
 
          • <b>--no-default-suppression</b>
 
            Do not load the <i>default suppression specification files</i>.
 
          • <b>--no-harmful</b>
 
            In the diff report, do not display the <i>harmful</i> changes.  By
            default, only the harmful changes are displayed in diff
            report.
 
          • <b>--no-leverage-dwarf-factorization</b>
 
            When analyzing a binary which �]8;;http://www.dwarfstd.org�\<i>DWARF</i>�]8;;�\ debug information was
            processed with the �]8;;https://sourceware.org/dwz�\<i>DWZ</i>�]8;;�\ tool, the type information is supposed
            to be already factorized.  That context is used by libabigail
            to perform some speed optimizations.
 
            This option disables those optimizations.
 
          • <b>--no-linkage-name</b>
 
            In the resulting report, do not display the linkage names of
            the added, removed, or changed functions or variables.
 
          • <b>--no-linux-kernel-mode</b>
 
            Without this option, if abidiff detects that the binaries it
            is looking at are Linux Kernel binaries (either vmlinux or
            modules) then it only considers functions and variables which
            ELF symbols are listed in the __ksymtab and __ksymtab_gpl
            sections.
 
            With this option, abidiff considers the binary as a
            non-special ELF binary.  It thus considers functions and
            variables which are defined and exported in the ELF sense.
 
          • <b>--no-redundant</b>
 
            In the diff report, do <i>NOT</i> display redundant changes. A
            redundant change is a change that has been displayed
            elsewhere in the report.  This option is switched on by
            default.
 
          • <b>--no-show-locs</b>
              Do not show information about where in the <i>second shared</i>
              <i>library</i> the respective type was changed.
 
          • <b>--no-show-relative-offset-changes</b>
 
            Without this option, when the offset of a data member
            changes, the change report not only mentions the older and
            newer offset, but it also mentions by how many bits the data
            member changes. With this option, the latter is not shown.
 
          • <b>--no-unreferenced-symbols</b>
 
            In the resulting report, do not display change information
            about function and variable symbols that are not referenced
            by any debug information. Note that for these symbols not
            referenced by any debug information, the change information
            displayed is either added or removed symbols.
 
          • <b>--non-reachable-types|-t</b>
 
            Analyze and emit change reports for all the types of the
            binary, including those that are not reachable from global
            functions and variables.
 
            This option might incur some serious performance degradation
            as the number of types analyzed can be huge. However, if
            paired with the <b>--headers-dir{1,2} </b>and/or <b>header-file{1,2}</b>
            options, the additional non-reachable types analyzed are
            restricted to those defined in public headers files, thus
            hopefully making the performance hit acceptable.
 
            Also, using this option alongside suppression specifications
            (by also using the <b>--suppressions </b>option) might help keep the
            number of analyzed types (and the potential performance
            degradation) in control.
 
            Note that without this option, only types that are reachable
            from global functions and variables are analyzed, so the tool
            detects and reports changes on these reachable types only.
 
          • <b>--redundant</b>
 
            In the diff report, do display redundant changes.  A
            redundant change is a change that has been displayed
            elsewhere in the report.
 
          • <b>--show-bits</b>
 
            Show sizes and offsets in bits, not bytes.  This option is
            activated by default.
 
          • <b>--show-bytes</b>
 
            Show sizes and offsets in bytes, not bits.  By default, sizes
            and offsets are shown in bits.
 
          • <b>--show-dec</b>
 
            Show sizes and offsets in decimal base.  This option is
            activated by default.
 
          • <b>--show-hex</b>
 
            Show sizes and offsets in hexadecimal base.


          • <b>--stat</b>
1 Removed function:
  'function void foo(S0&)'    {_Z3fooR2S0}


            Rather than displaying the detailed ABI differences between
1 Added function:
            <i>first-shared-library</i> and <i>second-shared-library</i>, just display
  'function void bar(S0&)'    {_Z3barR2S0}
            some summary statistics about these differences.


          • <b>--stats</b>
exit code: 12
 
$
            Emit statistics about various internal things.
 
          • <b>--suppressions | --suppr </b>&lt;<i>path-to-suppressions</i>&gt;
 
            Use a <i>suppression specification</i> file located at
            <i>path-to-suppressions</i>.  Note that this option can appear
            multiple times on the command line.  In that case, all of the
            provided suppression specification files are taken into
            account.
 
            Please note that, by default, if this option is not provided,
            then the <i>default suppression specification files</i> are loaded .
 
          • <b>--symtabs</b>
 
            Only display the symbol tables of the <i>first-shared-library</i>
            and <i>second-shared-library</i>.
 
          • <b>--verbose</b>
 
            Emit verbose logs about the progress of miscellaneous
            internal things.
 
          • <b>--version | -v</b>
 
            Display the version of the program and exit.
</pre>
</pre>
<h2><a id="RETURN_VALUES" href="#RETURN_VALUES"></a>RETURN VALUES  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
      The exit code of the <b>abidiff </b>command is either 0 if the ABI of the
      binaries being compared are equal, or non-zero if they differ or
      if the tool encountered an error.


      In the later case, the exit code is a 8-bits-wide bit field in
5. Jämföra två uppsättningar binärer som anges på kommandoraden:
      which each bit has a specific meaning.


      The first bit, of value 1, named <b>ABIDIFF_ERROR </b>means there was an
<pre>
      error.
$ abidiff --add-binaries1=file2-v1              \
 
          --add-binaries2=file2-v2,file2-v1    \
      The second bit, of value 2, named <b>ABIDIFF_USAGE_ERROR </b>means there
          --added-binaries-dir1 dir1            \
      was an error in the way the user invoked the tool.  It might be
          --added-binaries-dir2 dir2            \
      set, for instance, if the user invoked the tool with an unknown
           file1-v1 file1-v2
      command line switch, with a wrong number or argument, etc.  If
      this bit is set, then the <b>ABIDIFF_ERROR </b>bit must be set as well.
 
      The third bit, of value 4, named <b>ABIDIFF_ABI_CHANGE </b>means the ABI
      of the binaries being compared are different.
 
      The fourth bit, of value 8, named <b>ABIDIFF_ABI_INCOMPATIBLE_CHANGE</b>
      means the ABI of the binaries compared are different in an
      incompatible way.  If this bit is set, then the <b>ABIDIFF_ABI_CHANGE</b>
      bit must be set as well.  If the <b>ABIDIFF_ABI_CHANGE </b>is set and the
      <b>ABIDIFF_INCOMPATIBLE_CHANGE </b>is <i>NOT</i> set, then it means that the
      ABIs being compared might or might not be compatible.  In that
      case, a human being needs to review the ABI changes to decide if
      they are compatible or not.
 
      Note that, at the moment, there are only a few kinds of ABI
      changes that would result in setting the flag
      <b>ABIDIFF_ABI_INCOMPATIBLE_CHANGE</b>.  Those ABI changes are either:
 
           • the removal of the symbol of a function or variable that has
            been defined and exported.
 
          • the modification of the index of a member of a virtual
            function table (for C++ programs and libraries).
 
      With time, when more ABI change patterns are found to <i>always</i>
      constitute incompatible ABI changes, we will adapt the code to
      recognize those cases and set the <b>ABIDIFF_ABI_INCOMPATIBLE_CHANGE</b>
      accordingly.  So, if you find such patterns, please let us know.
 
      The remaining bits are not used for the moment.
</pre>
</pre>
<h2><a id="USAGE_EXAMPLES" href="#USAGE_EXAMPLES"></a>USAGE EXAMPLES  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
          1. Detecting an ABI change in a sub-type of a function:


                $ cat -n test-v0.cc
Observera att filerna '''file2-v1''' och '''file2-v2''' ska finnas i '''dir1''' respektive '''dir2''' eller i den aktuella katalogen.
                          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:
6. Jämföra två bibliotek och deras beroenden:


                  [C]'function void foo(S0*)' has some indirect sub-type changes:
<pre>
                        parameter 0 of type 'S0*' has sub-type changes:
$ abidiff --follow-dependencies                      \
                          in pointed to type 'struct S0':
          --added-binaries-dir1 /some/where          \
                            size changed from 32 to 64 bits
          --added-binaries-dir2 /some/where/else    \
                            1 base class insertion:
          foo bar
                              struct type_base
                            1 data member change:
                              'int S0::m0' offset changed from 0 to 32
                exit code: 4
                $
 
      Note how the exit code is 4, meaning the third bit
      ABIDIFF_ABI_CHANGE of value 4 is set to 1.  This means the tool
      categorizes the ABI change as <i>harmful</i> and thus requires a user
      review.
 
          2. Detecting an incompatible ABI change in the type of a
            function:
 
                $ 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
                $
 
      Note how the exit code is 12, meaning both the third bit
      ABIDIFF_ABI_CHANGE of value 4 and the fourth bit
      ABIDIFF_ABI_INCOMPATIBLE_CHANGE of value 8 are set to 1.  This
      means the tool categorizes the ABI change as <i>incompatible</i>.  It's
      an ABI break.
 
          3. Detecting another change in a sub-type of a function:
 
                $ 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&amp; /*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&amp; /*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&amp;)' has some indirect sub-type changes:
                        parameter 0 of type 'S0&amp;' 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. Detecting that functions got removed or added to a library:
 
                $ 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&amp; /*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&amp; /*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&amp;)'    {_Z3fooR2S0}
 
                1 Added function:
                  'function void bar(S0&amp;)'    {_Z3barR2S0}
 
                exit code: 12
                $
 
          5. Comparing two sets of binaries that are passed on the
            command line:
 
                $ abidiff --add-binaries1=file2-v1              \
                          --add-binaries2=file2-v2,file2-v1    \
                          --added-binaries-dir1 dir1            \
                          --added-binaries-dir2 dir2            \
                          file1-v1 file1-v2
 
            Note that the files <b>file2-v1</b>, and <b>file2-v2 </b>are to be found
            in <b>dir1 </b>and <b>dir2 </b>or in the current directory.
 
          6. Compare two libraries and their dependencies:
 
                $ abidiff --follow-dependencies                      \
                          --added-binaries-dir1 /some/where          \
                          --added-binaries-dir2 /some/where/else    \
                          foo bar
 
            This compares the set of binaries comprised by <b>foo </b>and its
            dependencies against the set of binaries comprised by <b>bar</b>
            and its dependencies.
</pre>
<h2><a id="AUTHOR" href="#AUTHOR"></a>AUTHOR  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
      Dodji Seketeli
</pre>
<h2><a id="COPYRIGHT" href="#COPYRIGHT"></a>COPYRIGHT  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
      2014-2025, Red Hat, Inc.
</pre>
<h2><a id="COLOPHON" href="#COLOPHON"></a>COLOPHON  &nbsp; &nbsp; &nbsp; &nbsp; <a href="#top_of_page"><span class="top-link">top</span></a></h2><pre>
      This page is part of the <i>libabigail</i> (ABI Generic Analysis and
      Instrumentation Library) project.  Information about the project
      can be found at ⟨<a href="https://sourceware.org/libabigail/">https://sourceware.org/libabigail/</a>⟩.  If you have
      a bug report for this manual page, see
      ⟨<a href="http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail">http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail</a>⟩.
      This page was obtained from the project's upstream Git repository
      ⟨git://sourceware.org/git/libabigail.git⟩ on 2025-08-11.  (At that
      time, the date of the most recent commit that was found in the
      repository was 2025-07-28.)  If you discover any rendering
      problems in this HTML version of the page, or you believe there is
      a better or more up-to-date source for the page, or you have
      corrections or improvements to the information in this COLOPHON
      (which is <i>not</i> part of the original manual page), send a mail to
      man-pages@man7.org
 
<span class="footline">                              Aug 11, 2025                    <i>ABIDIFF</i>(1)</span>
</pre>
</pre>


<hr class="end-man-text" />
Detta jämför uppsättningen binärer som består av '''foo''' och dess beroenden mot uppsättningen som består av '''bar''' och dess beroenden.


== FÖRFATTARE ==
<hr class="start-footer" />
Dodji Seketeli


<div class="footer">
== UPPHOVSRÄTT ==
2014–2025, Red Hat, Inc.


<table class="colophon-table">
== KOLOFON ==
    <tr>
Den här sidan ä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/⟩). Om du har en felrapport för den här manualsidan, se ⟨[http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail⟩](http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail⟩).
    <td class="pub-info">
        <p>
            HTML rendering created 2025-09-06
            by <a href="https://man7.org/mtk/index.html">Michael Kerrisk</a>,
            author of
            <a href="https://man7.org/tlpi/"><em>The Linux Programming Interface</em></a>.
        </p>
        <p>
            For details of in-depth
            <strong>Linux/UNIX system programming training courses</strong>
            that I teach, look <a href="https://man7.org/training/">here</a>.
        </p>
        <p>
            Hosting by <a href="https://www.jambit.com/index_en.html">jambit GmbH</a>.
        </p>
    </td>
    <td class="colophon-divider">
    </td>
    <td class="tlpi-cover">
        <a href="https://man7.org/tlpi/"><img src="https://man7.org/tlpi/cover/TLPI-front-cover-vsmall.png" alt="Cover of TLPI" /></a>
    </td>
    </tr>
</table>


</div>
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 den här HTML-versionen av sidan, eller du tror att det finns en bättre eller mer uppdaterad källa, eller du har korrigeringar/förbättringar av informationen i denna KOLOFON (som ''inte'' är en del av original-manualsidan), skicka e-post till [man-pages@man7.org](mailto:man-pages@man7.org)

Versionen från 10 januari 2026 kl. 06.49

ABIDIFF(1) — Libabigail

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). Programmet skriver en meningsfull rapport som beskriver skillnaderna mellan de två ABI:erna.

Det här verktyget kan också jämföra textuella representationer av ABI:t för två ELF-binärer (som skrivs ut av abidw) eller 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 inkluderar ändringar om funktions- och variabelundertyp(er), använder abidiff som standard felsökningsinformation i DWARF-format om den finns; annars jämför den gränssnitt med debug-info i CTF- eller BTF-format, om det finns. Till sist, om ingen debug-info i dessa format hittas, beaktas endast ELF-symboler och rapportering sker om att symboler lagts till eller tagits bort.

Det här verktyget använder biblioteket libabigail för att analysera binären samt tillhörande debug-information. Här är dess allmänna arbetssätt.

När verktyget instrueras att göra det läses och analyseras en binär och dess associerade debug-information. För detta analyserar libabigail som standard beskrivningar 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 byggs ett ABI-korpus (ABI Corpus) genom att bara beakta den delmängd av typer som är nåbara från gränssnitt associerade med ELF-symboler som är definierade och exporterade av binären. Det är detta slutliga ABI-korpus som libabigail ser som representerande ABI:t för den analyserade binären.

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

ANROP

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

MILJÖ

abidiff laddar två standardfiler för suppression specifications (undertryckningsspecifikationer), slår ihop deras innehåll och använder dem för att filtrera bort ABI-ändringsrapporter som kan betraktas som falska positiva.

Standard systemomfattande undertryckningsfil

Den hittas via den valfria miljövariabeln LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE. Om den variabeln inte är satt försöker abidiff ladda filen

$libdir/libabigail/libabigail-default.abignore

. Om filen inte finns laddas ingen systemomfattande standardfil.

Standard undertryckningsfil för användaren

Den hittas via den valfria miljövariabeln LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE. Om den variabeln inte är satt försöker abidiff ladda filen

$HOME/.abignore

. Om filen inte finns laddas ingen användarstandardfil.

ALTERNATIV

--add-binaries1 <bin1,bin2,bin3,..>

För varje kommaseparerad binär i argumentet: om binären hittas i katalogen som anges av --added-binaries-dir1, laddar abidiff ABI-korpuset för binären och lägger till det i en uppsättning korpora (en ”ABI Corpus Group”) som inkluderar första argumentet till abidiff.
Denna ABI-korpusgrupp jämförs sedan mot den andra korpusgruppen som ges som andra argument till abidiff.

--add-binaries2 <bin1,bin2,bin3,..>

För varje kommaseparerad binär i argumentet: om binären hittas i katalogen som anges av --added-binaries-dir2, laddar abidiff ABI-korpuset för binären och lägger till det i en uppsättning korpora (en ”ABI Corpus Group”) som inkluderar andra argumentet till abidiff.
Denna ABI-korpusgrupp jämförs sedan mot den första korpusgruppen som ges som första argument till abidiff.

--added-binaries-dir1 | --abd1 <katalog-1>

Används tillsammans med --add-binaries1, --follow-dependencies och --list-dependencies. Binärer som refereras av dessa alternativ laddas som ABI-korpus om de finns i katalog-1, och läggs till i den första ABI-korpusgruppen som används i jämförelsen.

--added-binaries-dir2 | --abd2 <katalog-2>

Används tillsammans med --add-binaries2, --follow-dependencies och --list-dependencies. Binärer som refereras av dessa alternativ laddas som ABI-korpus om de finns i katalog-2, och läggs till i den andra ABI-korpusgruppen som används i jämförelsen.

--added-fns

I rapporten, visa endast globalt definierade funktioner som lades till i andra-delade-biblioteket.

--added-vars

I rapporten, visa endast globala variabler som lades till (definierades) i andra-delade-biblioteket.

--allow-non-exported-interfaces

När verktyget läser debug-info analyseras typer nåbara från gränssnitt synliga utanför sin översättningsenhet. Därefter byggs ABI-korpus normalt bara från typer nåbara från gränssnitt associerade med definierade och exporterade ELF-symboler, och det är de ABI-korpora som jämförs.
Nackdelen är att analys av ”alla synliga gränssnitt” kan bli enorm, särskilt för applikationer (t.ex. Linux-kärnan), vilket kan bli mycket långsamt.
Med ”lagom stora” binärer kan man dock ha råd att analysera alla sådana gränssnitt med detta alternativ.
Obs: detta alternativ är aktiverat som standard, om man inte är i närvaro av Linux-kärnan.

--btf

Vid jämförelse av binärer, extrahera ABI-information från BTF-debug-info, om den finns.

--changed-fns

I rapporten, visa endast ändringar i undertyper för globala funktioner definierade i första-delade-biblioteket.

--changed-vars

I rapporten, visa endast ändringar i undertyper för globala variabler definierade i första-delade-biblioteket.

--ctf

Vid jämförelse av binärer, extrahera ABI-information från CTF-debug-info, om den finns.

--debug-info-dir1 | --d1 <di-sökväg1>

För fall där debug-information för första-delade-biblioteket är uppdelad i en separat fil anger detta var den separata debug-filen finns.
di-sökväg1 måste peka på rotkatalogen där debug-info ligger i en trädstruktur; på Red Hat-baserade system brukar det vara
<rot>/usr/lib/debug
.
Kan anges flera gånger med olika rotkataloger; då letar abidiff i alla.
Alternativet är normalt inte nödvändigt om split debug-info installerats via paket­hanteraren, eftersom abidiff då vet var den finns.

--debug-info-dir2 | --d2 <di-sökväg2>

Som --debug-info-dir1, men för andra-delade-biblioteket. Kan också anges flera gånger.

--debug-self-comparison

I detta läge skrivs felmeddelanden för typer som misslyckas med typkanonisering när en binär jämförs med sig själv. Vid diskrepanser skickas abort-signal och körningen stoppas. Avsett för felsökning i debugger.
Kräver att libabigail byggts med configure-alternativet
--enable-debug-self-comparison
.

--debug-tc

Skärper granskningen av typkanonisering: varje typjämförelse görs två gånger (strukturellt och kanoniskt). Om resultaten skiljer aborteras processen. Avsett för felsökning.
Kräver att libabigail byggts med
--enable-debug-type-canonicalization
.

--deleted-fns

I rapporten, visa endast globalt definierade funktioner som togs bort från första-delade-biblioteket.

--deleted-vars

I rapporten, visa endast globalt definierade variabler som togs bort från första-delade-biblioteket.

--drop <regex>

När ELF-indata läses: droppa globalt definierade funktioner och variabler vars namn matchar regex. Då rapporteras inga ändringar som rör dem.

--drop-fn <regex>

Som --drop, men endast funktioner.

--drop-var <regex>

Som --drop, men endast variabler.

--drop-private-types

Används med --headers-dir1, --header-file1, --header-file2 och --headers-dir2. Med detta alternativ droppas typer som inte definieras i headers helt från libabigails interna representation. Utan alternativet behålls de internt och filtreras senare ur rapporten.
Kan minska minnesåtgången och är främst tänkt att optimera minnesförbrukning för binärer med många publika exporterade typer.

--dump-diff-tree

Efter diff-rapporten, skriv en textuell representation av diff-nodträdet som används för att representera ändrade funktioner och variabler. Skickas till felutmatningen (stderr) för felsökning. Gäller endast ändringar med undertypförändringar; tillagda/borttagna symboler har inget sådant träd.

--exported-interfaces-only

Som standard analyseras typer nåbara från gränssnitt synliga utanför sin översättningsenhet, men ABI-korpus byggs från typer nåbara från gränssnitt associerade med definierade och exporterade ELF-symboler – och det är dessa ABI-korpora som jämförs.
Att analysera alla ”extern-synliga gränssnitt” kan vara mycket datatungt för applikationer (t.ex. Linux-kärnan) och långsamt.
Detta alternativ gör att libabigail endast analyserar typer nåbara från gränssnitt associerade med definierade och exporterade ELF-symboler, för bättre prestanda.
Obs: detta alternativ är på som standard när Linux-kärnan analyseras; annars av som standard.

--fail-no-debug-info

Om ingen debug-info hittas, gör detta att programmet misslyckas. Utan alternativet försöker programmet annars jämföra icke-debug-relaterade egenskaper (t.ex. rena ELF-egenskaper).

--follow-dependencies | --fdeps

För varje beroende till första argumentet: om det hittas i katalogen från --added-binaries-dir1, bygg ett ABI-korpus för beroendet och lägg till det i en ABI-korpusgrupp som inkluderar första argumentet.
Motsvarande görs för andra argumentet med --added-binaries-dir2.
Dessa två ABI-korpusgrupper jämförs sedan. Dvs: jämför ”indata + beroenden” för båda sidor.

--harmless

I diff-rapporten, visa endast harmlösa ändringar. Som standard filtreras harmlösa ändringar bort för mindre brus och större chans att se riktiga ABI-problem.

--headers-dir1 | --hd1 <headers-katalog-1>

Anger var publika headers för första biblioteket/binären finns. Verktyget filtrerar då bort ABI-ändringar på typer som inte är definierade i publika headers.
Kan anges flera gånger för flera kataloger. Exempel:
abidiff --headers-dir1 /some/path       \
       --headers-dir1 /some/other/path \
       binary-version-1 binary-version-2

--headers-dir2 | --hd2 <headers-katalog-2>

Som --headers-dir1, men för andra biblioteket. Kan anges flera gånger.

--header-file1 | --hf1 <header-fil-1>

Anger en publik headerfil för första biblioteket som ska beaktas, för filtrering till publika typer.

--header-file2 | --hf2 <header-fil-2>

Anger en publik headerfil för andra biblioteket som ska beaktas.

--help | -h

Visa kort hjälp och avsluta.

--ignore-soname

Ignorera skillnader i SONAME vid jämförelse.

--impacted-interfaces

När ”leaf changes” visas instruerar detta att listan över påverkade gränssnitt ska visas. Ska användas tillsammans med --leaf-changes-only, annars ignoreras det.

--keep <regex>

När ELF-indata läses: behåll globalt definierade funktioner och variabler vars namn matchar regex. Alla andra droppas och syns inte i rapporten.

--keep-fn <regex>

Som --keep, men endast funktioner.

--keep-var <regex>

Som --keep, men endast variabler.

--kmi-whitelist | -w <sökväg-till-whitelist>

Vid analys av Linux-kärna: pekar på en vitlista över ELF-symbolnamn (funktioner/variabler) vars ABI ska beaktas. Kallas ”Kernel Module Interface white list” (KMI), eftersom man för kärnan talar om gränssnittet mellan kärna och moduler.
Symboler som inte finns i vitlistan beaktas inte.
Om alternativet inte ges beaktas hela KMI (alla publikt definierade och exporterade funktioner samt globala variabler i Linux-kärnan).

--leaf-changes-only | -l

Visa endast leaf changes (visa inte impact analysis-rapport). Detta innebär --redundant.
Typisk utmatning kan visa hur en leaf change nås från ett gränssnitt; med detta alternativ visas endast leaf change, och (om --impacted-interfaces används) en lista över påverkade gränssnitt.

--list-dependencies | --ldeps

Lista alla beroenden till indataargumenten som hittas i katalogerna från --added-binaries-dir1 och --added-binaries-dir2.

--no-added-syms

I rapporten, visa inte tillagda funktioner eller variabler. Visa inte heller deras ELF-symboler. Alla andra typer av ändringar visas om de inte förbjuds av andra alternativ.

--no-assume-odr-for-cplusplus

Vid analys av C++-binärer med DWARF antar libabigail One Definition Rule för att snabba upp: flera typer med samma namn antas lika. Detta alternativ stänger av antagandet och tvingar verklig jämförelse.

--no-architecture

Ta inte hänsyn till arkitektur vid ABI-jämförelse.

--no-change-categorization | -x

Stäng av kategorisering i harmlösa/skadliga ändringar. Eftersom kategorisering krävs för filtrering stängs även filtrering av. Syftet är att snabba upp när förändringsgrafen är enorm och man bara vill titta på t.ex. leaf changes utan att bry sig om impact. Används då ofta med --leaf-changes-only.

--no-corpus-path

Skriv inte ut path-attributet för ABI-korpuset.

--no-default-suppression

Ladda inte standardfilerna för undertryckningsspecifikationer.

--no-harmful

Visa inte skadliga ändringar. Som standard är det normalt skadliga ändringar som visas.

--no-leverage-dwarf-factorization

När DWARF-debug-info bearbetats av verktyget DWZ antas typinformationen redan vara faktoriserad och libabigail kan optimera. Detta alternativ stänger av de optimeringarna.

--no-linkage-name

Visa inte länk-namnen (linkage names) för tillagda, borttagna eller ändrade funktioner/variabler.

--no-linux-kernel-mode

Utan detta alternativ, om abidiff upptäcker Linux-kärn-binärer (vmlinux eller moduler), beaktas bara funktioner/variabler vars ELF-symboler listas i sektionerna __ksymtab och __ksymtab_gpl.
Med detta alternativ behandlas binären som en vanlig ELF och då beaktas ELF-definierade och exporterade symboler.

--no-redundant

Visa inte redundanta ändringar (ändringar som redan visats någon annanstans i rapporten). Detta är på som standard.

--no-show-locs

Visa inte information om var i andra biblioteket respektive typ ändrades.

--no-show-relative-offset-changes

Utan detta alternativ, när offset för en datamedlem ändras, visas både gammal/ny offset och med hur många bitar den flyttades. Med detta alternativ visas inte den senare delen.

--no-unreferenced-symbols

Visa inte ändringsinfo om funktions- och variabelsymboler som inte refereras av någon debug-info. För sådana symboler är den info som annars visas endast tillagda eller borttagna symboler.

--non-reachable-types | -t

Analysera och rapportera ändringar för alla typer i binären, inklusive de som inte är nåbara från globala funktioner och variabler.
Kan ge stor prestandasmäll. Om det paras med --headers-dir{1,2} och/eller --header-file{1,2} begränsas extra typer till de som definieras i publika headers, vilket kan göra det mer acceptabelt.
Tillsammans med undertryckningsspecifikationer (--suppressions) kan man hålla mängden analyserade typer under kontroll.
Utan detta alternativ analyseras bara typer nåbara från globala funktioner och variabler.

--redundant

Visa redundanta ändringar (ändringar som redan visats någon annanstans i rapporten).

--show-bits

Visa storlekar och offset i bitar, inte bytes. Detta är aktivt som standard.

--show-bytes

Visa storlekar och offset i bytes, inte bitar.

--show-dec

Visa storlekar och offset i decimal bas. Detta är aktivt som standard.

--show-hex

Visa storlekar och offset i hexadecimal bas.

--stat

Visa endast sammanfattande statistik över skillnader, i stället för detaljerad diff.

--stats

Skriv statistik om olika interna saker.

--suppressions | --suppr <sökväg-till-suppressions>

Använd en undertryckningsspecifikationsfil vid sökväg-till-suppressions. Kan anges flera gånger; då beaktas alla angivna filer.
Om alternativet inte anges laddas standard-undertryckningsfiler som standard.

--symtabs

Visa endast symboltabellerna för första-delade-biblioteket och andra-delade-biblioteket.

--verbose

Skriv utförliga loggar om framsteg och interna saker.

--version | -v

Visa programversion och avsluta.

RETURVÄRDEN

Returkoden från kommandot 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 särskild betydelse.

Första biten (värde 1), ABIDIFF_ERROR, betyder att ett fel inträffade.

Andra biten (värde 2), ABIDIFF_USAGE_ERROR, betyder att användaren anropade verktyget felaktigt (t.ex. okänd flagga, fel antal argument, osv). Om denna bit är satt måste även ABIDIFF_ERROR vara satt.

Tredje biten (värde 4), ABIDIFF_ABI_CHANGE, betyder att ABI:t för de jämförda binärerna skiljer sig.

Fjärde biten (värde 8), ABIDIFF_ABI_INCOMPATIBLE_CHANGE, betyder att 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 och ABIDIFF_INCOMPATIBLE_CHANGE inte är satt innebär det att ABI:erna kan vara kompatibla eller inte – en människa måste granska ändringarna.

Obs: just nu finns bara några få typer av ABI-ändringar som leder till att ABIDIFF_ABI_INCOMPATIBLE_CHANGE sätts:

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

Med tiden, när fler mönster hittas som alltid innebär inkompatibla ABI-ändringar, kommer koden att anpassas för att känna igen dem och sätta ABIDIFF_ABI_INCOMPATIBLE_CHANGE i dessa fall. Om du hittar sådana mönster, tala om det.

Ö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 tredje biten ABIDIFF_ABI_CHANGE med värde 4 är satt. Det betyder att verktyget kategoriserar ABI-ändringen som skadlig och att användaren behöver granska.

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 tredje biten ABIDIFF_ABI_CHANGE (värde 4) och fjärde biten ABIDIFF_ABI_INCOMPATIBLE_CHANGE (värde 8) är satta. Det betyder att verktyget klassar ändringen som inkompatibel – ett ABI-brott.

3. Upptäcka en annan ändring i en undertyp av 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 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 som anges på 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 respektive dir2 eller i den aktuella katalogen.

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 som består av foo och dess beroenden mot uppsättningen som består av bar och dess beroenden.

FÖRFATTARE

Dodji Seketeli

UPPHOVSRÄTT

2014–2025, Red Hat, Inc.

KOLOFON

Den här sidan är en del av projektet libabigail (ABI Generic Analysis and Instrumentation Library). Information om projektet finns på ⟨[1](https://sourceware.org/libabigail/⟩). Om du har en felrapport för den hä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 den här HTML-versionen av sidan, eller du tror att det finns en bättre eller mer uppdaterad källa, eller du har korrigeringar/förbättringar av informationen i denna KOLOFON (som inte är en del av original-manualsidan), skicka e-post till [man-pages@man7.org](mailto:man-pages@man7.org)