This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Disable -gsplit-dwarf for all LTO debug
- From: Richard Biener <rguenther at suse dot de>
- To: gcc-patches at gcc dot gnu dot org
- Cc: Jakub Jelinek <jakub at redhat dot com>
- Date: Thu, 12 Apr 2018 13:35:46 +0200 (CEST)
- Subject: [PATCH] Disable -gsplit-dwarf for all LTO debug
The following disables split-dwarf for the LTO part of the early debug
(keeping it for the fat part) and makes sure the driver doesn't
see -gsplit-dwarf in effect.
That works for all but the compile stage and slim objects
(the default) which then ends up generating an empty .dwo file.
I'm not sure where to prune for this case given that
-fno-fat-lto-objects seems to be just ignored if it isn't supported.
Note that we need the dwarf2out.c part as otherwise the late
references cannot be resolved since the debug is copied from .o to .dwo
files early.
Opinions?
Thanks,
Richard.
2018-04-12 Richard Biener <rguenther@suse.de>
* lto-wrapper.c (run_gcc): Add -gno-split-dwarf to cancel
any such option from compile or link time in a way visible
to the driver.
* dwarf2out.c (add_top_level_skeleton_die_attrs): Avoid adding
DW_AT_GNU_pubnames twice.
(dwarf2out_early_finish): Unconditionally call add_AT_pubnames.
Disable dwarf_split_debug_info around the early LTO DWARF emission
and remove then dead code.
Index: gcc/lto-wrapper.c
===================================================================
--- gcc/lto-wrapper.c (revision 259337)
+++ gcc/lto-wrapper.c (working copy)
@@ -1123,6 +1123,7 @@ run_gcc (unsigned argc, char *argv[])
append_compiler_options (&argv_obstack, fdecoded_options,
fdecoded_options_count);
append_linker_options (&argv_obstack, decoded_options, decoded_options_count);
+ obstack_ptr_grow (&argv_obstack, "-gno-split-dwarf");
/* Scan linker driver arguments for things that are of relevance to us. */
for (j = 1; j < decoded_options_count; ++j)
Index: gcc/dwarf2out.c
===================================================================
--- gcc/dwarf2out.c (revision 259337)
+++ gcc/dwarf2out.c (working copy)
@@ -11105,7 +11105,8 @@ add_top_level_skeleton_die_attrs (dw_die
add_skeleton_AT_string (die, dwarf_AT (DW_AT_dwo_name), dwo_file_name);
if (comp_dir != NULL)
add_skeleton_AT_string (die, DW_AT_comp_dir, comp_dir);
- add_AT_pubnames (die);
+ if (!get_AT (die, DW_AT_GNU_pubnames))
+ add_AT_pubnames (die);
add_AT_lineptr (die, DW_AT_GNU_addr_base, debug_addr_section_label);
}
@@ -31811,11 +31812,8 @@ dwarf2out_early_finish (const char *file
note_variable_value (node->die);
/* The AT_pubnames attribute needs to go in all skeleton dies, including
- both the main_cu and all skeleton TUs. Making this call unconditional
- would end up either adding a second copy of the AT_pubnames attribute, or
- requiring a special case in add_top_level_skeleton_die_attrs. */
- if (!dwarf_split_debug_info)
- add_AT_pubnames (comp_unit_die ());
+ both the main_cu and all skeleton TUs. */
+ add_AT_pubnames (comp_unit_die ());
/* The early debug phase is now finished. */
early_dwarf_finished = true;
@@ -31824,6 +31822,11 @@ dwarf2out_early_finish (const char *file
if (!flag_generate_lto && !flag_generate_offload)
return;
+ /* For the early LTO DWARF we do not want split DWARF because it really
+ doesn't make much sense. */
+ int saved_dwarf_split_debug_info = dwarf_split_debug_info;
+ dwarf_split_debug_info = 0;
+
/* Now as we are going to output for LTO initialize sections and labels
to the LTO variants. We don't need a random-seed postfix as other
LTO sections as linking the LTO debug sections into one in a partial
@@ -31858,12 +31861,6 @@ dwarf2out_early_finish (const char *file
save_macinfo_strings ();
- if (dwarf_split_debug_info)
- {
- unsigned int index = 0;
- debug_str_hash->traverse_noresize<unsigned int *, index_string> (&index);
- }
-
/* Output all of the compilation units. We put the main one last so that
the offsets are available to output_pubnames. */
for (limbo_die_node *node = limbo_die_list; node; node = node->next)
@@ -31884,9 +31881,7 @@ dwarf2out_early_finish (const char *file
attributes. */
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
- : debug_skeleton_line_section_label));
+ debug_line_section_label);
output_comdat_type_unit (ctnode);
*slot = ctnode;
@@ -31939,6 +31934,8 @@ dwarf2out_early_finish (const char *file
/* Switch back to the text section. */
switch_to_section (text_section);
+
+ dwarf_split_debug_info = saved_dwarf_split_debug_info;
}
/* Reset all state within dwarf2out.c so that we can rerun the compiler