Сборка: как сгенерировать .section .debug_info? - PullRequest
0 голосов
/ 06 декабря 2018

Это более точная версия этого вопроса: Создание отладочных символов для 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.Как я понимаю, есть почти прямой перевод того, что я вижу, Гному, но я не знаю, как это делается.
  • и многие другие.

Другими словами, яне удалось найти документацию для этого раздела.Вы знаете, где я могу найти это?

...