Man page - deb-src-symbols(5)
Packages contains this manual
- deb822(5)
- dpkg-vendor(1)
- deb-symbols(5)
- deb-src-rules(5)
- dpkg-mergechangelogs(1)
- dsc(5)
- deb-src-control(5)
- dpkg-shlibdeps(1)
- dpkg-genbuildinfo(1)
- dpkg-scanpackages(1)
- deb-substvars(5)
- dpkg-parsechangelog(1)
- dpkg-architecture(1)
- deb-triggers(5)
- deb-changelog(5)
- deb-extra-override(5)
- deb-buildinfo(5)
- dpkg-buildpackage(1)
- dpkg-distaddfile(1)
- dpkg-gencontrol(1)
- dpkg-buildtree(1)
- deb-postrm(5)
- deb-version(7)
- deb-prerm(5)
- deb-preinst(5)
- deb-src-files(5)
- dpkg-buildapi(1)
- dpkg-checkbuilddeps(1)
- deb-src-symbols(5)
- deb-old(5)
- dpkg-source(1)
- deb-changes(5)
- deb-origin(5)
- dpkg-buildflags(1)
- deb-override(5)
- deb(5)
- dpkg-scansources(1)
- deb-control(5)
- deb-split(5)
- deb-shlibs(5)
- dpkg-build-api(7)
- deb-postinst(5)
- deb-conffiles(5)
- dpkg-genchanges(1)
- dpkg-gensymbols(1)
- dpkg-name(1)
- deb-md5sums(5)
apt-get install dpkg-dev
Available languages:
en fr pt nl sv deManual
deb-src-symbols
NOMSYNOPSIS
DESCRIPTION
Commentaires
Utilisation du remplacement de #PACKAGE#
Utilisation des étiquettes de symbole
Ătiquettes standard de symbole
Utilisation de motifs de symbole
Utilisation des inclusions
VOIR AUSSI
TRADUCTION
NOM
deb-src-symbols - Fichier de modÚle des bibliothÚques partagées étendues de Debian
SYNOPSIS
debian/ paquet .symbols. arch , debian/symbols. arch , debian/ paquet .symbols , debian/symbols
DESCRIPTION
Les modĂšles de fichiers de symboles sont fournis dans les paquets source de Debian et leur format est un sous-ensemble des fichiers de symboles fournis dans les paquets binaires, voir deb-symbols (5).
Commentaires
Comments are supported in template symbol files. Any line with â#â as the first character is a comment except if it starts with â#includeâ (see section "Using includes"). Lines starting with â#MISSING:â are special comments documenting symbols that have disappeared.
Utilisation du remplacement de #PACKAGE#
Dans de rares cas, le nom de la bibliothĂšque dĂ©pend de lâarchitecture. Afin dâĂ©viter de coder le nom du paquet en dur dans le fichier de symboles, il est possible dâutiliser le marqueur #PACKAGE# . Il sera remplacĂ© par le vrai nom du paquet lors de lâinstallation des fichiers de symboles. Ă la diffĂ©rence du marqueur #MINVER# , #PACKAGE# nâapparaĂźtra jamais dans le fichier de symboles dâun paquet binaire.
Utilisation des étiquettes de symbole
Symbol tagging is useful for marking symbols that are special in some way. Any symbol can have an arbitrary number of tags associated with it. While all tags are parsed and stored, only some of them are understood by dpkg-gensymbols and trigger special handling of the symbols. See subsection "Standard symbol tags" for reference of these tags.
Lâindication de lâĂ©tiquette vient juste avant le nom du symbole (sans espace). Elle commence toujours par une parenthĂšse ouvrante ( , se termine avec une parenthĂšse fermante ) et doit contenir au moins une Ă©tiquette. Les Ă©tiquettes multiples doivent ĂȘtre sĂ©parĂ©es par le caractĂšre | . Chaque Ă©tiquette peut comporter optionnellement une valeur, sĂ©parĂ©e du nom de lâĂ©tiquette par le caractĂšre = . Les noms et valeurs des Ă©tiquettes sont des chaĂźnes quelconques qui ne doivent pas comporter les caractĂšres ) | et = . Les noms de symbole qui suivent une Ă©tiquette peuvent optionnellement ĂȘtre mis entre guillemets avec les caractĂšres â ou " afin dây autoriser la prĂ©sence dâespaces. Cependant, si aucune Ă©tiquette nâest utilisĂ©e, les guillemets sont alors traitĂ©s comme une partie du nom du symbole, qui sâarrĂȘte alors au premier espace.
(étiq1=je
suis marqué|étiquette avec
espace)"symbole comportant des
espaces"@Base 1.0 (optional)
symbole_non_protégé@Base 1.0 1
symbole_non_étiqueté@Base 1.0
Le premier symbole de cet exemple est appelĂ© symbole comportant des espaces et utilise deux Ă©tiquettes : Ă©tiq1 avec la valeur je suis marquĂ© et Ă©tiquette avec espace sans valeur. Le deuxiĂšme symbole, appelĂ© symbole_non_protĂ©gĂ© ne comporte que lâĂ©tiquette optional . Le dernier symbole est un exemple de symbole normal sans Ă©tiquette.
Since symbol tags are an extension of the deb-symbols (5) format, they can only be part of the symbols files used in source packages (those files should then be seen as templates used to build the symbols files that are embedded in binary packages). When dpkg-gensymbols is called without the -t option, it will output symbols files compatible to the deb-symbols (5) format: it fully processes symbols according to the requirements of their standard tags and strips all tags from the output. On the contrary, in template mode ( -t ) all symbols and their tags (both standard and unknown ones) are kept in the output and are written in their original form as they were loaded.
Ătiquettes standard de symbole
optional
A symbol marked as optional can disappear from the library at any time and that will never cause dpkg-gensymbols to fail. However, disappeared optional symbols will continuously appear as MISSING in the diff in each new package revision. This behavior serves as a reminder for the maintainer that such a symbol needs to be removed from the symbol file or readded to the library. When the optional symbol, which was previously declared as MISSING, suddenly reappears in the next revision, it will be upgraded back to the âexistingâ status with its minimum version unchanged.
Cette Ă©tiquette est utile pour les symboles qui sont privĂ©s, car leur disparition ne provoque pas de changement dâinterface applicative (ABI). Par exemple, la plupart des modĂšles dâinstanciation C++ sont dans cette catĂ©gorie. Comme toute autre Ă©tiquette, celle-ci peut comporter une valeur arbitraire qui peut servir Ă indiquer pour quelle raison le symbole est optionnel.
arch=
liste-dâarchitectures
arch-bits=
octets-architecture
arch-endian=
boutisme-dâarchitecture
Ces Ă©tiquettes permettent de restreindre la liste des architectures avec lesquelles le symbole est censĂ© exister. Les Ă©tiquettes arch-bits et arch-endian sont prises en charge depuis dpkg 1.18.0. Lorsque la liste des symboles est mise Ă jour avec ceux dĂ©couverts dans la bibliothĂšque, tous les symboles spĂ©cifiques dâarchitectures qui ne concernent pas lâarchitecture en cours sont ignorĂ©s. Si un symbole propre Ă lâarchitecture en cours nâexiste pas dans la bibliothĂšque, les processus normaux pour des symboles manquants sâappliquent jusquâĂ Ă©ventuellement provoquer lâĂ©chec de dpkg-gensymbols . Dâun autre cĂŽtĂ©, si le symbole propre Ă une architecture est trouvĂ© alors quâil nâest pas censĂ© exister (parce que lâarchitecture courante nâest pas mentionnĂ©e dans lâĂ©tiquette ou ne correspond pas au boutisme et aux octets), il est rendu indĂ©pendant de lâarchitecture (câest-Ă -dire que les Ă©tiquettes dâarchitecture, dâoctets de lâarchitecture et de boutisme dâarchitecture sont abandonnĂ©es et le symbole apparaĂźt dans le fichier de diffĂ©rences) mais non considĂ©rĂ© comme nouveau. (NdT : une aspirine peut ĂȘtre nĂ©cessaire aprĂšs la lecture de ce paragraphe)
Dans le mode de fonctionnement par dĂ©faut (pas en mode « modĂšle »), seuls les symboles spĂ©cifiques de certaines architectures qui correspondent Ă lâarchitecture courante sont Ă©crits dans le fichier de symboles. Au contraire, tous les symboles spĂ©cifiques dâarchitectures (y compris ceux des architectures diffĂ©rentes) seront Ă©crits dans le fichier de symboles, dans le mode « modĂšle ».
The format of architecture-list is the same as the one used in the Build-Depends field of debian/control (except the enclosing square brackets []). For example, the first symbol from the list below will be considered only on arm64, any-amd64 and riscv64 architectures, the second only on linux architectures, while the third one anywhere except on armel.
(arch=arm64
any-amd64 riscv64)arch_specific_symbol@Base 1.0
(arch=linux-any)linux_specific_symbol@Base 1.0
(arch=!armel)symbol_armel_does_not_have@Base 1.0
Les octets-architecture sont soit 32 soit 64 .
(arch-bits=32)32bit_specific_symbol@Base
1.0
(arch-bits=64)64bit_specific_symbol@Base 1.0
Le boutisme-dâarchitecture est soit little soit big .
(arch-endian=little)little_endian_specific_symbol@Base
1.0
(arch-endian=big)big_endian_specific_symbol@Base 1.0
Plusieurs restrictions peuvent ĂȘtre chaĂźnĂ©es.
(arch-bits=32|arch-endian=little)32bit_le_symbol@Base 1.0
allow-internal
dpkg-gensymbols comporte une liste de symboles internes qui ne devraient pas apparaĂźtre dans les fichiers de symboles, car ils sont en gĂ©nĂ©ral uniquement des effets de bord de dĂ©tails de mise en Ćuvre de la chaĂźne dâoutils de construction (depuis dpkg 1.20.1). Si, pour une raison prĂ©cise, vous voulez vraiment inclure un de ces symboles dans le fichier, vous pouvez imposer quâil soit ignorĂ©, avec allow-internal . Cela peut ĂȘtre utile pour certaines bibliothĂšques de bas niveau telles que libgcc .
ignore-blacklist
Un alias obsolÚte pour allow-internal (depuis dpkg 1.20.1, pris en charge depuis dpkg 1.15.3).
|
c++ |
Denotes c++ symbol pattern. See "Using symbol patterns" subsection below. |
symver
Denotes symver (symbol version) symbol pattern. See "Using symbol patterns" subsection below.
regex
Denotes regex symbol pattern. See "Using symbol patterns" subsection below.
Utilisation de motifs de symbole
Au contraire dâune indication normale de symbole, un motif permet de couvrir des symboles multiples de la bibliothĂšque. dpkg-gensymbols essaie de faire correspondre chaque motif Ă chaque symbole qui nâest pas explicitement dĂ©fini dans le fichier de symboles. DĂšs quâun motif est trouvĂ© qui correspond au symbole, lâensemble de ses Ă©tiquettes et propriĂ©tĂ©s sont utilisĂ©es comme spĂ©cification de base du symbole. Si aucun des motifs ne correspond, le symbole sera considĂ©rĂ© comme nouveau.
A pattern is considered lost if it does not match any symbol in the library. By default this will trigger a dpkg-gensymbols failure under -c1 or higher level. However, if the failure is undesired, the pattern may be marked with the optional tag. Then if the pattern does not match anything, it will only appear in the diff as MISSING. Moreover, like any symbol, the pattern may be limited to the specific architectures with the arch tag. Please refer to "Standard symbol tags" subsection above for more information.
Patterns are an extension of the deb-symbols (5) format hence they are only valid in symbol file templates. Pattern specification syntax is not any different from the one of a specific symbol. However, symbol name part of the specification serves as an expression to be matched against name@version of the real symbol. In order to distinguish among different pattern types, a pattern will typically be tagged with a special tag.
Actuellement, dpkg-gensymbols gÚre trois types de base de motifs :
|
c++ |
This pattern is denoted by the c++ tag. It matches only C++ symbols by their demangled symbol name (as emitted by c++ filt (1) utility). This pattern is very handy for matching symbols which mangled names might vary across different architectures while their demangled names remain the same. One group of such symbols is non-virtual thunks which have architecture specific offsets embedded in their mangled names. A common instance of this case is a virtual destructor which under diamond inheritance needs a non-virtual thunk symbol. For example, even if _ZThn8_N3NSB6ClassDD1Ev@Base on 32-bit architectures will probably be _ZThn16_N3NSB6ClassDD1Ev@Base on 64-bit ones, it can be matched with a single c++ pattern: |
libdummy.so.1
libdummy1 #MINVER#
[...]
(c++)"non-virtual thunk to
NSB::ClassD::ËClassD()@Base" 1.0
[...]
Le nom non dĂ©corĂ© ci-dessus peut ĂȘtre obtenu avec la commande suivante :
$ echo '_ZThn8_N3NSB6ClassDD1Ev@Base' | c++filt
Veuillez noter que, bien que le nom dĂ©corĂ© soit unique dans la bibliothĂšque par dĂ©finition, cela nâest pas forcĂ©ment vrai pour le nom non dĂ©corĂ©. Deux symboles rĂ©els diffĂ©rents peuvent avoir le mĂȘme nom non dĂ©corĂ©. Câest par exemple le cas avec les symboles « thunk » non virtuels dans des configurations dâhĂ©ritage complexes ou avec la plupart des constructeurs et destructeurs (puisque g++ crĂ©e usuellement deux symboles rĂ©els pour eux). Cependant, comme ces collisions se produisent au niveau de lâinterface applicative binaire (ABI), elles ne devraient pas dĂ©grader la qualitĂ© du fichier de symboles.
symver
Ce motif est indiquĂ© par lâĂ©tiquette symver . Les bibliothĂšques bien gĂ©rĂ©es utilisent des symboles versionnĂ©s oĂč chaque version correspond Ă la version amont Ă laquelle le symbole a Ă©tĂ© ajoutĂ©. Si câest le cas, il est possible dâutiliser un motif symver pour faire correspondre chaque symbole associĂ© Ă la version spĂ©cifique. Par exemple :
libc.so.6 libc6
#MINVER#
(symver)GLIBC_2.0 2.0
[...]
(symver)GLIBC_2.7 2.7
access@GLIBC_2.0 2.2
Tous les symboles associĂ©s avec les versions GLIBC_2.0 et GLIBC_2.7 conduiront respectivement Ă des versions minimales de 2.0 et 2.7, Ă lâexception du symbole access@GLIBC_2.0. Ce dernier amĂšne Ă une dĂ©pendance minimale sur la version 2.2 de libc6 bien quâil soit dans le scope de « (symvar)GLIBC_2.0 ». Cela est dĂ» au fait que les symboles spĂ©cifiques prennent le pas sur les motifs.
Please note that while old style wildcard patterns (denoted by "*@version" in the symbol name field) are still supported, they have been deprecated by new style syntax "(symver|optional)version". For example, "*@GLIBC_2.0 2.0" should be written as "(symver|optional)GLIBC_2.0 2.0" if the same behavior is needed.
regex
Les motifs dâexpressions rationnelles sont indiquĂ©s par lâĂ©tiquette expression-rationnelle . La correspondance se fait avec une expression rationnelle Perl sur le champ de nom de symbole. La correspondance est faite telle quelle et il ne faut donc pas oublier le caractĂšre Ë , sinon la correspondance est faite sur nâimporte quelle partie du symbole rĂ©el name@version . Par exemple :
libdummy.so.1
libdummy1 #MINVER#
(regex)"Ëmystack_.*@Base$" 1.0
(regex|optional)"private" 1.0
Les symboles tels que « mystack_new@Base », « mystack_push@Base », « mystack_pop@Base », etc., seront en correspondance avec le premier motif alors que « ng_mystack_new@Base » ne le sera pas. Le deuxiĂšme motif correspondra pour tous les symboles qui comportent la chaĂźne « private » dans leur nom et les correspondances hĂ©riteront de lâĂ©tiquette optional depuis le motif.
Les motifs de base indiquĂ©s prĂ©cĂ©demment peuvent ĂȘtre combinĂ©s au besoin. Dans ce cas, ils sont traitĂ©s dans lâordre oĂč les Ă©tiquettes sont indiquĂ©es. Par exemple, les deux motifs :
(c++|regex)"ËNSA::ClassA::Private::privmethod\d\(int\)@Base"
1.0
(regex|c++)N3NSA6ClassA7Private11privmethod\dEi@Base 1.0
seront en correspondance avec les symboles « _ZN3NSA6ClassA7Private11privmethod1Ei@Base" » et « _ZN3NSA6ClassA7Private11privmethod2Ei@Base ». Lors de la correspondance avec le premier motif, le symbole brut est dâabord rĂ©tabli dâorigine en tant que symbole C++, puis comparĂ© Ă lâexpression rationnelle. Dâun autre cĂŽtĂ©, lors de la correspondance avec le deuxiĂšme motif, lâexpression rationnelle est comparĂ©e au nom de symbole brut, puis le symbole est testĂ© en tant que symbole C++ en tentant de le rĂ©tablir dâorigine. LâĂ©chec de nâimporte quel motif basique provoquera lâĂ©chec de lâensemble du motif. Ainsi, par exemple, « __N3NSA6ClassA7Private11privmethod\dEi@Base » ne correspondra Ă aucun des motifs, car ce nâest pas un symbole C++ valable (NdT : jâai lâimpression de traduire du Klingon !).
En gĂ©nĂ©ral, les motifs sont divisĂ©s en deux groupes : les alias ( c++ et symver basique) et les motifs gĂ©nĂ©riques ( expression-rationnelle et toutes les combinaisons de motifs basiques multiples). La correspondance de motifs basĂ©s sur des alias est rapide (O(1)) alors que les motifs gĂ©nĂ©riques sont O(N) (N Ă©tant le nombre de motifs gĂ©nĂ©riques) pour chaque symbole. En consĂ©quence, il est dĂ©conseillĂ© dâabuser des motifs gĂ©nĂ©riques.
Lorsque plusieurs motifs correspondent pour le mĂȘme symbole rĂ©el, les alias (dâabord c++ , puis symver ) sont privilĂ©giĂ©s par rapport aux motifs gĂ©nĂ©riques. Ceux-ci sont essayĂ©s dans lâordre oĂč ils apparaissent dans le modĂšle de fichier de symboles, en sâarrĂȘtant Ă la premiĂšre correspondance. Veuillez noter, cependant, que la modification manuelle de lâordre des entrĂ©es de fichiers nâest pas recommandĂ©e, car dpkg-gensymbols crĂ©e des fichiers de diffĂ©rences dâaprĂšs lâordre alphanumĂ©rique de leur nom.
Utilisation des inclusions
Lorsquâun jeu de symboles exportĂ©s varie selon les architectures, il est souvent peu efficace dâutiliser un seul fichier de symboles. Pour couvrir ces cas, une directive dâinclusion peut devenir utile dans certains cas :
|
âą |
Il est possible de factoriser la partie commune dans un fichier externe donnĂ© et lâinclure dans le fichier paquet .symbols. arch avec une directive « include » utilisĂ©e de la maniĂšre suivante : |
#include
"I<paquets>.symbols.common"
=item *
La directive dâinclusion peut Ă©galement ĂȘtre Ă©tiquetĂ©e comme tout autre symbole :
(étiquette|...|étiquetteN)#include
"fichier_Ă _inclure"
Le résultat sera que tous les symboles inclus depuis
I<fichier_Ă _inclure> seront
considérés comme étiquetés par
défaut avec I<etiq> ... I<etiqN>. Cela
permet de créer un fichier I<paquet>.symbols
commun qui inclut les fichiers de symboles
spécifiques des architectures :
common_symbol1@Base 1.0
(arch-bits=64)#include "package.symbols.64-bit"
(arch-bits=32)#include "package.symbols.32-bit"
common_symbol2@Base 1.0
Les fichiers de symboles sont lus ligne par ligne et les directives dâinclusion sont traitĂ©es dĂšs quâelles sont trouvĂ©es. En consĂ©quence, le contenu du fichier dâinclusion peut remplacer une dĂ©finition qui prĂ©cĂšde lâinclusion et ce qui suit lâinclusion peut remplacer une dĂ©finition quâelle ajoutait. Tout symbole (ou mĂȘme une autre directive dâinclusion) dans le fichier inclus peut dĂ©finir des Ă©tiquettes supplĂ©mentaires ou remplacer les valeurs dâĂ©tiquettes hĂ©ritĂ©es, dans sa dĂ©finition dâĂ©tiquettes. Cependant, pour un symbole donnĂ©, il nâexiste pas de mĂ©thode permettant de remplacer une de ses Ă©tiquettes hĂ©ritĂ©es.
Un fichier inclus peut reprendre la ligne dâen-tĂȘte qui contient le « SONAME » de la bibliothĂšque. Dans ce cas, cela remplace toute ligne dâen-tĂȘte prĂ©cĂ©dente. Il est cependant dĂ©conseillĂ© de dupliquer les lignes dâen-tĂȘte. Une façon de le faire est la mĂ©thode suivante :
#include
"libmachin1.symbols.common"
symboles_specifique_architecture@Base 1.0
VOIR AUSSI
deb-symbols (5), dpkg-shlibdeps (1), dpkg-gensymbols (1).
TRADUCTION
Ariel VARDI <ariel.vardi@freesbee.fr>, 2002. Philippe Batailler, 2006. Nicolas François, 2006. Veuillez signaler toute erreur à <debian-l10n-french@lists.debian.org>.