Почему функции класса C ++ не имеют low_p c / high_p c DWARF info - PullRequest
1 голос
/ 08 января 2020

Я пытаюсь найти диапазон смещения функции класса c ++, но когда я просматриваю информацию DWARF, я не вижу атрибутов low_p c или high_p c. Также нет записей DW_AT_specification или DW_AT_abstract_origin для D IE, в котором содержится остальная информация о функции. Например, я вижу только:

0x03989358:     DW_TAG_subprogram
                  DW_AT_decl_line       (539)
                  DW_AT_decl_file       ("file.h")
                  DW_AT_declaration     (0x01)
                  DW_AT_MIPS_linkage_name       ("Mangled function Class:Function")
                  DW_AT_accessibility   (DW_ACCESS_public)
                  DW_AT_name    ("Function")

И никакие другие DIE не указывают на 0x03989358

Как я могу получить диапазон смещения для этих функций / почему они не включены?

PS Я получил эту информацию от dwarfdump, а это DWARFv3

1 Ответ

0 голосов
/ 10 января 2020

По моему опыту, в одной и той же CU может быть несколько элементов DW_TAG_subprogram. Первый будет иметь объявление функции, второй будет иметь low_pc / high_p c, а DW_AT_specification указывает на первый.

Поиск в CU элементов DW_TAG_subprogram с помощью low_pc / high_p c, посмотрите, куда он вас приведет.

Используйте DWARF Explorer для просмотра всего дерева D IE, посмотрите, поможет ли это.

...