2016-07-25 3 views
0

I einfache x86-Assembler-Routine geschrieben:objdump --dwarf von Assembler-Code nicht auflisten Funktion

$ cat asm.s 

.global foo 

.section .text 
foo: 
    nop 
    ret 

und kompiliert es mit

$ gcc -c -g asm.s -o asm.o 

Aber wenn ich objdump --dwarf asm.o tun, wird es nicht angezeigt werden Info über die Funktion foo. Sieht so aus, gcc erstellt keine .debug_info Details über foo.

BTW, gibt es einen Eintrag von foo in .symtab.

Irgendwelche Ideen?

+0

Die Funktion wird nicht aufgerufen. Vielleicht ist es als toter Code optimiert? –

+0

@ JanHenke danke. asm.s gehört zur Compilation Unit. Ich rufe es von main() in anderen Compilation Unit definiert. Abgesehen davon verwende ich keine GCC-Optimierungsoptionen. Sonst wird es nicht in der Symboltabelle erscheinen. Recht? – Ravi

Antwort

1

Der Fehler ist im Befehl objdump. Verwenden Sie den folgenden Befehl ein, und es wird die Montage Auflistung Ihrer Funktion zeigen:

objdump -d -M intel -S asm.o 

Jetzt Sie die Frage aktualisiert - wenn Sie Debug-Informationen enthalten sein sollen dann den Assembler aufrufen mit:

gcc -gdwarf2 -c asm.s -o asm.o 

Jetzt objdump --dwarf zeigt die Debug-Informationen an.

+0

Nein. Objdump mit der Option -d zerlegt den Code. Aber ich frage nach - Zwerg Option. (Aktualisierter Titel der Frage) – Ravi