This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH,DWARF,v2] AIX dwarf2out label fix
- From: David Edelsohn <dje dot gcc at gmail dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Thu, 18 May 2017 06:00:52 -0400
- Subject: [PATCH,DWARF,v2] AIX dwarf2out label fix
- Authentication-results: sourceware.org; auth=none
This version adds a macro DWARF_INITIAL_LENGTH_SIZE_STR based on
DWARF_OFFSET_SIZE to define the string expression to append to the
label to correct the offset.
Because AIX Assembler inserts the section length, the section label
generated by GCC points to the wrong location and must be adjusted
when referenced in DW_AT_stmt_list.
Okay?
Thanks, David
* dwarf2out.c (DWARF_INITIAL_LENGTH_SIZE_STR): New.
(dwarf2out_finish): Use a local copy of debug_line_section_label.
On AIX, append an expression to subtract the size of the
section length.
Index: dwarf2out.c
===================================================================
--- dwarf2out.c (revision 248185)
+++ dwarf2out.c (working copy)
@@ -189,6 +189,10 @@
#define DWARF_INITIAL_LENGTH_SIZE (DWARF_OFFSET_SIZE == 4 ? 4 : 12)
#endif
+#ifndef DWARF_INITIAL_LENGTH_SIZE_STR
+#define DWARF_INITIAL_LENGTH_SIZE_STR (DWARF_OFFSET_SIZE == 4 ? "-4" : "-12")
+#endif
+
/* Round SIZE up to the nearest BOUNDARY. */
#define DWARF_ROUND(SIZE,BOUNDARY) \
((((SIZE) + (BOUNDARY) - 1) / (BOUNDARY)) * (BOUNDARY))
@@ -29650,6 +29654,7 @@
comdat_type_node *ctnode;
dw_die_ref main_comp_unit_die;
unsigned char checksum[16];
+ char dl_section_label[MAX_ARTIFICIAL_LABEL_BYTES];
/* Flush out any latecomers to the limbo party. */
flush_limbo_die_list ();
@@ -29767,9 +29772,13 @@
}
}
+ strcpy (dl_section_label, debug_line_section_label);
+ if (XCOFF_DEBUGGING_INFO)
+ strcat (dl_section_label, DWARF_INITIAL_LENGTH_SIZE_STR);
+
if (debug_info_level >= DINFO_LEVEL_TERSE)
add_AT_lineptr (main_comp_unit_die, DW_AT_stmt_list,
- debug_line_section_label);
+ dl_section_label);
if (have_macinfo)
add_AT_macptr (comp_unit_die (),
@@ -29845,7 +29854,7 @@
if (debug_info_level >= DINFO_LEVEL_TERSE)
add_AT_lineptr (ctnode->root_die, DW_AT_stmt_list,
(!dwarf_split_debug_info
- ? debug_line_section_label
+ ? dl_section_label
: debug_skeleton_line_section_label));
output_comdat_type_unit (ctnode);