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
This commit is contained in:
Richard Biener 2018-07-17 12:26:21 +00:00 committed by Richard Biener
parent 5211d26a26
commit 3447025f2f
4 changed files with 35 additions and 3 deletions

View file

@ -1,3 +1,13 @@
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>
* config/s390/s390.c (preferred_la_operand_p): Do not use LA with

View file

@ -28488,7 +28488,7 @@ init_sections_and_labels (bool early_lto_debug)
debug_str_section = get_section (DEBUG_LTO_STR_SECTION,
DEBUG_STR_SECTION_FLAGS
| SECTION_EXCLUDE, NULL);
if (!dwarf_split_debug_info && !output_asm_line_debug_info ())
if (!dwarf_split_debug_info)
debug_line_str_section
= get_section (DEBUG_LTO_LINE_STR_SECTION,
DEBUG_STR_SECTION_FLAGS | SECTION_EXCLUDE, NULL);
@ -31149,6 +31149,11 @@ dwarf2out_finish (const char *)
/* Remove indirect string decisions. */
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
@ -31433,8 +31438,8 @@ dwarf2out_finish (const char *)
switch_to_section (debug_loc_section);
if (dwarf_version >= 5)
{
ASM_GENERATE_INTERNAL_LABEL (l1, DEBUG_LOC_SECTION_LABEL, 1);
ASM_GENERATE_INTERNAL_LABEL (l2, DEBUG_LOC_SECTION_LABEL, 2);
ASM_GENERATE_INTERNAL_LABEL (l1, DEBUG_LOC_SECTION_LABEL, 2);
ASM_GENERATE_INTERNAL_LABEL (l2, DEBUG_LOC_SECTION_LABEL, 3);
if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4)
dw2_asm_output_data (4, 0xffffffff,
"Initial length escape value indicating "
@ -32053,6 +32058,13 @@ dwarf2out_early_finish (const char *filename)
/* If we emitted any indirect strings, output the string table too. */
if (debug_str_hash || skeleton_debug_str_hash)
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_to_section (text_section);

View file

@ -1,3 +1,8 @@
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>
* gcc.target/s390/function-align1.c: New test.

View file

@ -0,0 +1,5 @@
// { dg-do compile }
// { dg-require-effective-target lto }
// { dg-options "-g -gdwarf-5 -flto -ffat-lto-objects" }
int a;