Как TRACE32 узнает тип глобального символа, загруженного из ELF?
У меня странное поведение:
Я загружаю файл ELF, содержащий две глобальные переменные: E1 и S1
Эти две переменные объявлены как "int", но TRACE32 видит E1 как FLOAT и S1 как int.
Я пытаюсь использовать "readelf", но он только говорит, что E1 и S1 являются объектами.
Как T32 находит эту информацию?
1 ответ
Решение
Я пытаюсь использовать "readelf", но он только говорит, что E1 и S1 являются объектами.
Вы, вероятно, сделали это: readelf -s elf-file
(в общем, когда задаешь вопросы, лучше сказать именно то , что ты сделал).
Пытаться readelf -wi elf-file
вместо. Вы, вероятно, увидите что-то вроде:
<1><57>: Abbrev Number: 3 (DW_TAG_base_type)
<58> DW_AT_byte_size : 4
<59> DW_AT_encoding : 5 (signed)
<5a> DW_AT_name : int
...
<1><af>: Abbrev Number: 6 (DW_TAG_variable)
<b0> DW_AT_name : E1
<b3> DW_AT_decl_file : 1
<b4> DW_AT_decl_line : 4
<b5> DW_AT_type : <0x57>
<b9> DW_AT_external : 1
<b9> DW_AT_location : 9 byte block: 3 50 10 60 0 0 0 0 0 (DW_OP_addr: 601050)
<1><c3>: Abbrev Number: 6 (DW_TAG_variable)
<c4> DW_AT_name : S1
<c7> DW_AT_decl_file : 1
<c8> DW_AT_decl_line : 5
<c9> DW_AT_type : <0xd7>
<cd> DW_AT_external : 1
<cd> DW_AT_location : 9 byte block: 3 4c 10 60 0 0 0 0 0 (DW_OP_addr: 60104c)
<1><d7>: Abbrev Number: 2 (DW_TAG_base_type)
<d8> DW_AT_byte_size : 4
<d9> DW_AT_encoding : 4 (float)
<da> DW_AT_name : (indirect string, offset: 0x9d): float
Обратите внимание, как E1
имеет DW_AT_type
из 0x57
(int
), в то время как S1
имеет тип 0xd7
(float
).