2017-07-16 5 views
2

Je dispose d'un fichier de montage simple main.s qui contient:Pourquoi "strip" ne supprime-t-il pas ces symboles de débogage?

mysymbol1=1234

J'assemblez dans un fichier objet en utilisant la commande suivante:

$ arm-none-eabi-as main.s -o main.o

Maintenant, je vérifie la table des symboles

$ arm-none-eabi-objdump -t main.o 

main.o:  file format elf32-littlearm 

SYMBOL TABLE: 
00000000 l d .text 00000000 .text 
00000000 l d .data 00000000 .data 
00000000 l d .bss 00000000 .bss 
000004d2 l  *ABS* 00000000 mysymbol1 
00000000 l d .ARM.attributes 00000000 .ARM.attributes 

Je note que le d indique qu'il ya des symboles de débogage inclus je lance donc:

$ arm-none-eabi-strip --strip-debug main.o

objdump Re-course montre que les symboles de débogage n'ont pas été supprimés, mais ils ont été réorganisés:

$ arm-none-eabi-objdump -t main.o 

main.o:  file format elf32-littlearm 

SYMBOL TABLE: 
000004d2 l  *ABS* 00000000 mysymbol1 
00000000 l d .text 00000000 .text 
00000000 l d .data 00000000 .data 
00000000 l d .bss 00000000 .bss 
00000000 l d .ARM.attributes 00000000 .ARM.attributes 

Pourquoi aren les symboles de débogage sont-ils supprimés?

+0

Ces symboles indiquent les noms des sections. C'est pourquoi 'strip' ne s'en débarrassera pas. Ils ne sont pas des symboles de débogage. – fuz

+0

Merci. Une idée pourquoi le drapeau bit 'd' est réglé alors? – donturner

+0

Je ne connais pas assez les binutils GNU pour répondre à cette question. – fuz

Répondre

2

.text, .data et .bss ne sont pas des symboles de débogage - ce sont des segments de fichier qui sont utilisés par le noyau pour l'exécuter correctement. mysymbol1 provient de la table de symboles statiques et ne fait donc pas partie de debuginfo, donc il n'est pas supprimé sous --strip-debug non plus.

+0

Merci. BTW Je pense que vous voulez dire 'mysymbol1' et oui, ce n'est pas un symbole de débogage donc ne serait pas dépouillé. – donturner

+0

@donturner Ah, corrigé. – yugr