Commit 333a29f9 by Iain Sandoe Committed by Iain Sandoe

Fix FDE labels for Darwin

gcc/

	PR bootstrap/81033
	PR target/81733
	PR target/52795
	* gcc/dwarf2out.c (FUNC_SECOND_SECT_LABEL): New.
	(dwarf2out_switch_text_section): Generate a local label for the second
	function sub-section and apply it as the second FDE start label.
	* gcc/final.c (final_scan_insn_1): Emit second FDE label after the second
	sub-section start.

From-SVN: r263763
parent acc25807
2018-08-22 Iain Sandoe <iain@sandoe.co.uk>
PR bootstrap/81033
PR target/81733
PR target/52795
* gcc/dwarf2out.c (FUNC_SECOND_SECT_LABEL): New.
(dwarf2out_switch_text_section): Generate a local label for the second
function sub-section and apply it as the second FDE start label.
* gcc/final.c (final_scan_insn_1): Emit second FDE label after the second
sub-section start.
2018-08-22 Richard Biener <rguenther@suse.de> 2018-08-22 Richard Biener <rguenther@suse.de>
PR tree-optimization/86988 PR tree-optimization/86988
......
...@@ -298,6 +298,10 @@ static unsigned int rnglist_idx; ...@@ -298,6 +298,10 @@ static unsigned int rnglist_idx;
#define FUNC_BEGIN_LABEL "LFB" #define FUNC_BEGIN_LABEL "LFB"
#endif #endif
#ifndef FUNC_SECOND_SECT_LABEL
#define FUNC_SECOND_SECT_LABEL "LFSB"
#endif
#ifndef FUNC_END_LABEL #ifndef FUNC_END_LABEL
#define FUNC_END_LABEL "LFE" #define FUNC_END_LABEL "LFE"
#endif #endif
...@@ -1213,21 +1217,24 @@ static void set_cur_line_info_table (section *); ...@@ -1213,21 +1217,24 @@ static void set_cur_line_info_table (section *);
void void
dwarf2out_switch_text_section (void) dwarf2out_switch_text_section (void)
{ {
char label[MAX_ARTIFICIAL_LABEL_BYTES];
section *sect; section *sect;
dw_fde_ref fde = cfun->fde; dw_fde_ref fde = cfun->fde;
gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL); gcc_assert (cfun && fde && fde->dw_fde_second_begin == NULL);
ASM_GENERATE_INTERNAL_LABEL (label, FUNC_SECOND_SECT_LABEL,
current_function_funcdef_no);
fde->dw_fde_second_begin = ggc_strdup (label);
if (!in_cold_section_p) if (!in_cold_section_p)
{ {
fde->dw_fde_end = crtl->subsections.cold_section_end_label; fde->dw_fde_end = crtl->subsections.cold_section_end_label;
fde->dw_fde_second_begin = crtl->subsections.hot_section_label;
fde->dw_fde_second_end = crtl->subsections.hot_section_end_label; fde->dw_fde_second_end = crtl->subsections.hot_section_end_label;
} }
else else
{ {
fde->dw_fde_end = crtl->subsections.hot_section_end_label; fde->dw_fde_end = crtl->subsections.hot_section_end_label;
fde->dw_fde_second_begin = crtl->subsections.cold_section_label;
fde->dw_fde_second_end = crtl->subsections.cold_section_end_label; fde->dw_fde_second_end = crtl->subsections.cold_section_end_label;
} }
have_multiple_function_sections = true; have_multiple_function_sections = true;
......
...@@ -2232,6 +2232,9 @@ final_scan_insn_1 (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, ...@@ -2232,6 +2232,9 @@ final_scan_insn_1 (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED,
ASM_OUTPUT_LABEL (asm_out_file, ASM_OUTPUT_LABEL (asm_out_file,
IDENTIFIER_POINTER (cold_function_name)); IDENTIFIER_POINTER (cold_function_name));
#endif #endif
if (dwarf2out_do_frame ()
&& cfun->fde->dw_fde_second_begin != NULL)
ASM_OUTPUT_LABEL (asm_out_file, cfun->fde->dw_fde_second_begin);
} }
break; break;
......
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