2016-07-25 13 views
0

Я написал простой x86 сборка рутина:objdump --dwarf сборочного кода не перечисляет функции

$ cat asm.s 

.global foo 

.section .text 
foo: 
    nop 
    ret 

И скомпилирован с

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

Но когда я objdump --dwarf asm.o, он не отображает информация о функции foo. Похоже, gcc не создает .debug_info подробнее о foo.

BTW, есть запись foo в .symtab.

Любые идеи?

+0

Функция не вызывается. Может быть, он оптимизирован как мертвый код? –

+0

@JanHenke спасибо. asm.s является одним из модулей компиляции. Я вызываю его из main(), определенного в другом модуле компиляции. Кроме того, я не использую какие-либо опции оптимизации gcc. В противном случае он не появится в таблице символов. правильно? – Ravi

ответ

1

Ошибка в команде objdump. используйте следующую команду, и он будет показывать ассемблерный листинг вашей функции:

objdump -d -M intel -S asm.o 

Теперь вы обновили вопрос - если вы хотите включить отладочную информацию, то вызови сборщик:

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

сейчас objdump --dwarf отобразит отладочную информацию.

+0

№ objdump с опцией -d дизассемблирует код. Но я спрашиваю о опции -dwarf. (Обновленное название вопроса) – Ravi