Commit 3447025f by Richard Biener Committed by Richard Biener

re PR debug/86456 (Segfault in switch_to_section at gcc/varasm.c:7353 since r259317)

2018-07-17  Richard Biener  <rguenther@suse.de>

	PR lto/86456
	* dwarf2out.c (init_sections_and_labels): Always generate
	a debug_line_str_section for early LTO debug.
	(dwarf2out_finish): Reset debug_line_str_hash output early.
	Bump counter for extra dwarf5 .debug_loc labels to not conflict
	with fat LTO part.
	(dwarf2out_early_finish): Output debug_line_str.

	* g++.dg/debug/dwarf2/pr86456.C: New testcase.

From-SVN: r262819
parent 5211d26a
2018-07-17 Richard Biener <rguenther@suse.de>
PR lto/86456
* dwarf2out.c (init_sections_and_labels): Always generate
a debug_line_str_section for early LTO debug.
(dwarf2out_finish): Reset debug_line_str_hash output early.
Bump counter for extra dwarf5 .debug_loc labels to not conflict
with fat LTO part.
(dwarf2out_early_finish): Output debug_line_str.
2018-07-17 Robin Dapp <rdapp@linux.ibm.com> 2018-07-17 Robin Dapp <rdapp@linux.ibm.com>
* config/s390/s390.c (preferred_la_operand_p): Do not use LA with * config/s390/s390.c (preferred_la_operand_p): Do not use LA with
......
...@@ -28488,7 +28488,7 @@ init_sections_and_labels (bool early_lto_debug) ...@@ -28488,7 +28488,7 @@ init_sections_and_labels (bool early_lto_debug)
debug_str_section = get_section (DEBUG_LTO_STR_SECTION, debug_str_section = get_section (DEBUG_LTO_STR_SECTION,
DEBUG_STR_SECTION_FLAGS DEBUG_STR_SECTION_FLAGS
| SECTION_EXCLUDE, NULL); | SECTION_EXCLUDE, NULL);
if (!dwarf_split_debug_info && !output_asm_line_debug_info ()) if (!dwarf_split_debug_info)
debug_line_str_section debug_line_str_section
= get_section (DEBUG_LTO_LINE_STR_SECTION, = get_section (DEBUG_LTO_LINE_STR_SECTION,
DEBUG_STR_SECTION_FLAGS | SECTION_EXCLUDE, NULL); DEBUG_STR_SECTION_FLAGS | SECTION_EXCLUDE, NULL);
...@@ -31149,6 +31149,11 @@ dwarf2out_finish (const char *) ...@@ -31149,6 +31149,11 @@ dwarf2out_finish (const char *)
/* Remove indirect string decisions. */ /* Remove indirect string decisions. */
debug_str_hash->traverse<void *, reset_indirect_string> (NULL); debug_str_hash->traverse<void *, reset_indirect_string> (NULL);
if (debug_line_str_hash)
{
debug_line_str_hash->traverse<void *, reset_indirect_string> (NULL);
debug_line_str_hash = NULL;
}
} }
#if ENABLE_ASSERT_CHECKING #if ENABLE_ASSERT_CHECKING
...@@ -31433,8 +31438,8 @@ dwarf2out_finish (const char *) ...@@ -31433,8 +31438,8 @@ dwarf2out_finish (const char *)
switch_to_section (debug_loc_section); switch_to_section (debug_loc_section);
if (dwarf_version >= 5) if (dwarf_version >= 5)
{ {
ASM_GENERATE_INTERNAL_LABEL (l1, DEBUG_LOC_SECTION_LABEL, 1); ASM_GENERATE_INTERNAL_LABEL (l1, DEBUG_LOC_SECTION_LABEL, 2);
ASM_GENERATE_INTERNAL_LABEL (l2, DEBUG_LOC_SECTION_LABEL, 2); ASM_GENERATE_INTERNAL_LABEL (l2, DEBUG_LOC_SECTION_LABEL, 3);
if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4) if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
dw2_asm_output_data (4, 0xffffffff, dw2_asm_output_data (4, 0xffffffff,
"Initial length escape value indicating " "Initial length escape value indicating "
...@@ -32053,6 +32058,13 @@ dwarf2out_early_finish (const char *filename) ...@@ -32053,6 +32058,13 @@ dwarf2out_early_finish (const char *filename)
/* If we emitted any indirect strings, output the string table too. */ /* If we emitted any indirect strings, output the string table too. */
if (debug_str_hash || skeleton_debug_str_hash) if (debug_str_hash || skeleton_debug_str_hash)
output_indirect_strings (); output_indirect_strings ();
if (debug_line_str_hash)
{
switch_to_section (debug_line_str_section);
const enum dwarf_form form = DW_FORM_line_strp;
debug_line_str_hash->traverse<enum dwarf_form,
output_indirect_string> (form);
}
/* Switch back to the text section. */ /* Switch back to the text section. */
switch_to_section (text_section); switch_to_section (text_section);
......
2018-07-17 Richard Biener <rguenther@suse.de>
PR lto/86456
* g++.dg/debug/dwarf2/pr86456.C: New testcase.
2018-07-17 Robin Dapp <rdapp@linux.ibm.com> 2018-07-17 Robin Dapp <rdapp@linux.ibm.com>
* gcc.target/s390/function-align1.c: New test. * gcc.target/s390/function-align1.c: New test.
......
// { dg-do compile }
// { dg-require-effective-target lto }
// { dg-options "-g -gdwarf-5 -flto -ffat-lto-objects" }
int a;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment