Recent versions of the AIX toolchain now support the debug_macinfo section. The section header of the macinfo_section includes a reference to the debug lineptr. As with the earlier adjustment to the debug line reference in the debug_info section, the debug_macinfo section requires a similar adjustment.
The adjustment is necessary because the AIX assembler inserts the debug line section length, which causes the GCC generated label for the beginning of the section to point to the incorrect location expected by debuggers, such as GDB. This patch mirrors the earlier patch to copy debug_section_label into dl_section_ref and append the adjustment when necessary. With this patch, GDB is able to report correct macro information. Bootstrapped on powerpc-ibm-aix7.2.0.0 Okay? Thanks, David * dwarf2out.c (output_macinfo): Copy debug_line_section_label to dl_section_ref. On AIX, append an expression to subtract the size of the section length to dl_section_ref. Index: dwarf2out.c =================================================================== --- dwarf2out.c (revision 250453) +++ dwarf2out.c (working copy) @@ -26975,6 +26975,7 @@ output_macinfo (void) macinfo_entry *ref; vec<macinfo_entry, va_gc> *files = NULL; macinfo_hash_type *macinfo_htab = NULL; + char dl_section_ref[MAX_ARTIFICIAL_LABEL_BYTES]; if (! length) return; @@ -26985,6 +26986,12 @@ output_macinfo (void) && (int) DW_MACINFO_start_file == (int) DW_MACRO_start_file && (int) DW_MACINFO_end_file == (int) DW_MACRO_end_file); + /* AIX Assembler inserts the length, so adjust the reference to match the + offset expected by debuggers. */ + strcpy (dl_section_ref, debug_line_section_label); + if (XCOFF_DEBUGGING_INFO) + strcat (dl_section_ref, DWARF_INITIAL_LENGTH_SIZE_STR); + /* For .debug_macro emit the section header. */ if (!dwarf_strict || dwarf_version >= 5) { @@ -26995,7 +27002,7 @@ output_macinfo (void) else dw2_asm_output_data (1, 2, "Flags: 32-bit, lineptr present"); dw2_asm_output_offset (DWARF_OFFSET_SIZE, - (!dwarf_split_debug_info ? debug_line_section_label + (!dwarf_split_debug_info ? dl_section_ref : debug_skeleton_line_section_label), debug_line_section, NULL);