abidiff(1): Skillnad mellan sidversioner
Admin (diskussion | bidrag) (Skapade sidan med 'Nedan är en svensk översättning i **MediaWiki-format** av den text du klistrade in. (Du gav ett utdrag som slutar vid `--version`, så översättningen nedan täcker exakt det som syns i ditt utdrag.) --- == NAMN == '''abidiff''' – jämför ABI:er för ELF-filer '''abidiff''' jämför *Application Binary Interface* (ABI) för två delade bibliotek i ELF-format (*Executable and Linkable Format*). Verktyget skriver ut en meningsfull rapport som beskriver skilln...') |
(Ingen skillnad)
|
Versionen från 10 januari 2026 kl. 06.01
Nedan är en svensk översättning i **MediaWiki-format** av den text du klistrade in. (Du gav ett utdrag som slutar vid `--version`, så översättningen nedan täcker exakt det som syns i ditt utdrag.)
---
NAMN
abidiff – jämför ABI:er för ELF-filer
abidiff jämför *Application Binary Interface* (ABI) för två delade bibliotek i ELF-format (*Executable and Linkable Format*). Verktyget skriver ut en meningsfull rapport som beskriver skillnaderna mellan de två ABI:erna.
Det här verktyget kan också jämföra de textuella representationerna av ABI:t för två ELF-binärer (som genereras av abidw), eller jämföra en ELF-binär mot en textuell representation av en annan ELF-binär.
För en omfattande rapport över ABI-ändringar mellan två inmatade delade bibliotek – inklusive ändringar i funktioners och variablers undertyper – använder abidiff som standard felsökningsinformation i DWARF-format, om sådan finns. I annat fall jämför den gränssnitt med felsökningsinformation i CTF- eller BTF-format, om sådan finns. Om ingen felsökningsinformation i dessa format hittas, beaktas endast ELF-symboler och rapporten handlar då om att symboler har lagts till eller tagits bort.
Det här verktyget använder biblioteket libabigail för att analysera binären samt tillhörande felsökningsinformation. Här är dess generella arbetssätt.
När verktyget instrueras att göra det läses en binär och dess tillhörande felsökningsinformation in och analyseras. För detta analyserar libabigail som standard beskrivningarna av de typer som kan nås via gränssnitten (funktioner och variabler) som är synliga utanför sin översättningsenhet (*translation unit*). När analysen är klar konstrueras en *Application Binary Interface Corpus* genom att endast beakta den delmängd av typer som är nåbara från gränssnitt kopplade till ELF-symboler som är definierade och exporterade av binären. Det är denna slutliga ABI-korpus som libabigail betraktar som representerande ABI:t för den analyserade binären.
Libabigail har sedan möjlighet att generera textuella representationer av ABI-korpusar, jämföra dem, analysera deras ändringar och rapportera om dem.
ANROP
abidiff [alternativ] <första-delade-bibliotek> <andra-delade-bibliotek>
MILJÖ
abidiff läser in två standardfiler med *undertryckningsspecifikationer* (*suppression specifications*), slår samman deras innehåll och använder resultatet för att filtrera bort ABI-ändringsrapporter som användare kan uppfatta som falska positiva.
- Standardfil för systemomfattande undertryckningsspecifikation
Den hittas via den valfria miljövariabeln LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE. Om den miljövariabeln inte är satt försöker abidiff läsa undertryckningsfilen $libdir/libabigail/libabigail-default.abignore. Om den filen inte finns laddas ingen standardfil för systemomfattande undertryckningsspecifikation.
- Standardfil för användarens undertryckningsspecifikation
Den hittas via den valfria miljövariabeln LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE. Om den miljövariabeln inte är satt försöker abidiff läsa undertryckningsfilen $HOME/.abignore. Om den filen inte finns laddas ingen standardfil för användarens undertryckningsspecifikation.
ALTERNATIV
--add-binaries1 <bin1,bin2,bin3,..> För var och en av de kommaseparerade binärer som anges som argument till detta alternativ: om binären hittas i katalogen som anges med alternativet --added-binaries-dir1, så läser abidiff in ABI-korpusen för binären och lägger den till i en uppsättning korpusar (kallad en *ABI Corpus Group*) som inkluderar det första argumentet till abidiff.
Denna ABI-korpusgrupp jämförs sedan mot den andra korpusgruppen som anges som argument till abidiff.
--add-binaries2 <bin1,bin2,bin3,..> För var och en av de kommaseparerade binärer som anges som argument till detta alternativ: om binären hittas i katalogen som anges med alternativet --added-binaries-dir2, så läser abidiff in ABI-korpusen för binären och lägger den till i en uppsättning korpusar (kallad en *ABI Corpus Group*) som inkluderar det andra argumentet till abidiff.
Denna ABI-korpusgrupp jämförs sedan mot den första korpusgruppen som anges som argument till abidiff.
--added-binaries-dir1 | --abd1 <katalog-med-tilläggsbinärer-1> Detta alternativ används tillsammans med alternativen --add-binaries1, --follow-dependencies och --list-dependencies. Binärer som refereras av dessa alternativ – om de hittas i katalogen katalog-med-tilläggsbinärer-1 – läses in som ABI-korpus och läggs till i den första ABI-korpusgruppen som ska användas vid jämförelsen.
--added-binaries-dir2 | --abd2 <katalog-med-tilläggsbinärer-2> Detta alternativ används tillsammans med alternativen --add-binaries2, --follow-dependencies och --list-dependencies. Binärer som refereras av dessa alternativ – om de hittas i katalogen katalog-med-tilläggsbinärer-2 – läses in som ABI-korpus och läggs till i den andra ABI-korpusgruppen som ska användas vid jämförelsen.
--added-fns I den resulterande rapporten om skillnader mellan första-delade-bibliotek och andra-delade-bibliotek: visa endast de globalt definierade funktioner som lades till i andra-delade-bibliotek.
--added-vars I den resulterande rapporten om skillnader mellan första-delade-bibliotek och andra-delade-bibliotek: visa endast de globala variabler som lades till (definierades) i andra-delade-bibliotek.
--allow-non-exported-interfaces När verktyget tittar på felsökningsinformationen som följer med en binär analyserar det beskrivningarna av de typer som kan nås via gränssnitten (funktioner och variabler) som är synliga utanför sin översättningsenhet. När analysen är klar konstrueras en ABI-korpus genom att endast beakta den delmängd av typer som är nåbara från gränssnitt kopplade till ELF-symboler som är definierade och exporterade av binären. Det är dessa slutliga ABI-korpusar som jämförs av verktyget.
Problemet med detta angreppssätt är dock att analys av alla gränssnitt som är synliga utanför sin översättningsenhet kan innebära mycket data, särskilt när binärerna är program (applikationer) snarare än delade bibliotek. Ett exempel på sådana applikationer är Linux-kärnan. Att analysera mycket stora ABI-korpusar som dessa kan vara extremt långsamt.
För en ”normalstor” binär har man däremot ofta råd att låta libabigail analysera alla gränssnitt som är synliga utanför sin översättningsenhet, genom att använda detta alternativ.
Observera att detta alternativ är aktiverat som standard, om vi inte befinner oss i fallet Linux-kärnan.
--btf Vid jämförelse av binärer: extrahera ABI-information från BTF-felsökningsinformation, om sådan finns.
--changed-fns I den resulterande rapporten om skillnader mellan första-delade-bibliotek och andra-delade-bibliotek: visa endast ändringar i undertyper för de globala funktioner som är definierade i första-delade-bibliotek.
--changed-vars I den resulterande rapporten om skillnader mellan första-delade-bibliotek och andra-delade-bibliotek: visa endast ändringar i undertyperna för de globala variabler som är definierade i första-delade-bibliotek.
--ctf Vid jämförelse av binärer: extrahera ABI-information från CTF-felsökningsinformation, om sådan finns.
--debug-info-dir1 | --d1 <di-sökväg1> För fall där felsökningsinformationen för första-delade-bibliotek är separerad till en egen fil anger detta var abidiff ska hitta den separata felsökningsinformationsfilen.
Observera att di-sökväg måste peka på rotkatalogen under vilken felsökningsinformationen är organiserad i en trädstruktur. På Red Hat-baserade system är den katalogen vanligtvis <rot>/usr/lib/debug.
Detta alternativ kan anges flera gånger med olika rotkataloger. I så fall kan abidiff leta i alla dessa rotkataloger efter den separata felsökningsinformationen för första-delade-bibliotek.
Observera också att detta alternativ inte är obligatoriskt för separerad felsökningsinformation som installerats av systemets pakethanterare, eftersom abidiff då vet var den finns.
--debug-info-dir2 | --d2 <di-sökväg2> Som --debug-info-dir1, men anger var abidiff ska hitta den separata felsökningsinformationen för andra-delade-bibliotek.
Detta alternativ kan anges flera gånger med olika rotkataloger. I så fall kan abidiff leta i alla dessa rotkataloger efter den separata felsökningsinformationen för andra-delade-bibliotek.
--debug-self-comparison I detta läge skrivs felmeddelanden ut för typer som misslyckas med typkanonisering, i vissa situationer, när man jämför en binär mot sig själv.
När man jämför en binär mot sig själv bör kanoniska typer i den andra binären vara lika (så långt möjligt) de kanoniska typerna i den första binären. När avvikelser upptäcks i detta läge skickas en abort-signal och körningen stoppas. Alternativet är avsett att användas när man kör verktyget i en debugger, för felsökning.
Detta är ett valfritt felsöknings- och rimlighetskontrollalternativ. För att aktivera det måste libabigail-paketet konfigureras med configure-alternativet --enable-debug-self-comparison.
--debug-tc I detta läge granskas processen för typkanonisering mycket noggrant. Under typkanoniseringen görs i praktiken varje typjämförelse två gånger: en gång i strukturellt läge (jämför varje undertyp medlem-för-medlem), och en gång med kanonisk jämförelse. De två jämförelserna ska ge samma resultat. Annars skickas en abort-signal och processen kan felsökas för att förstå varför de två jämförelsesätten ger olika resultat.
Detta är ett valfritt felsöknings- och rimlighetskontrollalternativ. För att aktivera det måste libabigail-paketet konfigureras med configure-alternativet --enable-debug-type-canonicalization.
--deleted-fns I den resulterande rapporten om skillnader mellan första-delade-bibliotek och andra-delade-bibliotek: visa endast de globalt definierade funktioner som raderades från första-delade-bibliotek.
--deleted-vars I den resulterande rapporten om skillnader mellan första-delade-bibliotek och andra-delade-bibliotek: visa endast de globalt definierade variabler som raderades från första-delade-bibliotek.
--drop <regex> Vid inläsning av ELF-inmatningsfilerna första-delade-bibliotek och andra-delade-bibliotek: uteslut globalt definierade funktioner och variabler vars namn matchar det reguljära uttrycket regex. Som följd kommer inga ändringar som rör dessa funktioner/variabler att tas med i diff-rapporten.
--drop-fn <regex> Som --drop, men gäller endast globalt definierade funktioner vars namn matchar regex.
--drop-var <regex> Vid inläsning av ELF-inmatningsfilerna första-delade-bibliotek och andra-delade-bibliotek: uteslut globalt definierade variabler som matchar det reguljära uttrycket regex.
--drop-private-types Detta alternativ används med alternativen --headers-dir1, header-file1, header-file2 och --headers-dir2. Med detta alternativ tas typer som *INTE* är definierade i headerfilerna bort helt från den interna representation som Libabigail bygger upp för att representera ABI:t. De behöver då inte filtreras bort från den slutliga ABI-ändringsrapporten eftersom de inte ens finns i Libabigails representation.
Utan detta alternativ behålls dessa privata typer i den interna representationen och filtreras senare bort från rapporten.
Detta alternativ kan därmed göra att Libabigail använder mindre minne. Det är främst avsett för att optimera minnesförbrukningen på binärer med många offentligt definierade och exporterade typer.
--dump-diff-tree Efter diff-rapporten: skriv ut en textuell representation av trädet av diff-noder som jämförelsemotorn använder för att representera ändrade funktioner och variabler. Den representationen skrivs till felutmatningen för felsökningsändamål.
Observera att detta diff-träd endast är relevant för funktioner och variabler som har undertypsändringar. Tillagda eller borttagna funktioner/variabler har inget associerat diff-nodträd.
--exported-interfaces-only Som standard analyserar verktyget (via felsökningsinformation) typer som är nåbara från gränssnitt som är synliga utanför sin översättningsenhet. Därefter konstrueras en ABI-korpus genom att endast beakta den delmängd av typer som är nåbara från gränssnitt associerade med definierade och exporterade ELF-symboler. Det är dessa slutliga ABI-korpusar som jämförs.
Detta kan vara mycket långsamt för stora applikationsbinärer, som till exempel Linux-kärnan. För att mildra prestandaproblemet tillåter detta alternativ att libabigail endast analyserar typer som är nåbara från gränssnitt associerade med definierade och exporterade ELF-symboler.
Observera att detta alternativ är aktiverat som standard när man analyserar Linux-kärnan. Annars är det avstängt som standard.
--fail-no-debug-info Om ingen felsökningsinformation hittas gör detta alternativ att programmet misslyckas (avslutar med fel). Utan detta alternativ försöker programmet jämföra egenskaper som inte är kopplade till felsökningsinfo, som rena ELF-egenskaper.
--follow-dependencies | --fdeps För varje beroende till det första argumentet till abidiff: om beroendet hittas i katalogen som anges med --added-binaries-dir1, konstrueras en ABI-korpus av beroendet och läggs till i en *ABI Corpus Group* som inkluderar det första argumentet.
På samma sätt för varje beroende till det andra argumentet: om beroendet hittas i katalogen som anges med --added-binaries-dir2, konstrueras en ABI-korpus av beroendet och läggs till i en ABI-korpusgrupp som inkluderar det andra argumentet.
Dessa två ABI-korpusgrupper jämförs sedan mot varandra.
Med andra ord: detta gör att abidiff jämför uppsättningen bestående av den första inmatningen och dess beroenden mot uppsättningen bestående av den andra inmatningen och dess beroenden.
--harmless I diff-rapporten: visa endast de *ofarliga* ändringarna. Som standard filtreras de ofarliga ändringarna bort ur rapporten för att hålla den mindre rörig och göra det lättare att upptäcka verkliga ABI-problem.
--headers-dir1 | --hd1 <sökväg-till-headers-katalog-1> Anger var de publika headerfilerna för det första delade biblioteket (eller binären i allmänhet) finns, som verktyget ska ta hänsyn till. Verktyget filtrerar då bort ABI-ändringar för typer som inte är definierade i publika headerfiler.
Observera att flera publika headerkataloger kan anges för det första delade biblioteket. Då ska alternativet --headers-dir1 finnas med flera gånger på kommandoraden, t.ex.:
$ abidiff --headers-dir1 /some/path \
--headers-dir1 /some/other/path \
binary-version-1 binary-version-2
--headers-dir2 | --hd2 <sökväg-till-headers-katalog-2> Som --headers-dir1, men för det andra delade biblioteket. Flera kataloger kan anges på samma sätt.
--header-file1 | --hf1 <sökväg-till-headerfil-1> Anger var en publik headerfil för det första delade biblioteket finns, som verktyget ska ta hänsyn till. Verktyget filtrerar då bort ABI-ändringar för typer som inte är definierade i publika headerfiler.
--header-file2 | --hf2 <sökväg-till-headerfil-2> Som --header-file1, men för det andra delade biblioteket.
--help | -h Visa en kort hjälp om kommandot och avsluta.
--ignore-soname Ignorera skillnader i SONAME vid jämförelse.
--impacted-interfaces När man visar *leaf changes* instruerar detta alternativ abidiff att visa listan över påverkade gränssnitt. Alternativet ska användas tillsammans med --leaf-changes-only, annars ignoreras det.
--keep <regex> Vid inläsning av ELF-inmatningsfilerna första-delade-bibliotek och andra-delade-bibliotek: behåll globalt definierade funktioner och variabler vars namn matchar regex. Alla andra funktioner och variabler kastas bort och kommer därför inte att synas i diff-rapporten.
--keep-fn <regex> Som --keep, men gäller endast funktioner.
--keep-var <regex> Vid inläsning av ELF-inmatningsfilerna första-delade-bibliotek och andra-delade-bibliotek: behåll globala variabler vars namn matchar regex. Alla andra variabler kastas bort och syns inte i diff-rapporten.
--kmi-whitelist | -w <sökväg-till-vitlista> Vid analys av en Linux-kärnbinär pekar detta alternativ ut vitlistan över namn på ELF-symboler för funktioner och variabler vars gränssnitt ska beaktas. Vitlistan kallas en ”Kernel Module Interface white list”, eftersom man för kärnan normalt talar om gränssnittet mellan kärnan och moduler (KMI) snarare än ABI.
Alla andra funktioner/variabler vars ELF-symboler inte finns i vitlistan tas inte med.
Om alternativet inte anges (ingen vitlista) beaktas hela KMI:t, dvs. alla offentligt definierade och exporterade funktioner och globala variabler i Linux-kärnans binärer.
--leaf-changes-only|-l Visa endast *leaf changes*, dvs. visa inte rapporten om konsekvens-/påverkansanalys. Detta alternativ implicerar --redundant.
(Textexemplen i originalmanualen är kod/utdata; säg till om du vill att jag tar med dem i MediaWiki som
-block i samma stil som dina andra sidor.) --list-dependencies | --ldeps Listar alla beroenden till indataargumenten till abidiff som hittas i katalogerna som anges av --added-binaries-dir1 och --added-binaries-dir2. --no-added-syms I rapporten om skillnader mellan första-delade-bibliotek och andra-delade-bibliotek: visa inte tillagda funktioner eller variabler. Visa inte heller tillagda ELF-symboler för funktioner/variabler. Alla andra sorters ändringar visas, såvida de inte uttryckligen förbjuds av andra alternativ. --no-assume-odr-for-cplusplus När libabigail analyserar en binär som kommer från C++-kod med DWARF-felsökningsinformation antar den *One Definition Rule* (ODR) för att snabba upp analysen. Det betyder att om flera typer har samma namn i binären antas de vara lika. Detta alternativ stänger av det antagandet och instruerar libabigail att faktiskt jämföra typerna för att avgöra om de är lika. --no-architecture Ta inte hänsyn till arkitektur vid jämförelse av ABI:er. --no-change-categorization | -x Stänger av kategorisering av ändringar i ofarliga/skadliga ändringar. Eftersom kategoriseringen krävs för filtrering av ändringar stänger detta alternativ också av filtreringen. Syftet är att snabba upp körningen i fall där ändringsgrafen är enorm och användaren t.ex. bara vill titta på *leaf changes* utan att bry sig om påverkan på gränssnitt. Då används alternativet ofta tillsammans med --leaf-changes-only. --no-corpus-path Skriv inte ut sökvägsattributet för ABI-korpusen. --no-default-suppression Ladda inte standardfilerna för undertryckningsspecifikationer. --no-harmful Visa inte *skadliga* ändringar i diff-rapporten. Som standard visas endast de skadliga ändringarna i diff-rapporten. --no-leverage-dwarf-factorization När en binärs DWARF-felsökningsinformation har bearbetats med verktyget dwz antas typinformationen redan vara faktoriserad, vilket libabigail använder för prestandaoptimeringar. Detta alternativ stänger av dessa optimeringar. --no-linkage-name Visa inte länk-namnen (*linkage names*) för tillagda, borttagna eller ändrade funktioner/variabler i rapporten. --no-linux-kernel-mode Utan detta alternativ, om abidiff upptäcker att binärerna är Linux-kärnans binärer (antingen vmlinux eller moduler), så beaktas endast funktioner/variabler vars ELF-symboler finns listade i sektionerna __ksymtab och __ksymtab_gpl. Med detta alternativ behandlar abidiff binären som en vanlig ELF-binär och beaktar funktioner/variabler som är definierade och exporterade i ELF-mening. --no-redundant Visa *INTE* redundanta ändringar i diff-rapporten. En redundant ändring är en ändring som redan visats någon annanstans i rapporten. Detta alternativ är aktiverat som standard. --no-show-locs Visa inte information om var i det andra delade biblioteket den aktuella typen ändrades. --no-show-relative-offset-changes Utan detta alternativ: när offset för en datamedlem ändras nämner rapporten både gammal och ny offset, samt med hur många bitar datamedlemmen flyttats. Med detta alternativ visas inte det sistnämnda. --no-unreferenced-symbols Visa inte ändringsinformation om funktions- och variabelsymboler som inte refereras av någon felsökningsinformation. För symboler som inte refereras av felsökningsinfo är ändringsinformationen som visas antingen ”tillagd” eller ”borttagen” symbol. --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. Detta kan ge kraftig prestandaförsämring eftersom antalet analyserade typer kan vara mycket stort. Om alternativet kombineras med --headers-dir{1,2} och/eller header-file{1,2} begränsas de extra, icke-nåbara typerna till dem som definieras i publika headerfiler, vilket kan göra prestandasmällen acceptabel. Att använda detta tillsammans med undertryckningsspecifikationer (via --suppressions) kan också hjälpa till att hålla antalet analyserade typer under kontroll. Observera att utan detta alternativ analyseras endast typer som är nåbara från globala funktioner och variabler, och verktyget rapporterar då bara ändringar för dessa nåbara typer. --redundant Visa redundanta ändringar i diff-rapporten. En redundant ändring är en ändring som redan visats någon annanstans i rapporten. --show-bits Visa storlekar och offset i bitar, inte byte. Detta alternativ är aktiverat som standard. --show-bytes Visa storlekar och offset i byte, inte bitar. Som standard visas storlekar och offset i bitar. --show-dec Visa storlekar och offset i decimalform. Detta alternativ är aktiverat som standard. --show-hex Visa storlekar och offset i hexadecimalt. --stat Istället för att visa de detaljerade ABI-skillnaderna mellan första-delade-bibliotek och andra-delade-bibliotek: visa bara sammanfattande statistik om skillnaderna. --stats Skriv ut statistik om olika interna saker. --suppressions | --suppr <sökväg-till-undertryckningar> Använd en fil med undertryckningsspecifikationer som finns på sökväg-till-undertryckningar. Alternativet kan anges flera gånger; då tas alla angivna undertryckningsfiler med i beräkningen. Observera att om detta alternativ inte anges, laddas standardfilerna för undertryckningsspecifikationer. --symtabs Visa endast symboltabellerna för första-delade-bibliotek och andra-delade-bibliotek. --verbose Skriv ut utförliga loggar om förloppet för diverse interna saker. --version | -v Visa programmets version och avsluta. --- Om du klistrar in **resten av OPTIONS + RETURN VALUES + USAGE EXAMPLES + AUTHOR + COPYRIGHT + COLOPHON** (eller bara ger länken), kan jag fortsätta i exakt samma MediaWiki-stil och ta med exempelblocken som `` precis som du brukar göra.