Hello all,
previously we were using arm-none-eabi-gcc 7.3.1 to compile an elf-file which was the input of a tool which includes an elf-file parser to record certain variables.
This elf-file parser basically creates a list of all static variables like this:
GlobalVariableName Address DataType ObjectName.ClassVariableName Address DataType ...
When updating to compiler version 10.3.1 the parsing of the elf-file does not work properly anymore. I did some debugging and saw that already in the debug-info of the generated elf-file the address information (DW_AT_location) of most variables is missing.
When I use "arm-none-eabi-objdump --dwarf Firmware.elf" on a elf-file compiled with version 10.3.1, there is no "DW_AT_location" visible:
<1><b3540>: Abbrev Number: 13 (DW_TAG_variable) <b3541> DW_AT_name : (indirect string, offset: 0x2f0cd): SystemCoreClock <b3545> DW_AT_decl_file : 4 <b3546> DW_AT_decl_line : 58 <b3547> DW_AT_decl_column : 17 <b3548> DW_AT_type : 0xb3379 <b354c> DW_AT_external : 1 <b354c> DW_AT_declaration : 1
However the same with version 7.3.1 shows correct address information:
<1><26ec2>: Abbrev Number: 90 (DW_TAG_variable) <26ec3> DW_AT_name : (indirect string, offset: 0x165b): SystemCoreClock <26ec7> DW_AT_decl_file : 120 <26ec8> DW_AT_decl_line : 135 <26ec9> DW_AT_type : 0x4d <26ecd> DW_AT_location : 5 byte block: 3 68 0 0 20 (DW_OP_addr: 20000068)
But in the map file of both compiler versions the address is shown correctly in the map file:
.data.SystemCoreClock 0x0000000020000000 0x4 /tmp/Firmware.elf.qCCO2z.ltrans0.ltrans.o
The compiler settings for 10.3.1 are:
GNU GIMPLE 10.3.1 20210824 (release) -mfloat-abi=hard -mfpu=fpv4-sp-d16 -mcpu=cortex-m4 -mthumb -mlittle-endian -mfloat-abi=hard -mfpu=fpv4-sp-d16 -march=armv7e-m+fp -g -ggdb -Os -Os -fno-openmp -fno-openacc -fno-pie -fcf-protection=none -ffunction-sections -fdata-sections -fltrans
- Does anybody have an idea why the address information is missing with the new compiler version?
- Is there an easier way to generate a list of variables (global and class variables) like shown at the beginning of the post?
Thank you in advance!
Regards,
Martin