aboutsummaryrefslogtreecommitdiff
path: root/gdb/dwarf2/macro.h
diff options
context:
space:
mode:
authornitachra <Nitika.Achra@amd.com>2020-09-20 23:22:59 +0530
committerAlok Kumar Sharma <AlokKumar.Sharma@amd.com>2020-10-02 12:27:45 +0530
commit048fde1ef43843aa67e9ac30829e0d30f019a7dd (patch)
tree7a65a5b65ca05872df345d9ceb62d37db0668659 /gdb/dwarf2/macro.h
parent71a74ee72d18c89730d42236b212257dab8325c3 (diff)
downloadgdb-048fde1ef43843aa67e9ac30829e0d30f019a7dd.zip
gdb-048fde1ef43843aa67e9ac30829e0d30f019a7dd.tar.gz
gdb-048fde1ef43843aa67e9ac30829e0d30f019a7dd.tar.bz2
DWARFv5: Handle DW_MACRO_define_strx and DW_MACRO_undef_strx macro entries.
GDB complaints "During symbol reading: unrecognized DW_MACFINO opcode 0xb" with the testcase given below. Clang is emitting DW_MACRO_define_strx and DW_MACRO_undef_strx entries in .debug_macro section which are not supported in GDB. This patch handles them. DW_MACRO_define_strx and DW_MACRO_undef_strx are added in DWARFv5. They have two operands. The first operand encodes the line number of the #define or #undef macro directive. The second operand identifies a string; it is represented using an unsigned LEB128 encoded value, which is interpreted as a zero-based index into an array of offsets in the .debug_str_offsets section. This is as per the section 6.3.2.1 of Dwarf Debugging Information Format Version 5. Test case used: #define MAX_SIZE 10 int main(void) { int size = 0; size = size + MAX_SIZE; printf("\n The value of size is [%d]\n",size); return 0; } clang -gdwarf-5 -fdebug-macro macro.c -o macro.out Before the patch: gdb/new_gdb/binutils-gdb/build/bin/gdb -q macro.out -ex "set complaints 1" -ex "start" Reading symbols from macro.out... During symbol reading: unrecognized DW_MACFINO opcode 0xb Temporary breakpoint 1 at 0x4004df: file macro.c, line 7. Starting program: /home/nitika/workspace/macro.out Temporary breakpoint 1, main () at macro.c:7 7 int size = 0; (gdb) Tested by running the testsuite before and after the patch with -gdwarf-5 and there is no increase in the number of test cases that fails. Used clang 11.0.0. gdb/ChangeLog: * dwarf2/macro.c (dwarf_decode_macro_bytes): Handle DW_MACRO_define_strx and DW_MACRO_undef_strx. (dwarf_decode_macros): Likewise * dwarf2/read.c (dwarf_decode_macros): Pass str_offsets_base in the parameters which is the value of DW_AT_str_offsets_base. * dwarf2/macro.h (dwarf_decode_macros): Modify the definition to include str_offsets_base.
Diffstat (limited to 'gdb/dwarf2/macro.h')
-rw-r--r--gdb/dwarf2/macro.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/gdb/dwarf2/macro.h b/gdb/dwarf2/macro.h
index d874068..0a7ac55 100644
--- a/gdb/dwarf2/macro.h
+++ b/gdb/dwarf2/macro.h
@@ -28,6 +28,9 @@ extern void dwarf_decode_macros (dwarf2_per_objfile *per_objfile,
const struct line_header *lh,
unsigned int offset_size,
unsigned int offset,
+ dwarf2_section_info *str_section,
+ dwarf2_section_info *str_offsets_section,
+ ULONGEST str_offsets_base,
int section_is_gnu);
#endif /* GDB_DWARF2_MACRO_H */