public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Refactor section/label init for early LTO debug
@ 2016-09-21 13:34 Richard Biener
  2016-09-23 19:37 ` Jason Merrill
  2016-09-27 10:23 ` Rainer Orth
  0 siblings, 2 replies; 11+ messages in thread
From: Richard Biener @ 2016-09-21 13:34 UTC (permalink / raw)
  To: gcc-patches; +Cc: jason


The following patch ports a refactoring of section/label in it from
the early LTO debug work to trunk.  For early LTO debug we need to
be able to emit two sets of debug infos into two sets of different
sections - early LTO into .gnu.debuglto_ prefixed sections and
regular (early + late) debug for the FAT part of the object.

Thus this preparation splits out the section and label generation
from dwarf2out_init moving the text section related stuff to 
dwarf2out_assembly_start and the rest to a new function
init_sections_and_labels which is now called only before we start
outputting dwarf (in dwarf2out_finish).  It also removes some
dwarf_split_debug_info checks from the macro section name defines
(in the end I'll have up to four variants - regular, regular LTO,
DWO, DWO LTO).

And it removes an unused function.

Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.  I've
also bootstrapped with -O2 -g3 to exercise the .debug_macro path.

Ok?

Just noticed that DEBUG_STR_OFFSETS_SECTION needs similar massaging
for its dwarf_split_debug_info condition - will followup as obvious
if this one is approved.

Thanks,
Richard.

2016-09-21  Richard Biener  <rguenther@suse.de>

	* dwarf2out.c (stripattributes): Remove unused function.
	(DEBUG_NORM_MACINFO_SECTION): Rename to DEBUG_MACINFO_SECTION.
	Push dwarf_split_debug_info handling into init_sections_and_labels.
	(DEBUG_NORM_MACRO_SECTION): Likewise to DEBUG_MACRO_SECTION.
	(DEBUG_MACRO_SECTION_FLAGS): Remove.
	(debug_macinfo_section_name): New global.
	(output_macinfo): Use debug_macinfo_section_name.
	(init_sections_and_labels): Split out section and label generation
	from dwarf2out_init.  Set debug_macinfo_section_name.
	(dwarf2out_init): Move text section label generation and emission
	to ...
	(dwarf2out_assembly_start): ... here.
	(dwarf2out_finish): Call init_sections_and_labels before DWARF
	output starts.

Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c	(revision 240303)
+++ gcc/dwarf2out.c	(working copy)
@@ -159,6 +159,7 @@ static GTY(()) section *debug_skeleton_a
 static GTY(()) section *debug_aranges_section;
 static GTY(()) section *debug_addr_section;
 static GTY(()) section *debug_macinfo_section;
+static const char *debug_macinfo_section_name;
 static GTY(()) section *debug_line_section;
 static GTY(()) section *debug_skeleton_line_section;
 static GTY(()) section *debug_loc_section;
@@ -265,7 +266,6 @@ static GTY(()) dw_die_ref decltype_auto_
 
 /* Forward declarations for functions defined in this file.  */
 
-static char *stripattributes (const char *);
 static void output_call_frame_info (int);
 static void dwarf2out_note_section_used (void);
 
@@ -410,24 +410,6 @@ should_emit_struct_debug (tree type, enu
   return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
 }
 \f
-/* Return a pointer to a copy of the section string name S with all
-   attributes stripped off, and an asterisk prepended (for assemble_name).  */
-
-static inline char *
-stripattributes (const char *s)
-{
-  char *stripped = XNEWVEC (char, strlen (s) + 2);
-  char *p = stripped;
-
-  *p++ = '*';
-
-  while (*s && *s != ',')
-    *p++ = *s++;
-
-  *p = '\0';
-  return stripped;
-}
-
 /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
    switch to the data section instead, and write out a synthetic start label
    for collect2 the first time around.  */
@@ -3514,27 +3496,17 @@ new_addr_loc_descr (rtx addr, enum dtpre
 #ifndef DEBUG_ADDR_SECTION
 #define DEBUG_ADDR_SECTION     ".debug_addr"
 #endif
-#ifndef DEBUG_NORM_MACINFO_SECTION
-#define DEBUG_NORM_MACINFO_SECTION     ".debug_macinfo"
+#ifndef DEBUG_MACINFO_SECTION
+#define DEBUG_MACINFO_SECTION     ".debug_macinfo"
 #endif
 #ifndef DEBUG_DWO_MACINFO_SECTION
 #define DEBUG_DWO_MACINFO_SECTION      ".debug_macinfo.dwo"
 #endif
-#ifndef DEBUG_MACINFO_SECTION
-#define DEBUG_MACINFO_SECTION                                           \
-  (!dwarf_split_debug_info                                              \
-   ? (DEBUG_NORM_MACINFO_SECTION) : (DEBUG_DWO_MACINFO_SECTION))
-#endif
-#ifndef DEBUG_NORM_MACRO_SECTION
-#define DEBUG_NORM_MACRO_SECTION ".debug_macro"
-#endif
 #ifndef DEBUG_DWO_MACRO_SECTION
 #define DEBUG_DWO_MACRO_SECTION        ".debug_macro.dwo"
 #endif
 #ifndef DEBUG_MACRO_SECTION
-#define DEBUG_MACRO_SECTION                                             \
-  (!dwarf_split_debug_info                                              \
-   ? (DEBUG_NORM_MACRO_SECTION) : (DEBUG_DWO_MACRO_SECTION))
+#define DEBUG_MACRO_SECTION	".debug_macro"
 #endif
 #ifndef DEBUG_LINE_SECTION
 #define DEBUG_LINE_SECTION	".debug_line"
@@ -3580,10 +3552,6 @@ new_addr_loc_descr (rtx addr, enum dtpre
 #define TEXT_SECTION_NAME	".text"
 #endif
 
-/* Section flags for .debug_macinfo/.debug_macro section.  */
-#define DEBUG_MACRO_SECTION_FLAGS                                       \
-  (dwarf_split_debug_info ? SECTION_DEBUG | SECTION_EXCLUDE : SECTION_DEBUG)
-
 /* Section flags for .debug_str section.  */
 #define DEBUG_STR_SECTION_FLAGS                                 \
   (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
@@ -25520,7 +25488,7 @@ output_macinfo (void)
 	  tree comdat_key = get_identifier (ref->info);
 	  /* Terminate the previous .debug_macinfo section.  */
 	  dw2_asm_output_data (1, 0, "End compilation unit");
-	  targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
+	  targetm.asm_out.named_section (debug_macinfo_section_name,
 					 SECTION_DEBUG
 					 | SECTION_LINKONCE,
 					 comdat_key);
@@ -25548,53 +25516,11 @@ output_macinfo (void)
       }
 }
 
-/* Set up for Dwarf output at the start of compilation.  */
+/* Initialize the various sections and labels for dwarf output.  */
 
 static void
-dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
+init_sections_and_labels (void)
 {
-  /* This option is currently broken, see (PR53118 and PR46102).  */
-  if (flag_eliminate_dwarf2_dups
-      && strstr (lang_hooks.name, "C++"))
-    {
-      warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring");
-      flag_eliminate_dwarf2_dups = 0;
-    }
-
-  /* Allocate the file_table.  */
-  file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
-
-#ifndef DWARF2_LINENO_DEBUGGING_INFO
-  /* Allocate the decl_die_table.  */
-  decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
-
-  /* Allocate the decl_loc_table.  */
-  decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
-
-  /* Allocate the cached_dw_loc_list_table.  */
-  cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::create_ggc (10);
-
-  /* Allocate the initial hunk of the decl_scope_table.  */
-  vec_alloc (decl_scope_table, 256);
-
-  /* Allocate the initial hunk of the abbrev_die_table.  */
-  abbrev_die_table = ggc_cleared_vec_alloc<dw_die_ref>
-    (ABBREV_DIE_TABLE_INCREMENT);
-  abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
-  /* Zero-th entry is allocated, but unused.  */
-  abbrev_die_table_in_use = 1;
-
-  /* Allocate the dwarf_proc_stack_usage_map.  */
-  dwarf_proc_stack_usage_map = new hash_map<dw_die_ref, int>;
-
-  /* Allocate the pubtypes and pubnames vectors.  */
-  vec_alloc (pubname_table, 32);
-  vec_alloc (pubtype_table, 32);
-
-  vec_alloc (incomplete_types, 64);
-
-  vec_alloc (used_rtx_array, 32);
-
   if (!dwarf_split_debug_info)
     {
       debug_info_section = get_section (DEBUG_INFO_SECTION,
@@ -25603,6 +25529,10 @@ dwarf2out_init (const char *filename ATT
                                           SECTION_DEBUG, NULL);
       debug_loc_section = get_section (DEBUG_LOC_SECTION,
                                        SECTION_DEBUG, NULL);
+      debug_macinfo_section_name
+	= dwarf_strict ? DEBUG_MACINFO_SECTION : DEBUG_MACRO_SECTION;
+      debug_macinfo_section = get_section (debug_macinfo_section_name,
+					   SECTION_DEBUG, NULL);
     }
   else
     {
@@ -25623,8 +25553,8 @@ dwarf2out_init (const char *filename ATT
       /* Somewhat confusing detail: The skeleton_[abbrev|info] sections stay in
          the main .o, but the skeleton_line goes into the split off dwo.  */
       debug_skeleton_line_section
-          = get_section (DEBUG_DWO_LINE_SECTION,
-                         SECTION_DEBUG | SECTION_EXCLUDE, NULL);
+        = get_section (DEBUG_DWO_LINE_SECTION,
+		       SECTION_DEBUG | SECTION_EXCLUDE, NULL);
       ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
                                    DEBUG_SKELETON_LINE_SECTION_LABEL, 0);
       debug_str_offsets_section = get_section (DEBUG_STR_OFFSETS_SECTION,
@@ -25636,13 +25566,14 @@ dwarf2out_init (const char *filename ATT
                                        SECTION_DEBUG | SECTION_EXCLUDE, NULL);
       debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION,
                                            DEBUG_STR_DWO_SECTION_FLAGS, NULL);
+      debug_macinfo_section_name
+	= dwarf_strict ? DEBUG_DWO_MACINFO_SECTION : DEBUG_DWO_MACRO_SECTION;
+      debug_macinfo_section = get_section (debug_macinfo_section_name,
+					   SECTION_DEBUG | SECTION_EXCLUDE,
+					   NULL);
     }
   debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
 				       SECTION_DEBUG, NULL);
-  debug_macinfo_section = get_section (dwarf_strict
-				       ? DEBUG_MACINFO_SECTION
-				       : DEBUG_MACRO_SECTION,
-                                       DEBUG_MACRO_SECTION_FLAGS, NULL);
   debug_line_section = get_section (DEBUG_LINE_SECTION,
 				    SECTION_DEBUG, NULL);
   debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
@@ -25656,14 +25587,8 @@ dwarf2out_init (const char *filename ATT
   debug_frame_section = get_section (DEBUG_FRAME_SECTION,
 				     SECTION_DEBUG, NULL);
 
-  ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
   ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
 			       DEBUG_ABBREV_SECTION_LABEL, 0);
-  ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
-  ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
-			       COLD_TEXT_SECTION_LABEL, 0);
-  ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
-
   ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
 			       DEBUG_INFO_SECTION_LABEL, 0);
   ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
@@ -25677,12 +25602,57 @@ dwarf2out_init (const char *filename ATT
 			       ? DEBUG_MACINFO_SECTION_LABEL
 			       : DEBUG_MACRO_SECTION_LABEL, 0);
   ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL, 0);
+}
+
+/* Set up for Dwarf output at the start of compilation.  */
+
+static void
+dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
+{
+  /* This option is currently broken, see (PR53118 and PR46102).  */
+  if (flag_eliminate_dwarf2_dups
+      && strstr (lang_hooks.name, "C++"))
+    {
+      warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring");
+      flag_eliminate_dwarf2_dups = 0;
+    }
+
+  /* Allocate the file_table.  */
+  file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
+
+#ifndef DWARF2_LINENO_DEBUGGING_INFO
+  /* Allocate the decl_die_table.  */
+  decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
+
+  /* Allocate the decl_loc_table.  */
+  decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
+
+  /* Allocate the cached_dw_loc_list_table.  */
+  cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::create_ggc (10);
+
+  /* Allocate the initial hunk of the decl_scope_table.  */
+  vec_alloc (decl_scope_table, 256);
+
+  /* Allocate the initial hunk of the abbrev_die_table.  */
+  abbrev_die_table = ggc_cleared_vec_alloc<dw_die_ref>
+    (ABBREV_DIE_TABLE_INCREMENT);
+  abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
+  /* Zero-th entry is allocated, but unused.  */
+  abbrev_die_table_in_use = 1;
+
+  /* Allocate the dwarf_proc_stack_usage_map.  */
+  dwarf_proc_stack_usage_map = new hash_map<dw_die_ref, int>;
+
+  /* Allocate the pubtypes and pubnames vectors.  */
+  vec_alloc (pubname_table, 32);
+  vec_alloc (pubtype_table, 32);
+
+  vec_alloc (incomplete_types, 64);
+
+  vec_alloc (used_rtx_array, 32);
 
   if (debug_info_level >= DINFO_LEVEL_VERBOSE)
     vec_alloc (macinfo_table, 64);
-
-  switch_to_section (text_section);
-  ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
 #endif
 
   /* Make sure the line number table for .text always exists.  */
@@ -25705,6 +25675,17 @@ dwarf2out_init (const char *filename ATT
 static void
 dwarf2out_assembly_start (void)
 {
+#ifndef DWARF2_LINENO_DEBUGGING_INFO
+  ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
+  ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
+  ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
+			       COLD_TEXT_SECTION_LABEL, 0);
+  ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
+
+  switch_to_section (text_section);
+  ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
+#endif
+
   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
       && dwarf2out_do_cfi_asm ()
       && (!(flag_unwind_tables || flag_exceptions)
@@ -27858,6 +27839,9 @@ dwarf2out_finish (const char *)
   if (flag_eliminate_dwarf2_dups)
     break_out_includes (comp_unit_die ());
 
+  /* Initialize sections and labels used for actual assembler output.  */
+  init_sections_and_labels ();
+
   /* Traverse the DIE's and add sibling attributes to those DIE's that
      have children.  */
   add_sibling_attributes (comp_unit_die ());

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Refactor section/label init for early LTO debug
  2016-09-21 13:34 [PATCH] Refactor section/label init for early LTO debug Richard Biener
@ 2016-09-23 19:37 ` Jason Merrill
  2016-09-27 10:23 ` Rainer Orth
  1 sibling, 0 replies; 11+ messages in thread
From: Jason Merrill @ 2016-09-23 19:37 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches List

OK.

On Wed, Sep 21, 2016 at 9:19 AM, Richard Biener <rguenther@suse.de> wrote:
>
> The following patch ports a refactoring of section/label in it from
> the early LTO debug work to trunk.  For early LTO debug we need to
> be able to emit two sets of debug infos into two sets of different
> sections - early LTO into .gnu.debuglto_ prefixed sections and
> regular (early + late) debug for the FAT part of the object.
>
> Thus this preparation splits out the section and label generation
> from dwarf2out_init moving the text section related stuff to
> dwarf2out_assembly_start and the rest to a new function
> init_sections_and_labels which is now called only before we start
> outputting dwarf (in dwarf2out_finish).  It also removes some
> dwarf_split_debug_info checks from the macro section name defines
> (in the end I'll have up to four variants - regular, regular LTO,
> DWO, DWO LTO).
>
> And it removes an unused function.
>
> Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.  I've
> also bootstrapped with -O2 -g3 to exercise the .debug_macro path.
>
> Ok?
>
> Just noticed that DEBUG_STR_OFFSETS_SECTION needs similar massaging
> for its dwarf_split_debug_info condition - will followup as obvious
> if this one is approved.
>
> Thanks,
> Richard.
>
> 2016-09-21  Richard Biener  <rguenther@suse.de>
>
>         * dwarf2out.c (stripattributes): Remove unused function.
>         (DEBUG_NORM_MACINFO_SECTION): Rename to DEBUG_MACINFO_SECTION.
>         Push dwarf_split_debug_info handling into init_sections_and_labels.
>         (DEBUG_NORM_MACRO_SECTION): Likewise to DEBUG_MACRO_SECTION.
>         (DEBUG_MACRO_SECTION_FLAGS): Remove.
>         (debug_macinfo_section_name): New global.
>         (output_macinfo): Use debug_macinfo_section_name.
>         (init_sections_and_labels): Split out section and label generation
>         from dwarf2out_init.  Set debug_macinfo_section_name.
>         (dwarf2out_init): Move text section label generation and emission
>         to ...
>         (dwarf2out_assembly_start): ... here.
>         (dwarf2out_finish): Call init_sections_and_labels before DWARF
>         output starts.
>
> Index: gcc/dwarf2out.c
> ===================================================================
> --- gcc/dwarf2out.c     (revision 240303)
> +++ gcc/dwarf2out.c     (working copy)
> @@ -159,6 +159,7 @@ static GTY(()) section *debug_skeleton_a
>  static GTY(()) section *debug_aranges_section;
>  static GTY(()) section *debug_addr_section;
>  static GTY(()) section *debug_macinfo_section;
> +static const char *debug_macinfo_section_name;
>  static GTY(()) section *debug_line_section;
>  static GTY(()) section *debug_skeleton_line_section;
>  static GTY(()) section *debug_loc_section;
> @@ -265,7 +266,6 @@ static GTY(()) dw_die_ref decltype_auto_
>
>  /* Forward declarations for functions defined in this file.  */
>
> -static char *stripattributes (const char *);
>  static void output_call_frame_info (int);
>  static void dwarf2out_note_section_used (void);
>
> @@ -410,24 +410,6 @@ should_emit_struct_debug (tree type, enu
>    return DUMP_GSTRUCT (type, usage, criterion, generic, false, false);
>  }
>
> -/* Return a pointer to a copy of the section string name S with all
> -   attributes stripped off, and an asterisk prepended (for assemble_name).  */
> -
> -static inline char *
> -stripattributes (const char *s)
> -{
> -  char *stripped = XNEWVEC (char, strlen (s) + 2);
> -  char *p = stripped;
> -
> -  *p++ = '*';
> -
> -  while (*s && *s != ',')
> -    *p++ = *s++;
> -
> -  *p = '\0';
> -  return stripped;
> -}
> -
>  /* Switch [BACK] to eh_frame_section.  If we don't have an eh_frame_section,
>     switch to the data section instead, and write out a synthetic start label
>     for collect2 the first time around.  */
> @@ -3514,27 +3496,17 @@ new_addr_loc_descr (rtx addr, enum dtpre
>  #ifndef DEBUG_ADDR_SECTION
>  #define DEBUG_ADDR_SECTION     ".debug_addr"
>  #endif
> -#ifndef DEBUG_NORM_MACINFO_SECTION
> -#define DEBUG_NORM_MACINFO_SECTION     ".debug_macinfo"
> +#ifndef DEBUG_MACINFO_SECTION
> +#define DEBUG_MACINFO_SECTION     ".debug_macinfo"
>  #endif
>  #ifndef DEBUG_DWO_MACINFO_SECTION
>  #define DEBUG_DWO_MACINFO_SECTION      ".debug_macinfo.dwo"
>  #endif
> -#ifndef DEBUG_MACINFO_SECTION
> -#define DEBUG_MACINFO_SECTION                                           \
> -  (!dwarf_split_debug_info                                              \
> -   ? (DEBUG_NORM_MACINFO_SECTION) : (DEBUG_DWO_MACINFO_SECTION))
> -#endif
> -#ifndef DEBUG_NORM_MACRO_SECTION
> -#define DEBUG_NORM_MACRO_SECTION ".debug_macro"
> -#endif
>  #ifndef DEBUG_DWO_MACRO_SECTION
>  #define DEBUG_DWO_MACRO_SECTION        ".debug_macro.dwo"
>  #endif
>  #ifndef DEBUG_MACRO_SECTION
> -#define DEBUG_MACRO_SECTION                                             \
> -  (!dwarf_split_debug_info                                              \
> -   ? (DEBUG_NORM_MACRO_SECTION) : (DEBUG_DWO_MACRO_SECTION))
> +#define DEBUG_MACRO_SECTION    ".debug_macro"
>  #endif
>  #ifndef DEBUG_LINE_SECTION
>  #define DEBUG_LINE_SECTION     ".debug_line"
> @@ -3580,10 +3552,6 @@ new_addr_loc_descr (rtx addr, enum dtpre
>  #define TEXT_SECTION_NAME      ".text"
>  #endif
>
> -/* Section flags for .debug_macinfo/.debug_macro section.  */
> -#define DEBUG_MACRO_SECTION_FLAGS                                       \
> -  (dwarf_split_debug_info ? SECTION_DEBUG | SECTION_EXCLUDE : SECTION_DEBUG)
> -
>  /* Section flags for .debug_str section.  */
>  #define DEBUG_STR_SECTION_FLAGS                                 \
>    (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings               \
> @@ -25520,7 +25488,7 @@ output_macinfo (void)
>           tree comdat_key = get_identifier (ref->info);
>           /* Terminate the previous .debug_macinfo section.  */
>           dw2_asm_output_data (1, 0, "End compilation unit");
> -         targetm.asm_out.named_section (DEBUG_MACRO_SECTION,
> +         targetm.asm_out.named_section (debug_macinfo_section_name,
>                                          SECTION_DEBUG
>                                          | SECTION_LINKONCE,
>                                          comdat_key);
> @@ -25548,53 +25516,11 @@ output_macinfo (void)
>        }
>  }
>
> -/* Set up for Dwarf output at the start of compilation.  */
> +/* Initialize the various sections and labels for dwarf output.  */
>
>  static void
> -dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
> +init_sections_and_labels (void)
>  {
> -  /* This option is currently broken, see (PR53118 and PR46102).  */
> -  if (flag_eliminate_dwarf2_dups
> -      && strstr (lang_hooks.name, "C++"))
> -    {
> -      warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring");
> -      flag_eliminate_dwarf2_dups = 0;
> -    }
> -
> -  /* Allocate the file_table.  */
> -  file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
> -
> -#ifndef DWARF2_LINENO_DEBUGGING_INFO
> -  /* Allocate the decl_die_table.  */
> -  decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
> -
> -  /* Allocate the decl_loc_table.  */
> -  decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
> -
> -  /* Allocate the cached_dw_loc_list_table.  */
> -  cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::create_ggc (10);
> -
> -  /* Allocate the initial hunk of the decl_scope_table.  */
> -  vec_alloc (decl_scope_table, 256);
> -
> -  /* Allocate the initial hunk of the abbrev_die_table.  */
> -  abbrev_die_table = ggc_cleared_vec_alloc<dw_die_ref>
> -    (ABBREV_DIE_TABLE_INCREMENT);
> -  abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
> -  /* Zero-th entry is allocated, but unused.  */
> -  abbrev_die_table_in_use = 1;
> -
> -  /* Allocate the dwarf_proc_stack_usage_map.  */
> -  dwarf_proc_stack_usage_map = new hash_map<dw_die_ref, int>;
> -
> -  /* Allocate the pubtypes and pubnames vectors.  */
> -  vec_alloc (pubname_table, 32);
> -  vec_alloc (pubtype_table, 32);
> -
> -  vec_alloc (incomplete_types, 64);
> -
> -  vec_alloc (used_rtx_array, 32);
> -
>    if (!dwarf_split_debug_info)
>      {
>        debug_info_section = get_section (DEBUG_INFO_SECTION,
> @@ -25603,6 +25529,10 @@ dwarf2out_init (const char *filename ATT
>                                            SECTION_DEBUG, NULL);
>        debug_loc_section = get_section (DEBUG_LOC_SECTION,
>                                         SECTION_DEBUG, NULL);
> +      debug_macinfo_section_name
> +       = dwarf_strict ? DEBUG_MACINFO_SECTION : DEBUG_MACRO_SECTION;
> +      debug_macinfo_section = get_section (debug_macinfo_section_name,
> +                                          SECTION_DEBUG, NULL);
>      }
>    else
>      {
> @@ -25623,8 +25553,8 @@ dwarf2out_init (const char *filename ATT
>        /* Somewhat confusing detail: The skeleton_[abbrev|info] sections stay in
>           the main .o, but the skeleton_line goes into the split off dwo.  */
>        debug_skeleton_line_section
> -          = get_section (DEBUG_DWO_LINE_SECTION,
> -                         SECTION_DEBUG | SECTION_EXCLUDE, NULL);
> +        = get_section (DEBUG_DWO_LINE_SECTION,
> +                      SECTION_DEBUG | SECTION_EXCLUDE, NULL);
>        ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label,
>                                     DEBUG_SKELETON_LINE_SECTION_LABEL, 0);
>        debug_str_offsets_section = get_section (DEBUG_STR_OFFSETS_SECTION,
> @@ -25636,13 +25566,14 @@ dwarf2out_init (const char *filename ATT
>                                         SECTION_DEBUG | SECTION_EXCLUDE, NULL);
>        debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION,
>                                             DEBUG_STR_DWO_SECTION_FLAGS, NULL);
> +      debug_macinfo_section_name
> +       = dwarf_strict ? DEBUG_DWO_MACINFO_SECTION : DEBUG_DWO_MACRO_SECTION;
> +      debug_macinfo_section = get_section (debug_macinfo_section_name,
> +                                          SECTION_DEBUG | SECTION_EXCLUDE,
> +                                          NULL);
>      }
>    debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
>                                        SECTION_DEBUG, NULL);
> -  debug_macinfo_section = get_section (dwarf_strict
> -                                      ? DEBUG_MACINFO_SECTION
> -                                      : DEBUG_MACRO_SECTION,
> -                                       DEBUG_MACRO_SECTION_FLAGS, NULL);
>    debug_line_section = get_section (DEBUG_LINE_SECTION,
>                                     SECTION_DEBUG, NULL);
>    debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
> @@ -25656,14 +25587,8 @@ dwarf2out_init (const char *filename ATT
>    debug_frame_section = get_section (DEBUG_FRAME_SECTION,
>                                      SECTION_DEBUG, NULL);
>
> -  ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
>    ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
>                                DEBUG_ABBREV_SECTION_LABEL, 0);
> -  ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
> -  ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
> -                              COLD_TEXT_SECTION_LABEL, 0);
> -  ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
> -
>    ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
>                                DEBUG_INFO_SECTION_LABEL, 0);
>    ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
> @@ -25677,12 +25602,57 @@ dwarf2out_init (const char *filename ATT
>                                ? DEBUG_MACINFO_SECTION_LABEL
>                                : DEBUG_MACRO_SECTION_LABEL, 0);
>    ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL, 0);
> +}
> +
> +/* Set up for Dwarf output at the start of compilation.  */
> +
> +static void
> +dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
> +{
> +  /* This option is currently broken, see (PR53118 and PR46102).  */
> +  if (flag_eliminate_dwarf2_dups
> +      && strstr (lang_hooks.name, "C++"))
> +    {
> +      warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring");
> +      flag_eliminate_dwarf2_dups = 0;
> +    }
> +
> +  /* Allocate the file_table.  */
> +  file_table = hash_table<dwarf_file_hasher>::create_ggc (50);
> +
> +#ifndef DWARF2_LINENO_DEBUGGING_INFO
> +  /* Allocate the decl_die_table.  */
> +  decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
> +
> +  /* Allocate the decl_loc_table.  */
> +  decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
> +
> +  /* Allocate the cached_dw_loc_list_table.  */
> +  cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::create_ggc (10);
> +
> +  /* Allocate the initial hunk of the decl_scope_table.  */
> +  vec_alloc (decl_scope_table, 256);
> +
> +  /* Allocate the initial hunk of the abbrev_die_table.  */
> +  abbrev_die_table = ggc_cleared_vec_alloc<dw_die_ref>
> +    (ABBREV_DIE_TABLE_INCREMENT);
> +  abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT;
> +  /* Zero-th entry is allocated, but unused.  */
> +  abbrev_die_table_in_use = 1;
> +
> +  /* Allocate the dwarf_proc_stack_usage_map.  */
> +  dwarf_proc_stack_usage_map = new hash_map<dw_die_ref, int>;
> +
> +  /* Allocate the pubtypes and pubnames vectors.  */
> +  vec_alloc (pubname_table, 32);
> +  vec_alloc (pubtype_table, 32);
> +
> +  vec_alloc (incomplete_types, 64);
> +
> +  vec_alloc (used_rtx_array, 32);
>
>    if (debug_info_level >= DINFO_LEVEL_VERBOSE)
>      vec_alloc (macinfo_table, 64);
> -
> -  switch_to_section (text_section);
> -  ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
>  #endif
>
>    /* Make sure the line number table for .text always exists.  */
> @@ -25705,6 +25675,17 @@ dwarf2out_init (const char *filename ATT
>  static void
>  dwarf2out_assembly_start (void)
>  {
> +#ifndef DWARF2_LINENO_DEBUGGING_INFO
> +  ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
> +  ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
> +  ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
> +                              COLD_TEXT_SECTION_LABEL, 0);
> +  ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
> +
> +  switch_to_section (text_section);
> +  ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
> +#endif
> +
>    if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
>        && dwarf2out_do_cfi_asm ()
>        && (!(flag_unwind_tables || flag_exceptions)
> @@ -27858,6 +27839,9 @@ dwarf2out_finish (const char *)
>    if (flag_eliminate_dwarf2_dups)
>      break_out_includes (comp_unit_die ());
>
> +  /* Initialize sections and labels used for actual assembler output.  */
> +  init_sections_and_labels ();
> +
>    /* Traverse the DIE's and add sibling attributes to those DIE's that
>       have children.  */
>    add_sibling_attributes (comp_unit_die ());

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Refactor section/label init for early LTO debug
  2016-09-21 13:34 [PATCH] Refactor section/label init for early LTO debug Richard Biener
  2016-09-23 19:37 ` Jason Merrill
@ 2016-09-27 10:23 ` Rainer Orth
  2016-09-27 10:41   ` Richard Biener
  1 sibling, 1 reply; 11+ messages in thread
From: Rainer Orth @ 2016-09-27 10:23 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches, jason

Hi Richard,

> The following patch ports a refactoring of section/label in it from
> the early LTO debug work to trunk.  For early LTO debug we need to
> be able to emit two sets of debug infos into two sets of different
> sections - early LTO into .gnu.debuglto_ prefixed sections and
> regular (early + late) debug for the FAT part of the object.
>
> Thus this preparation splits out the section and label generation
> from dwarf2out_init moving the text section related stuff to 
> dwarf2out_assembly_start and the rest to a new function
> init_sections_and_labels which is now called only before we start
> outputting dwarf (in dwarf2out_finish).  It also removes some
> dwarf_split_debug_info checks from the macro section name defines
> (in the end I'll have up to four variants - regular, regular LTO,
> DWO, DWO LTO).
>
> And it removes an unused function.
>
> Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.  I've
> also bootstrapped with -O2 -g3 to exercise the .debug_macro path.
>
> Ok?
>
> Just noticed that DEBUG_STR_OFFSETS_SECTION needs similar massaging
> for its dwarf_split_debug_info condition - will followup as obvious
> if this one is approved.

this patch introduced many pch assembly comparison failures on Solaris
(both sparc and x86, 32 and 64-bit, /bin/as only), like

FAIL: gcc.dg/pch/common-1.c   -O3 -g  assembly comparison
FAIL: gcc.dg/pch/common-1.c  -O0 -g assembly comparison

gcc.log shows this diff:

<       .long   .Letext0
>       .long

While the .Letext0 label is still in the assembly output, it isn't
referenced inside .debug_line, as can be seen in the diff.

Unlike the gas case, with as HAVE_AS_DWARF2_DEBUG_LINE isn't defined.

	Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Refactor section/label init for early LTO debug
  2016-09-27 10:23 ` Rainer Orth
@ 2016-09-27 10:41   ` Richard Biener
  2016-09-27 10:55     ` Rainer Orth
  2016-09-28  9:51     ` Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations (was: [PATCH] Refactor section/label init for early LTO debug) Thomas Schwinge
  0 siblings, 2 replies; 11+ messages in thread
From: Richard Biener @ 2016-09-27 10:41 UTC (permalink / raw)
  To: Rainer Orth; +Cc: gcc-patches, jason

On Tue, 27 Sep 2016, Rainer Orth wrote:

> Hi Richard,
> 
> > The following patch ports a refactoring of section/label in it from
> > the early LTO debug work to trunk.  For early LTO debug we need to
> > be able to emit two sets of debug infos into two sets of different
> > sections - early LTO into .gnu.debuglto_ prefixed sections and
> > regular (early + late) debug for the FAT part of the object.
> >
> > Thus this preparation splits out the section and label generation
> > from dwarf2out_init moving the text section related stuff to 
> > dwarf2out_assembly_start and the rest to a new function
> > init_sections_and_labels which is now called only before we start
> > outputting dwarf (in dwarf2out_finish).  It also removes some
> > dwarf_split_debug_info checks from the macro section name defines
> > (in the end I'll have up to four variants - regular, regular LTO,
> > DWO, DWO LTO).
> >
> > And it removes an unused function.
> >
> > Bootstrapped on x86_64-unknown-linux-gnu, testing in progress.  I've
> > also bootstrapped with -O2 -g3 to exercise the .debug_macro path.
> >
> > Ok?
> >
> > Just noticed that DEBUG_STR_OFFSETS_SECTION needs similar massaging
> > for its dwarf_split_debug_info condition - will followup as obvious
> > if this one is approved.
> 
> this patch introduced many pch assembly comparison failures on Solaris
> (both sparc and x86, 32 and 64-bit, /bin/as only), like
> 
> FAIL: gcc.dg/pch/common-1.c   -O3 -g  assembly comparison
> FAIL: gcc.dg/pch/common-1.c  -O0 -g assembly comparison
> 
> gcc.log shows this diff:
> 
> <       .long   .Letext0
> >       .long
> 
> While the .Letext0 label is still in the assembly output, it isn't
> referenced inside .debug_line, as can be seen in the diff.

Can you check if moving

static void
dwarf2out_assembly_start (void)
{
#ifndef DWARF2_LINENO_DEBUGGING_INFO
  ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
  ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
  ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
                               COLD_TEXT_SECTION_LABEL, 0);
  ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);

  switch_to_section (text_section);
  ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
#endif

back to dwarf2out_init helps?  Ah!  Does

Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c     (revision 240521)
+++ gcc/dwarf2out.c     (working copy)
@@ -25657,14 +25687,6 @@ dwarf2out_init (const char *filename ATT
     vec_alloc (macinfo_table, 64);
 #endif
 
-  /* Make sure the line number table for .text always exists.  */
-  text_section_line_info = new_line_info_table ();
-  text_section_line_info->end_label = text_end_label;
-
-#ifdef DWARF2_LINENO_DEBUGGING_INFO
-  cur_line_info_table = text_section_line_info;
-#endif
-
   /* If front-ends already registered a main translation unit but we were 
not
      ready to perform the association, do this now.  */
   if (main_translation_unit != NULL_TREE)
@@ -25688,6 +25710,14 @@ dwarf2out_assembly_start (void)
   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
 #endif
 
+  /* Make sure the line number table for .text always exists.  */
+  text_section_line_info = new_line_info_table ();
+  text_section_line_info->end_label = text_end_label;
+
+#ifdef DWARF2_LINENO_DEBUGGING_INFO
+  cur_line_info_table = text_section_line_info;
+#endif
+
   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
       && dwarf2out_do_cfi_asm ()
       && (!(flag_unwind_tables || flag_exceptions)


fix it?  Ok if it passes testing for you.

Thanks,
Richard.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Refactor section/label init for early LTO debug
  2016-09-27 10:41   ` Richard Biener
@ 2016-09-27 10:55     ` Rainer Orth
  2016-09-28  8:04       ` Richard Biener
  2016-09-28  9:51     ` Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations (was: [PATCH] Refactor section/label init for early LTO debug) Thomas Schwinge
  1 sibling, 1 reply; 11+ messages in thread
From: Rainer Orth @ 2016-09-27 10:55 UTC (permalink / raw)
  To: Richard Biener; +Cc: gcc-patches, jason

Hi Richard,

>> this patch introduced many pch assembly comparison failures on Solaris
>> (both sparc and x86, 32 and 64-bit, /bin/as only), like
>> 
>> FAIL: gcc.dg/pch/common-1.c   -O3 -g  assembly comparison
>> FAIL: gcc.dg/pch/common-1.c  -O0 -g assembly comparison
>> 
>> gcc.log shows this diff:
>> 
>> <       .long   .Letext0
>> >       .long
>> 
>> While the .Letext0 label is still in the assembly output, it isn't
>> referenced inside .debug_line, as can be seen in the diff.
>
> Can you check if moving
>
> static void
> dwarf2out_assembly_start (void)
> {
> #ifndef DWARF2_LINENO_DEBUGGING_INFO
>   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
>   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
>   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
>                                COLD_TEXT_SECTION_LABEL, 0);
>   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
>
>   switch_to_section (text_section);
>   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
> #endif
>
> back to dwarf2out_init helps?  Ah!  Does
>
> Index: gcc/dwarf2out.c
> ===================================================================
> --- gcc/dwarf2out.c     (revision 240521)
> +++ gcc/dwarf2out.c     (working copy)
> @@ -25657,14 +25687,6 @@ dwarf2out_init (const char *filename ATT
>      vec_alloc (macinfo_table, 64);
>  #endif
>  
> -  /* Make sure the line number table for .text always exists.  */
> -  text_section_line_info = new_line_info_table ();
> -  text_section_line_info->end_label = text_end_label;
> -
> -#ifdef DWARF2_LINENO_DEBUGGING_INFO
> -  cur_line_info_table = text_section_line_info;
> -#endif
> -
>    /* If front-ends already registered a main translation unit but we were 
> not
>       ready to perform the association, do this now.  */
>    if (main_translation_unit != NULL_TREE)
> @@ -25688,6 +25710,14 @@ dwarf2out_assembly_start (void)
>    ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
>  #endif
>  
> +  /* Make sure the line number table for .text always exists.  */
> +  text_section_line_info = new_line_info_table ();
> +  text_section_line_info->end_label = text_end_label;
> +
> +#ifdef DWARF2_LINENO_DEBUGGING_INFO
> +  cur_line_info_table = text_section_line_info;
> +#endif
> +
>    if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
>        && dwarf2out_do_cfi_asm ()
>        && (!(flag_unwind_tables || flag_exceptions)
>
>
> fix it?  Ok if it passes testing for you.

testing on a single testcase worked fine.  I'll just run a full
bootstrap to make sure everything is fine.

Thanks.
        Rainer

-- 
-----------------------------------------------------------------------------
Rainer Orth, Center for Biotechnology, Bielefeld University

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Refactor section/label init for early LTO debug
  2016-09-27 10:55     ` Rainer Orth
@ 2016-09-28  8:04       ` Richard Biener
  2016-09-28  8:37         ` Richard Biener
  0 siblings, 1 reply; 11+ messages in thread
From: Richard Biener @ 2016-09-28  8:04 UTC (permalink / raw)
  To: Rainer Orth; +Cc: gcc-patches, jason

On Tue, 27 Sep 2016, Rainer Orth wrote:

> Hi Richard,
> 
> >> this patch introduced many pch assembly comparison failures on Solaris
> >> (both sparc and x86, 32 and 64-bit, /bin/as only), like
> >> 
> >> FAIL: gcc.dg/pch/common-1.c   -O3 -g  assembly comparison
> >> FAIL: gcc.dg/pch/common-1.c  -O0 -g assembly comparison
> >> 
> >> gcc.log shows this diff:
> >> 
> >> <       .long   .Letext0
> >> >       .long
> >> 
> >> While the .Letext0 label is still in the assembly output, it isn't
> >> referenced inside .debug_line, as can be seen in the diff.
> >
> > Can you check if moving
> >
> > static void
> > dwarf2out_assembly_start (void)
> > {
> > #ifndef DWARF2_LINENO_DEBUGGING_INFO
> >   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
> >   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
> >   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
> >                                COLD_TEXT_SECTION_LABEL, 0);
> >   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
> >
> >   switch_to_section (text_section);
> >   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
> > #endif
> >
> > back to dwarf2out_init helps?  Ah!  Does
> >
> > Index: gcc/dwarf2out.c
> > ===================================================================
> > --- gcc/dwarf2out.c     (revision 240521)
> > +++ gcc/dwarf2out.c     (working copy)
> > @@ -25657,14 +25687,6 @@ dwarf2out_init (const char *filename ATT
> >      vec_alloc (macinfo_table, 64);
> >  #endif
> >  
> > -  /* Make sure the line number table for .text always exists.  */
> > -  text_section_line_info = new_line_info_table ();
> > -  text_section_line_info->end_label = text_end_label;
> > -
> > -#ifdef DWARF2_LINENO_DEBUGGING_INFO
> > -  cur_line_info_table = text_section_line_info;
> > -#endif
> > -
> >    /* If front-ends already registered a main translation unit but we were 
> > not
> >       ready to perform the association, do this now.  */
> >    if (main_translation_unit != NULL_TREE)
> > @@ -25688,6 +25710,14 @@ dwarf2out_assembly_start (void)
> >    ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
> >  #endif
> >  
> > +  /* Make sure the line number table for .text always exists.  */
> > +  text_section_line_info = new_line_info_table ();
> > +  text_section_line_info->end_label = text_end_label;
> > +
> > +#ifdef DWARF2_LINENO_DEBUGGING_INFO
> > +  cur_line_info_table = text_section_line_info;
> > +#endif
> > +
> >    if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
> >        && dwarf2out_do_cfi_asm ()
> >        && (!(flag_unwind_tables || flag_exceptions)
> >
> >
> > fix it?  Ok if it passes testing for you.
> 
> testing on a single testcase worked fine.  I'll just run a full
> bootstrap to make sure everything is fine.

Meanwhile I bootstrapped and tested it on x86_64-unknown-linux-gnu and
applied it to trunk.

Sorry for the breakage.

Richard.

2016-09-28  Richard Biener  <rguenther@suse.de>

	* dwarf2out.c (dwarf2out_init): Move text_section_line_info init ...
	(dwarf2out_assembly_start): ... here.

diff -u gcc/dwarf2out.c gcc/dwarf2out.c
--- gcc/dwarf2out.c	(working copy)
+++ gcc/dwarf2out.c	(working copy)
@@ -25684,14 +25687,6 @@
     vec_alloc (macinfo_table, 64);
 #endif
 
-  /* Make sure the line number table for .text always exists.  */
-  text_section_line_info = new_line_info_table ();
-  text_section_line_info->end_label = text_end_label;
-
-#ifdef DWARF2_LINENO_DEBUGGING_INFO
-  cur_line_info_table = text_section_line_info;
-#endif
-
   /* If front-ends already registered a main translation unit but we were not
      ready to perform the association, do this now.  */
   if (main_translation_unit != NULL_TREE)
@@ -25715,6 +25710,14 @@
   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
 #endif
 
+  /* Make sure the line number table for .text always exists.  */
+  text_section_line_info = new_line_info_table ();
+  text_section_line_info->end_label = text_end_label;
+
+#ifdef DWARF2_LINENO_DEBUGGING_INFO
+  cur_line_info_table = text_section_line_info;
+#endif
+
   if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
       && dwarf2out_do_cfi_asm ()
       && (!(flag_unwind_tables || flag_exceptions)

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Refactor section/label init for early LTO debug
  2016-09-28  8:04       ` Richard Biener
@ 2016-09-28  8:37         ` Richard Biener
  0 siblings, 0 replies; 11+ messages in thread
From: Richard Biener @ 2016-09-28  8:37 UTC (permalink / raw)
  To: Rainer Orth; +Cc: gcc-patches, jason

On Wed, 28 Sep 2016, Richard Biener wrote:

> On Tue, 27 Sep 2016, Rainer Orth wrote:
> 
> > Hi Richard,
> > 
> > >> this patch introduced many pch assembly comparison failures on Solaris
> > >> (both sparc and x86, 32 and 64-bit, /bin/as only), like
> > >> 
> > >> FAIL: gcc.dg/pch/common-1.c   -O3 -g  assembly comparison
> > >> FAIL: gcc.dg/pch/common-1.c  -O0 -g assembly comparison
> > >> 
> > >> gcc.log shows this diff:
> > >> 
> > >> <       .long   .Letext0
> > >> >       .long
> > >> 
> > >> While the .Letext0 label is still in the assembly output, it isn't
> > >> referenced inside .debug_line, as can be seen in the diff.
> > >
> > > Can you check if moving
> > >
> > > static void
> > > dwarf2out_assembly_start (void)
> > > {
> > > #ifndef DWARF2_LINENO_DEBUGGING_INFO
> > >   ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0);
> > >   ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
> > >   ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label,
> > >                                COLD_TEXT_SECTION_LABEL, 0);
> > >   ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0);
> > >
> > >   switch_to_section (text_section);
> > >   ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
> > > #endif
> > >
> > > back to dwarf2out_init helps?  Ah!  Does
> > >
> > > Index: gcc/dwarf2out.c
> > > ===================================================================
> > > --- gcc/dwarf2out.c     (revision 240521)
> > > +++ gcc/dwarf2out.c     (working copy)
> > > @@ -25657,14 +25687,6 @@ dwarf2out_init (const char *filename ATT
> > >      vec_alloc (macinfo_table, 64);
> > >  #endif
> > >  
> > > -  /* Make sure the line number table for .text always exists.  */
> > > -  text_section_line_info = new_line_info_table ();
> > > -  text_section_line_info->end_label = text_end_label;
> > > -
> > > -#ifdef DWARF2_LINENO_DEBUGGING_INFO
> > > -  cur_line_info_table = text_section_line_info;
> > > -#endif
> > > -
> > >    /* If front-ends already registered a main translation unit but we were 
> > > not
> > >       ready to perform the association, do this now.  */
> > >    if (main_translation_unit != NULL_TREE)
> > > @@ -25688,6 +25710,14 @@ dwarf2out_assembly_start (void)
> > >    ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
> > >  #endif
> > >  
> > > +  /* Make sure the line number table for .text always exists.  */
> > > +  text_section_line_info = new_line_info_table ();
> > > +  text_section_line_info->end_label = text_end_label;
> > > +
> > > +#ifdef DWARF2_LINENO_DEBUGGING_INFO
> > > +  cur_line_info_table = text_section_line_info;
> > > +#endif
> > > +
> > >    if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
> > >        && dwarf2out_do_cfi_asm ()
> > >        && (!(flag_unwind_tables || flag_exceptions)
> > >
> > >
> > > fix it?  Ok if it passes testing for you.
> > 
> > testing on a single testcase worked fine.  I'll just run a full
> > bootstrap to make sure everything is fine.
> 
> Meanwhile I bootstrapped and tested it on x86_64-unknown-linux-gnu and
> applied it to trunk.

Ah, you already did.

Thanks,
Richard.

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations (was: [PATCH] Refactor section/label init for early LTO debug)
  2016-09-27 10:41   ` Richard Biener
  2016-09-27 10:55     ` Rainer Orth
@ 2016-09-28  9:51     ` Thomas Schwinge
  2016-09-28 10:00       ` Richard Biener
  1 sibling, 1 reply; 11+ messages in thread
From: Thomas Schwinge @ 2016-09-28  9:51 UTC (permalink / raw)
  To: Richard Biener, Rainer Orth, Bernd Schmidt; +Cc: gcc-patches, jason

[-- Attachment #1: Type: text/plain, Size: 2496 bytes --]

Hi!

On Tue, 27 Sep 2016 12:34:46 +0200 (CEST), Richard Biener <rguenther@suse.de> wrote:
> --- gcc/dwarf2out.c     (revision 240521)
> +++ gcc/dwarf2out.c     (working copy)
> @@ -25657,14 +25687,6 @@ dwarf2out_init (const char *filename ATT
>      vec_alloc (macinfo_table, 64);
>  #endif
>  
> -  /* Make sure the line number table for .text always exists.  */
> -  text_section_line_info = new_line_info_table ();
> -  text_section_line_info->end_label = text_end_label;
> -
> -#ifdef DWARF2_LINENO_DEBUGGING_INFO
> -  cur_line_info_table = text_section_line_info;
> -#endif
> -
>    /* If front-ends already registered a main translation unit but we were 
> not
>       ready to perform the association, do this now.  */
>    if (main_translation_unit != NULL_TREE)
> @@ -25688,6 +25710,14 @@ dwarf2out_assembly_start (void)
>    ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
>  #endif
>  
> +  /* Make sure the line number table for .text always exists.  */
> +  text_section_line_info = new_line_info_table ();
> +  text_section_line_info->end_label = text_end_label;
> +
> +#ifdef DWARF2_LINENO_DEBUGGING_INFO
> +  cur_line_info_table = text_section_line_info;
> +#endif
> +
>    if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
>        && dwarf2out_do_cfi_asm ()
>        && (!(flag_unwind_tables || flag_exceptions)

(This got committed in r240545.)  For DWARF2_LINENO_DEBUGGING_INFO
configurations (that is, nvptx; Bernd CCed, who originally authored the
DWARF2_LINENO_DEBUGGING_INFO support), this breaks things because of
uninitialized text_section_line_info/cur_line_info_table.  OK to fix as
follows?

commit e745307ac5a90e999133dfeeee21139526230e81
Author: Thomas Schwinge <thomas@codesourcery.com>
Date:   Wed Sep 28 10:55:23 2016 +0200

    Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations
    
    	gcc/
    	* dwarf2out.c (dwarf2_lineno_debug_hooks): Use
    	dwarf2out_assembly_start.
---
 gcc/dwarf2out.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git gcc/dwarf2out.c gcc/dwarf2out.c
index 51cab42..8c18c4c 100644
--- gcc/dwarf2out.c
+++ gcc/dwarf2out.c
@@ -2539,7 +2539,7 @@ const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
   dwarf2out_init,
   debug_nothing_charstar,
   debug_nothing_charstar,
-  debug_nothing_void,
+  dwarf2out_assembly_start,
   debug_nothing_int_charstar,
   debug_nothing_int_charstar,
   debug_nothing_int_charstar,


Grüße
 Thomas

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 472 bytes --]

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations (was: [PATCH] Refactor section/label init for early LTO debug)
  2016-09-28  9:51     ` Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations (was: [PATCH] Refactor section/label init for early LTO debug) Thomas Schwinge
@ 2016-09-28 10:00       ` Richard Biener
  2016-10-12 13:15         ` Thomas Schwinge
  0 siblings, 1 reply; 11+ messages in thread
From: Richard Biener @ 2016-09-28 10:00 UTC (permalink / raw)
  To: Thomas Schwinge; +Cc: Rainer Orth, Bernd Schmidt, gcc-patches, jason

On Wed, 28 Sep 2016, Thomas Schwinge wrote:

> Hi!
> 
> On Tue, 27 Sep 2016 12:34:46 +0200 (CEST), Richard Biener <rguenther@suse.de> wrote:
> > --- gcc/dwarf2out.c     (revision 240521)
> > +++ gcc/dwarf2out.c     (working copy)
> > @@ -25657,14 +25687,6 @@ dwarf2out_init (const char *filename ATT
> >      vec_alloc (macinfo_table, 64);
> >  #endif
> >  
> > -  /* Make sure the line number table for .text always exists.  */
> > -  text_section_line_info = new_line_info_table ();
> > -  text_section_line_info->end_label = text_end_label;
> > -
> > -#ifdef DWARF2_LINENO_DEBUGGING_INFO
> > -  cur_line_info_table = text_section_line_info;
> > -#endif
> > -
> >    /* If front-ends already registered a main translation unit but we were 
> > not
> >       ready to perform the association, do this now.  */
> >    if (main_translation_unit != NULL_TREE)
> > @@ -25688,6 +25710,14 @@ dwarf2out_assembly_start (void)
> >    ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
> >  #endif
> >  
> > +  /* Make sure the line number table for .text always exists.  */
> > +  text_section_line_info = new_line_info_table ();
> > +  text_section_line_info->end_label = text_end_label;
> > +
> > +#ifdef DWARF2_LINENO_DEBUGGING_INFO
> > +  cur_line_info_table = text_section_line_info;
> > +#endif
> > +
> >    if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
> >        && dwarf2out_do_cfi_asm ()
> >        && (!(flag_unwind_tables || flag_exceptions)
> 
> (This got committed in r240545.)  For DWARF2_LINENO_DEBUGGING_INFO
> configurations (that is, nvptx; Bernd CCed, who originally authored the
> DWARF2_LINENO_DEBUGGING_INFO support), this breaks things because of
> uninitialized text_section_line_info/cur_line_info_table.  OK to fix as
> follows?

Ok.

Richard.

> commit e745307ac5a90e999133dfeeee21139526230e81
> Author: Thomas Schwinge <thomas@codesourcery.com>
> Date:   Wed Sep 28 10:55:23 2016 +0200
> 
>     Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations
>     
>     	gcc/
>     	* dwarf2out.c (dwarf2_lineno_debug_hooks): Use
>     	dwarf2out_assembly_start.
> ---
>  gcc/dwarf2out.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git gcc/dwarf2out.c gcc/dwarf2out.c
> index 51cab42..8c18c4c 100644
> --- gcc/dwarf2out.c
> +++ gcc/dwarf2out.c
> @@ -2539,7 +2539,7 @@ const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
>    dwarf2out_init,
>    debug_nothing_charstar,
>    debug_nothing_charstar,
> -  debug_nothing_void,
> +  dwarf2out_assembly_start,
>    debug_nothing_int_charstar,
>    debug_nothing_int_charstar,
>    debug_nothing_int_charstar,
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations (was: [PATCH] Refactor section/label init for early LTO debug)
  2016-09-28 10:00       ` Richard Biener
@ 2016-10-12 13:15         ` Thomas Schwinge
  0 siblings, 0 replies; 11+ messages in thread
From: Thomas Schwinge @ 2016-10-12 13:15 UTC (permalink / raw)
  To: Richard Biener, gcc-patches; +Cc: Rainer Orth, Bernd Schmidt, jason

Hi!

On Wed, 28 Sep 2016 11:28:16 +0200 (CEST), Richard Biener <rguenther@suse.de> wrote:
> On Wed, 28 Sep 2016, Thomas Schwinge wrote:
> > ([...] got committed in r240545.)  For DWARF2_LINENO_DEBUGGING_INFO
> > configurations (that is, nvptx; Bernd CCed, who originally authored the
> > DWARF2_LINENO_DEBUGGING_INFO support), this breaks things because of
> > uninitialized text_section_line_info/cur_line_info_table.  OK to fix as
> > follows?
> 
> Ok.

Without changes committed to trunk in r241045:

commit 84cb1b769377413a1b7cef73fc4f6022e046b0a9
Author: tschwinge <tschwinge@138bc75d-0d04-0410-961f-82ee72b054a4>
Date:   Wed Oct 12 13:09:26 2016 +0000

    Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations
    
    	gcc/
    	* dwarf2out.c (dwarf2_lineno_debug_hooks): Use
    	dwarf2out_assembly_start.
    
    git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@241045 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/ChangeLog   | 3 +++
 gcc/dwarf2out.c | 2 +-
 2 files changed, 4 insertions(+), 1 deletion(-)

diff --git gcc/ChangeLog gcc/ChangeLog
index d6880d9..c66b7a7 100644
--- gcc/ChangeLog
+++ gcc/ChangeLog
@@ -1,5 +1,8 @@
 2016-10-12  Thomas Schwinge  <thomas@codesourcery.com>
 
+	* dwarf2out.c (dwarf2_lineno_debug_hooks): Use
+	dwarf2out_assembly_start.
+
 	* Makefile.in (SELFTEST_FLAGS): Add -nostdinc.
 
 	* Makefile.in (SELFTEST_FLAGS): New variable.
diff --git gcc/dwarf2out.c gcc/dwarf2out.c
index b5787ef..98deeef 100644
--- gcc/dwarf2out.c
+++ gcc/dwarf2out.c
@@ -2540,7 +2540,7 @@ const struct gcc_debug_hooks dwarf2_lineno_debug_hooks =
   dwarf2out_init,
   debug_nothing_charstar,
   debug_nothing_charstar,
-  debug_nothing_void,
+  dwarf2out_assembly_start,
   debug_nothing_int_charstar,
   debug_nothing_int_charstar,
   debug_nothing_int_charstar,


Grüße
 Thomas

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH] Refactor section/label init for early LTO debug
@ 2016-09-27 10:24 Dominique d'Humières
  0 siblings, 0 replies; 11+ messages in thread
From: Dominique d'Humières @ 2016-09-27 10:24 UTC (permalink / raw)
  To: Rainer Orth; +Cc: Richard Biener, gcc-patches

> this patch introduced many pch assembly comparison failures on Solaris
> (both sparc and x86, 32 and 64-bit, /bin/as only), like
Something on darwin.

TIA

Dominique

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2016-10-12 13:15 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-21 13:34 [PATCH] Refactor section/label init for early LTO debug Richard Biener
2016-09-23 19:37 ` Jason Merrill
2016-09-27 10:23 ` Rainer Orth
2016-09-27 10:41   ` Richard Biener
2016-09-27 10:55     ` Rainer Orth
2016-09-28  8:04       ` Richard Biener
2016-09-28  8:37         ` Richard Biener
2016-09-28  9:51     ` Un-break dwarf2out for DWARF2_LINENO_DEBUGGING_INFO configurations (was: [PATCH] Refactor section/label init for early LTO debug) Thomas Schwinge
2016-09-28 10:00       ` Richard Biener
2016-10-12 13:15         ` Thomas Schwinge
2016-09-27 10:24 [PATCH] Refactor section/label init for early LTO debug Dominique d'Humières

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).