From f236bc59e43e211323006b4d1f18af0a4add0bd2 Mon Sep 17 00:00:00 2001 From: Iain Sandoe Date: Mon, 26 Nov 2018 19:49:19 +0000 Subject: [PATCH] darwin - backport r263763 to fix PR81033 2018-11-26 Iain Sandoe Backport from mainline 2018-08-22 Iain Sandoe 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: r266478 --- gcc/ChangeLog | 13 +++++++++++++ gcc/dwarf2out.c | 11 +++++++++-- gcc/final.c | 3 +++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8e19a157538e..2c82d0793f97 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,19 @@ 2018-11-26 Iain Sandoe Backport from mainline + 2018-08-22 Iain Sandoe + + 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-11-26 Iain Sandoe + 2018-08-15 Iain Sandoe * config/darwin.c diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 600bc36a3e99..5223e3b2fb43 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -297,6 +297,10 @@ static unsigned int rnglist_idx; #define FUNC_BEGIN_LABEL "LFB" #endif +#ifndef FUNC_SECOND_SECT_LABEL +#define FUNC_SECOND_SECT_LABEL "LFSB" +#endif + #ifndef FUNC_END_LABEL #define FUNC_END_LABEL "LFE" #endif @@ -1200,21 +1204,24 @@ static void set_cur_line_info_table (section *); void dwarf2out_switch_text_section (void) { + char label[MAX_ARTIFICIAL_LABEL_BYTES]; section *sect; dw_fde_ref fde = cfun->fde; 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) { 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; } else { 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; } have_multiple_function_sections = true; diff --git a/gcc/final.c b/gcc/final.c index 20af67816bb1..c3023285c216 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -2232,6 +2232,9 @@ final_scan_insn (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, ASM_OUTPUT_LABEL (asm_out_file, IDENTIFIER_POINTER (cold_function_name)); #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; -- 2.47.2