public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] Fix -fdebug-types-section with -flto
@ 2019-02-27 10:35 Richard Biener
  0 siblings, 0 replies; only message in thread
From: Richard Biener @ 2019-02-27 10:35 UTC (permalink / raw)
  To: gcc-patches


This makes -fdebug-types-section actually work with -flto, causing
type units to be created and referred to by early debug.

I've lightly tested the result with hello-world style examples
where before this patch gdb wasn't able to see any types
(there were signature refs but the type units were missing) and
after the patch things work as expected.

The combination with -gsplit-dwarf is still broken, but that's
a different bug (-gsplit-dwarf plus -flto is broken).

Bootstrap & regtest running on x86_64-unknown-linux-gnu.

Richard.

2019-02-27  Richard Biener  <rguenther@suse.de>

	PR debug/88878
	* dwarf2out.c (output_comdat_type_unit): Add early_lto_debug
	parameter, prefix section name with .gnu.debuglto_ if true.
	(dwarf2out_finish): Pass false to output_comdat_type_unit.
	(dwarf2out_early_finish): Pass true to output_comdat_type_unit.
	 
Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c	(revision 269242)
+++ gcc/dwarf2out.c	(working copy)
@@ -3746,7 +3746,7 @@ static void output_die_abbrevs (unsigned
 static void output_die (dw_die_ref);
 static void output_compilation_unit_header (enum dwarf_unit_type);
 static void output_comp_unit (dw_die_ref, int, const unsigned char *);
-static void output_comdat_type_unit (comdat_type_node *);
+static void output_comdat_type_unit (comdat_type_node *, bool);
 static const char *dwarf2_name (tree, int);
 static void add_pubname (tree, dw_die_ref);
 static void add_enumerator_pubname (const char *, dw_die_ref);
@@ -11225,7 +11230,7 @@ output_skeleton_debug_sections (dw_die_r
 /* Output a comdat type unit DIE and its children.  */
 
 static void
-output_comdat_type_unit (comdat_type_node *node)
+output_comdat_type_unit (comdat_type_node *node, bool early_lto_debug)
 {
   const char *secname;
   char *tmp;
@@ -11252,14 +11257,16 @@ output_comdat_type_unit (comdat_type_nod
   if (dwarf_version >= 5)
     {
       if (!dwarf_split_debug_info)
-	secname = ".debug_info";
+	secname = early_lto_debug ? DEBUG_LTO_INFO_SECTION : DEBUG_INFO_SECTION;
       else
-	secname = ".debug_info.dwo";
+	secname = (early_lto_debug
+		   ? DEBUG_LTO_DWO_INFO_SECTION : DEBUG_DWO_INFO_SECTION);
     }
   else if (!dwarf_split_debug_info)
-    secname = ".debug_types";
+    secname = early_lto_debug ? ".gnu.debuglto_.debug_types" : ".debug_types";
   else
-    secname = ".debug_types.dwo";
+    secname = (early_lto_debug
+	       ? ".gnu.debuglto_.debug_types.dwo" : ".debug_types.dwo");
 
   tmp = XALLOCAVEC (char, 4 + DWARF_TYPE_SIGNATURE_SIZE * 2);
   sprintf (tmp, dwarf_version >= 5 ? "wi." : "wt.");
@@ -31498,7 +31505,7 @@ dwarf2out_finish (const char *filename)
                          ? dl_section_ref
                          : debug_skeleton_line_section_label));
 
-      output_comdat_type_unit (ctnode);
+      output_comdat_type_unit (ctnode, false);
       *slot = ctnode;
     }
 
@@ -32189,7 +32196,7 @@ dwarf2out_early_finish (const char *file
                          ? debug_line_section_label
                          : debug_skeleton_line_section_label));
 
-      output_comdat_type_unit (ctnode);
+      output_comdat_type_unit (ctnode, true);
       *slot = ctnode;
     }
 

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2019-02-27 10:11 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-02-27 10:35 [PATCH] Fix -fdebug-types-section with -flto Richard Biener

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).