abipkgdiff(1)
abipkgdiff(1)
NAMN
abipkgdiff - jämför ABI:er för ELF-filer i programpaket
abipkgdiff jämför de applikationsbinära gränssnitten (ABI) för de ELF-binärer som finns i två uppsättningar programpaket. Paketformat som för närvarande stöds är Deb, RPM, tar-arkiv (komprimerade eller okomprimerade) samt vanliga kataloger som innehåller binärer.
ABI:n för binärerna i den andra paketmängden jämförs mot ABI:n för binärerna i den första paketmängden.
För en fullständig ABI-ändringsrapport som även omfattar ändringar i funktioners och variablers undertyper måste de två inmatade paketmängderna åtföljas av sina paket med felsökningsinformation, som innehåller felsökningsinformation i antingen DWARF-, CTF- eller BTF-format. Observera dock att vissa paket innehåller binärer som bäddar in felsökningsinformationen direkt i en sektion i dessa binärer. I sådana fall behövs uppenbarligen inget separat debug-informationspaket, eftersom verktyget kommer att hitta felsökningsinformationen inne i binärerna.
Som standard använder abipkgdiff felsökningsinformation i DWARF-format, om sådan finns. Annars jämför det binärgränssnitt med hjälp av felsökningsinformation i CTF- eller BTF-format, om sådan finns. Slutligen, om ingen debug-information i dessa format hittas, beaktar det bara ELF-symboler och rapporterar om symboler som lagts till eller tagits bort.
Detta verktyg använder biblioteket libabigail för att analysera binären samt dess tillhörande felsökningsinformation. Här är dess allmänna arbetssätt.
När det instrueras att göra så läses och analyseras en binär och dess tillhörande felsökningsinformation. För detta analyserar libabigail som standard beskrivningarna av de typer som kan nås från gränssnitt (funktioner och variabler) som är synliga utanför sin översättningsenhet. När den analysen är klar konstrueras ett Application Binary Interface Corpus genom att endast beakta den delmängd av typer som kan nås från gränssnitt som är kopplade till ELF-symboler som definieras och exporteras av binären. Det är detta slutliga ABI-korpus som libabigail betraktar som binärens ABI.
Libabigail kan sedan skapa textrepresentationer av ABI-korpusar, jämföra dem, analysera deras ändringar och rapportera om dem.
ANROP
abipkgdiff [flaggor] <paket1> <paket2>
paket1 och paket2 är paketen som innehåller binärerna som ska jämföras.
En alternativ anropsstil är:
abipkgdiff [flaggor] --set1 <pkg1-v1> <pkg2-v1> <pkg3-v1> \
--set2 <pkg1-v2> <pkg2-v2> <pkg3-v2>
där ABI:n för binärer i den andra paketmängden jämförs mot binärer i den första paketmängden.
MILJÖ
abipkgdiff läser in två standardfiler med undertryckningsspecifikationer, slår samman deras innehåll och använder det för att filtrera bort ABI-ändringsrapporter som användare kan betrakta som falska positiva.
- Standard systemomfattande fil för undertryckningsspecifikation
Den lokaliseras med den valfria miljövariabeln LIBABIGAIL_DEFAULT_SYSTEM_SUPPRESSION_FILE. Om den miljövariabeln inte är satt försöker abipkgdiff läsa in filen $libdir/libabigail/libabigail-default.abignore. Om den filen inte finns läses ingen standard systemomfattande undertryckningsspecifikation in.
- Standard användarspecifik fil för undertryckningsspecifikation
Den lokaliseras med den valfria miljövariabeln LIBABIGAIL_DEFAULT_USER_SUPPRESSION_FILE. Om den miljövariabeln inte är satt försöker abipkgdiff läsa in filen $HOME/.abignore. Om den filen inte finns läses ingen standard användarspecifik undertryckningsspecifikation in.
Utöver dessa standardfiler tittar abipkgdiff även inuti paketen som jämförs. Om det hittar en fil som slutar med ändelsen .abignore betraktas den som en undertryckningsspecifikation och kombineras med de standardspecifikationer som redan kan ha lästs in.
Användaren kan också använda flaggan --suppressions för att ange en undertryckningsspecifikation.
FLAGGOR
- --allow-non-exported-interfaces
- När verktyget tittar på debug-information som hör till en binär analyserar
det typer som kan nås från gränssnitt (funktioner och variabler) som är synliga utanför sin översättningsenhet. Därefter byggs ett ABI-korpus genom att endast beakta de typer som kan nås från gränssnitt kopplade till definierade och exporterade ELF-symboler.
Problemet med detta tillvägagångssätt är att analys av alla gränssnitt som är synliga utanför översättningsenheten kan innebära mycket data, särskilt när binärerna är program snarare än delade bibliotek. Ett exempel är Linux-kärnan. Att analysera så stora ABI-korpusar kan vara mycket långsamt.
För en "normalt stor" binär kan man dock unna sig att låta libabigail analysera alla gränssnitt som är synliga utanför översättningsenheten, med denna flagga.
Observera att denna flagga är aktiverad som standard, om vi inte har att göra med Linux-kärnan.
- --btf
- Använd detta för att jämföra paket med BTF-debug-information, om sådan
finns.
- --ctf
- Använd detta för att jämföra paket med CTF-debug-information, om sådan
finns.
- --debug-info-pkg1 | --d1 <sökväg>
- För fall där debug-informationen för paket1 har delats upp i en separat
fil anger detta för abipkgdiff var det separata debug-informationspaketet finns.
Observera att debug-informationen för paket1 kan vara uppdelad i flera olika debug-informationspaket. I så fall kan denna flagga anges flera gånger.
- --debug-info-pkg2 | --d2 <sökväg>
- Som ovan, men för paket2.
- --devel-pkg1 | --devel1 <sökväg>
- Anger var det utvecklingspaket som hör till det första paketet att
jämföra finns. Det utvecklingspaketet på sökväg bör åtminstone innehålla headerfiler där publika typer som biblioteken exponerar definieras. När denna flagga används filtrerar verktyget bort rapporter om ABI-ändringar i typer som inte definieras i dessa headerfiler.
- --devel-pkg2 | --devel2 <sökväg>
- Som ovan, men för det andra paketet.
- --drop-private-types
- Denna flagga ska användas tillsammans med --devel-pkg1 och
--devel-pkg2. Med denna flagga tas typer som inte definieras i headerfilerna helt bort från den interna representation som Libabigail bygger för att representera ABI:n. De behöver då inte filtreras bort i slutrapporten, eftersom de inte ens finns med internt.
Utan denna flagga behålls de privata typerna i den interna representationen och filtreras bort senare från rapporten.
Flaggan kan därmed göra att Libabigail använder mindre minne. Den är främst avsedd för att optimera minnesförbrukningen för binärer med många publikt definierade och exporterade typer.
- --dso-only
- Jämför endast ELF-filer som är delade bibliotek. Jämför till exempel inte
körbara filer.
- --exported-interfaces-only
- Som standard analyseras typer som kan nås från gränssnitt som är synliga
utanför översättningsenheten, och sedan byggs ett ABI-korpus från de typer som kan nås från definierade och exporterade ELF-symboler.
Eftersom analys av alla utifrån synliga gränssnitt kan bli mycket tung, i synnerhet för program som Linux-kärnan, gör denna flagga att libabigail endast analyserar typer som kan nås från gränssnitt associerade med definierade och exporterade ELF-symboler.
Observera att denna flagga är aktiverad som standard när Linux-kärnan analyseras. Annars är den avstängd som standard.
- --fail-no-dbg
- Gör att programmet misslyckas och returnerar en icke-noll avslutningskod om
det inte kunde läsa någon debug-information från debug-informationspaketen som angavs på kommandoraden. Om inga sådana paket angavs är denna flagga inte aktiv.
Observera att den avslutningskod som returneras i detta fall är konstanten ABIDIFF_ERROR. För det numeriska värdet, se dokumentationen om avslutningskoder.
- --full-impact | -f
- När två Linux-kärnpaket jämförs instruerar denna funktion abipkgdiff att
skriva ut den så kallade fullständiga påverkningsrapporten, vilket är den standardrapporttyp som verktyget abidiff producerar.
- --harmless
- Visa endast ofarliga ändringar i differensrapporten. Som standard filtreras
ofarliga ändringar bort för att minska bruset och göra det lättare att hitta verkliga ABI-problem.
- --help | -h
- Visa kort hjälp om kommandot och avsluta.
- --ignore-soname
- Om två binärer med olika SONAME har samma namn i de gamla och nya paketen som
jämförs tvingar denna flagga abipkgdiff att jämföra dem trots den uppenbara SONAME-ändringen. Detta gör det möjligt att analysera de ABI-ändringar som kan ha lett till att utvecklarna ändrade SONAME.
- --impacted-interfaces
- När lövändringar visas instruerar denna flagga abipkgdiff att visa listan
över påverkade gränssnitt. Den ska därför användas tillsammans med --leaf-changes-only, eller när två Linux-kärnpaket jämförs. Annars ignoreras den.
- --keep-tmp-files
- Radera inte temporära katalogfiler som skapas under verktygets körning.
- --leaf-changes-only | -l
- Visa endast lövändringar, och visa alltså ingen påverkananalysrapport.
Denna flagga implicerar --redundant.
Den vanliga utskriften från abipkgdiff och abidiff när två binärer jämförs, den så kallade fullständiga påverkningsrapporten, visar inte bara en ändring i en typ utan även hur ändringen kan nås från en funktion eller variabel.
Med --leaf-changes-only visas bara själva ändringen i typen, alltså lövändringen. Om du dessutom använder --impacted-interfaces visas även listan över gränssnitt som påverkas av lövändringen.
Observera att när två Linux-kärnpaket jämförs är det denna lövändringsrapport som produceras som standard. Den normala fullständiga påverkningsrapporten kan då fås med --full-impact.
- --linux-kernel-abi-whitelist | -w <sökväg-till-vitlista>
- När två Linux-kärn-RPM-paket jämförs pekar denna flagga ut en vitlista med
namn på ELF-symboler för funktioner och variabler som måste jämföras för ABI-ändringar. Den kallas en "Linux kernel ABI white list".
Alla andra funktioner eller variabler vars ELF-symboler inte finns i vitlistan kommer inte att beaktas i ABI-jämförelsen.
Om ingen vitlista anges jämförs ABI:n för alla publikt definierade och exporterade funktioner och globala variabler i Linux-kärnans binärer.
Observera att om ett vitlistepaket anges som parameter kan denna flagga hantera det, som om --wp användes.
- --no-abignore
- Sök inte i paketet efter undertryckningsfiler.
- --no-added-binaries
- Visa inte listan över binärer som har lagts till i det andra paketet.
Observera att förekomsten av sådana tillagda binärer inte betraktas som en ABI-ändring av detta verktyg; därför påverkar de inte verktygets avslutningskod. De har endast informationsvärde. Borttagna binärer betraktas däremot som ABI-ändringar.
- --no-added-syms
- Visa inte listan över funktioner, variabler eller andra symboler som lagts
till.
- --no-assume-odr-for-cplusplus
- Vid analys av en binär från C++-kod med DWARF-debug-information antar
libabigail som standard One Definition Rule för att snabba upp analysen. Då antas flera typer med samma namn i binären vara lika.
Denna flagga stänger av det antagandet och instruerar libabigail att faktiskt jämföra typerna för att avgöra om de är lika.
- --no-default-suppression
- Läs inte in standardfilerna för undertryckningsspecifikation.
- --no-leverage-dwarf-factorization
- När en binär med DWARF-debug-information har bearbetats med verktyget
DWZ antas typinformationen redan vara faktoriserad. Libabigail använder det sammanhanget för vissa hastighetsoptimeringar.
Denna flagga stänger av dessa optimeringar.
- --no-linkage-name
- Visa inte länkagets namn för tillagda, borttagna eller ändrade funktioner
eller variabler i den resulterande rapporten.
- --no-parallel
- Som standard använder abipkgdiff alla tillgängliga processorer för
parallell körning. Denna flagga säger åt det att inte extrahera paket eller köra jämförelser parallellt.
- --non-reachable-types | -t
- Analysera och skriv ändringsrapporter för alla typer i binären, inklusive
dem som inte kan nås från globala funktioner och variabler.
Denna flagga kan ge avsevärd prestandaförsämring eftersom antalet analyserade typer kan vara mycket stort. Men om den kombineras med --devel-pkg1 och --devel-pkg2 begränsas de extra icke-nåbara typerna till sådana som definieras i offentliga headerfiler i de angivna utvecklingspaketen, vilket förhoppningsvis gör prestandakostnaden acceptabel.
Att använda denna flagga tillsammans med undertryckningsspecifikationer (via --suppressions) kan också hjälpa till att hålla mängden analyserade typer under kontroll.
Utan denna flagga analyseras endast typer som kan nås från globala funktioner och variabler, och endast ändringar i sådana typer rapporteras.
- --no-show-locs
- Visa inte information om var i det andra delade biblioteket den aktuella
typen ändrades.
- --no-show-relative-offset-changes
- Utan denna flagga nämner ändringsrapporten inte bara gamla och nya offset när
offset för en datamedlem ändras, utan också hur många bitar datamedlemmen har flyttats. Med denna flagga visas inte det senare.
- --no-unreferenced-symbols
- Visa inte ändringsinformation om funktions- och variabelsymboler som inte
refereras av någon debug-information. Observera att den ändringsinformation som visas för sådana symboler endast gäller tillagda eller borttagna symboler.
- --show-bits
- Visa storlekar och offset i bitar, inte byte. Detta är standard.
- --show-bytes
- Visa storlekar och offset i byte, inte bitar. Som standard visas de i bitar.
- --show-dec
- Visa storlekar och offset i decimal form. Detta är standard.
- --show-hex
- Visa storlekar och offset i hexadecimal form.
- --show-identical-binaries
- Visa namnen på alla binärer som jämförts, inklusive dem vars ABI är lika.
Som standard, när denna flagga inte används, nämns endast binärer med ABI-ändringar i utmatningen.
- --private-dso
- Som standard jämför abipkgdiff inte DSO:er som är privata för RPM-paketet.
En privat DSO är en DSO vars SONAME inte annonseras i RPM:ets "provides"-egenskap.
Denna flagga instruerar abipkgdiff att också jämföra DSO:er som inte annonseras i "provides"-egenskapen.
Observera att denna funktion för närvarande endast finns för RPM. Patchar för andra paketformat välkomnas.
- --redundant
- Visa redundanta ändringar i differensrapporterna. En redundant ändring är en
ändring som redan har visats någon annanstans i rapporten.
- --self-check
- Detta används för att testa det underliggande Libabigail-biblioteket.
När denna flagga används förväntar sig kommandot bara ett inmatat paket, tillsammans med dess tillhörande debug-informationspaket. Kommandot jämför då varje binär i paketet mot dess egen ABIXML-representation. Resultatet ska vara den tomma mängden om Libabigail beter sig korrekt. Annars finns ett problem som bör rättas.
Denna flagga används av personer som utvecklar Libabigail för regressionstester.
- --set1 <paket1-sökväg> <paket2-sökväg> <paket3-sökväg> ...
- Anger den första paketmängden vars binärer ska jämföras mot den andra.
Observera att den andra mängden ska anges med --set2.
- --set2 <paket1-sökväg> <paket2-sökväg> <paket3-sökväg> ...
- Anger den andra paketmängden vars binärer ska jämföras mot den första.
- --suppressions | --suppr <sökväg-till-undertryckningar>
- Använd en fil med undertryckningsspecifikation som finns på den angivna
sökvägen. Observera att denna flagga kan förekomma flera gånger på kommandoraden. I så fall tas alla dessa filer i beaktande.
Observera att om denna flagga inte anges läses standardfilerna för undertryckningsspecifikation in som standard.
- --version | -v
- Visa programmets version och avsluta.
- --wp <sökväg-till-vitlistepaket>
- När två Linux-kärn-RPM-paket jämförs pekar denna flagga på ett RPM-paket som
innehåller flera vitlistor med namn på ELF-symboler för funktioner och variabler som måste jämföras för ABI-ändringar. Dessa vitlistor kallas "Linux kernel ABI white lists".
Utifrån innehållet i vitlistepaketet väljer programmet sedan lämplig vitlista att använda när ABI:n i Linux-kärnans binärer i paketen som angivits på kommandoraden jämförs.
Den valda vitlistan innehåller namnen på ELF-symboler för funktioner och variabler som måste jämföras för ABI-ändringar.
Alla andra funktioner eller variabler vars ELF-symboler inte finns i denna vitlista kommer inte att beaktas i ABI-jämförelsen.
Observera att denna flagga kan anges två gånger, men inte fler, så att ett vitlistepaket kan anges för vart och ett av de två Linux-kärnpaketen på kommandoraden.
Om ingen sådan flagga anges jämförs ABI:n för alla publikt definierade och exporterade funktioner och globala variabler i Linux-kärnans binärer.
- --verbose
- Skriv ut utförliga statusmeddelanden.
- --verbose-diff
- Skriv ut tidsstämplade och utförliga statusmeddelanden om
differensberäkningen. Denna flagga implicerar --verbose.
RETURVÄRDE
Avslutningskoden för kommandot abipkgdiff är antingen 0 om ABI:n för de jämförda binärerna är lika, eller ett värde skilt från noll om de skiljer sig eller om verktyget råkade ut för ett fel.
I det senare fallet är värdet på avslutningskoden detsamma som för verktyget abidiff.
FÖRFATTARE
Dodji Seketeli
COPYRIGHT
2014-2025, Red Hat, Inc.
COLOPHON
Denna sida är en del av projektet libabigail (ABI Generic Analysis and Instrumentation Library). Information om projektet finns på ⟨https://sourceware.org/libabigail/⟩. Om du har en felrapport för denna manualsida, se ⟨http://sourceware.org/bugzilla/enter_bug.cgi?product=libabigail⟩. Denna sida hämtades från projektets Git-arkiv uppströms ⟨git://sourceware.org/git/libabigail.git⟩ den 2026-01-16. (Vid den tidpunkten var datumet för den senaste commit som hittades i arkivet 2025-11-11.) Om du upptäcker renderingsproblem i denna HTML-version av sidan, eller om du anser att det finns en bättre eller mer uppdaterad källa för sidan, eller om du har korrigeringar eller förbättringar av informationen i denna COLOPHON (som inte är en del av originalmanualsidan), skicka e-post till man-pages@man7.org
Sidslut
Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/abipkgdiff.1.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
Tack till PC Service som har sponsrat Linux.se med webbhotell.