Man page - deb-src-symbols(5)

Packages contains this manual

Available languages:

en fr pt nl sv de

Manual

deb-src-symbols

NOM
SYNOPSIS
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>.