Это более точная версия этого вопроса: Создание отладочных символов для GDB вручную .Я генерирую код asm для своего языка и хочу иметь возможность наблюдать за переменными.AFAIK, что позволяет сделать это, определено после
.section .debug_info,"",@progbits
Вопрос : как я могу сгенерировать .section .debug_info
для DWARF (так как моя система - Linux; но на самом деле я в порядке счто-нибудь, что работает)?Где-нибудь есть документация для этого раздела?
Давайте для конкретности поговорим об этой программе:
int sum(int a, int b) {
return a+b;
}
Сгенерированный asm можно увидеть здесь (x86-64 gcc 7.3): https://godbolt.org/z/ooTuuO Часть этого, которая, мне кажется, мне нужна:
.Ldebug_info0:
.long 0x6f
.value 0x4
.long .Ldebug_abbrev0
.byte 0x8
.uleb128 0x1
.long .LASF0
.byte 0x4
.long .LASF1
.long .LASF2
.quad .Ltext0
.quad .Letext0-.Ltext0
.long .Ldebug_line0
.uleb128 0x2
.string "sum"
.byte 0x1
.byte 0x1
.long .LASF3
.long 0x6b
.quad .LFB0
.quad .LFE0-.LFB0
.uleb128 0x1
.byte 0x9c
.long 0x6b
.uleb128 0x3
.string "a"
.byte 0x1
.byte 0x1
.long 0x6b
.uleb128 0x2
.byte 0x91
.sleb128 -20
.uleb128 0x3
.string "b"
.byte 0x1
.byte 0x1
.long 0x6b
.uleb128 0x2
.byte 0x91
.sleb128 -24
.byte 0
.uleb128 0x4
.byte 0x4
.byte 0x5
.string "int"
.byte 0
Я могу видеть имена переменных, но я ничего не понимаю, кроме этого.На что я пытался взглянуть:
- https://stackoverflow.com/a/30212164/2956272.Он содержит некоторую полезную информацию (например, значения
.loc
и .LFB, .LFE
), но недостаточную для понимания содержания раздела. - https://sourceware.org/binutils/docs-2.18/as/Symbols.html - Есть некоторая информация о символах,но он слишком общий
- Документация гномов: http://dwarfstd.org/doc/DWARF4.pdf.Конечно, я только просматривал это, но я не видел ничего, что соответствует тому, что я вижу в asm.Как я понимаю, есть почти прямой перевод того, что я вижу, Гному, но я не знаю, как это делается.
- и многие другие.
Другими словами, яне удалось найти документацию для этого раздела.Вы знаете, где я могу найти это?