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

Я написал простую процедуру сборки x86:

$ 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.

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

Любые идеи?


person Ravi    schedule 25.07.2016    source источник
comment
Функция не вызывается. Может быть, он оптимизирован как мертвый код?   -  person Jan Henke    schedule 25.07.2016
comment
@JanHenke спасибо. asm.s является одним из модулей компиляции. Я вызываю его из main(), определенного в другом блоке компиляции. Кроме того, я не использую никаких параметров оптимизации gcc. В противном случае он не появится в таблице символов. Правильно?   -  person Ravi    schedule 25.07.2016


Ответы (1)


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

    objdump -d -M intel -S asm.o

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

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

Теперь objdump --dwarf будет отображать отладочную информацию.

person MichaelMoser    schedule 25.07.2016
comment
objdump с опцией -d дизассемблирует код. Но я спрашиваю об опции --dwarf. (обновлено название вопроса) - person Ravi; 25.07.2016