abipkgdiff(1): Skillnad mellan sidversioner

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök
Ingen redigeringssammanfattning
Rad 1: Rad 1:
= abipkgdiff(1) =
== NAMN ==
== NAMN ==



Versionen från 25 april 2026 kl. 11.37

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.