From a8d09781ee8c8e0020fac0fbdb15669710fea4b4 Mon Sep 17 00:00:00 2001 From: rguenth Date: Mon, 26 Sep 2016 08:31:37 +0000 Subject: [PATCH] 2016-09-26 Richard Biener * dwarf2out.c (stripattributes): Remove unused function. (DEBUG_NORM_MACINFO_SECTION): Rename to DEBUG_MACINFO_SECTION. Push dwarf_split_debug_info handling into init_sections_and_labels. (DEBUG_NORM_MACRO_SECTION): Likewise to DEBUG_MACRO_SECTION. (DEBUG_MACRO_SECTION_FLAGS): Remove. (debug_macinfo_section_name): New global. (output_macinfo): Use debug_macinfo_section_name. (init_sections_and_labels): Split out section and label generation from dwarf2out_init. Set debug_macinfo_section_name. (dwarf2out_init): Move text section label generation and emission to ... (dwarf2out_assembly_start): ... here. (dwarf2out_finish): Call init_sections_and_labels before DWARF output starts. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@240484 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 17 ++++++ gcc/dwarf2out.c | 176 ++++++++++++++++++++++++++------------------------------ 2 files changed, 97 insertions(+), 96 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8d85d83fed1..8481198269f 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,22 @@ 2016-09-26 Richard Biener + * dwarf2out.c (stripattributes): Remove unused function. + (DEBUG_NORM_MACINFO_SECTION): Rename to DEBUG_MACINFO_SECTION. + Push dwarf_split_debug_info handling into init_sections_and_labels. + (DEBUG_NORM_MACRO_SECTION): Likewise to DEBUG_MACRO_SECTION. + (DEBUG_MACRO_SECTION_FLAGS): Remove. + (debug_macinfo_section_name): New global. + (output_macinfo): Use debug_macinfo_section_name. + (init_sections_and_labels): Split out section and label generation + from dwarf2out_init. Set debug_macinfo_section_name. + (dwarf2out_init): Move text section label generation and emission + to ... + (dwarf2out_assembly_start): ... here. + (dwarf2out_finish): Call init_sections_and_labels before DWARF + output starts. + +2016-09-26 Richard Biener + PR debug/77692 * cgraphunit.c (analyze_functions): Before early removing global vars calls the late_global_decl debug handler mark diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index e36473a5c52..ed74190131b 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -159,6 +159,7 @@ static GTY(()) section *debug_skeleton_abbrev_section; static GTY(()) section *debug_aranges_section; static GTY(()) section *debug_addr_section; static GTY(()) section *debug_macinfo_section; +static const char *debug_macinfo_section_name; static GTY(()) section *debug_line_section; static GTY(()) section *debug_skeleton_line_section; static GTY(()) section *debug_loc_section; @@ -265,7 +266,6 @@ static GTY(()) dw_die_ref decltype_auto_die; /* Forward declarations for functions defined in this file. */ -static char *stripattributes (const char *); static void output_call_frame_info (int); static void dwarf2out_note_section_used (void); @@ -410,24 +410,6 @@ should_emit_struct_debug (tree type, enum debug_info_usage usage) return DUMP_GSTRUCT (type, usage, criterion, generic, false, false); } -/* Return a pointer to a copy of the section string name S with all - attributes stripped off, and an asterisk prepended (for assemble_name). */ - -static inline char * -stripattributes (const char *s) -{ - char *stripped = XNEWVEC (char, strlen (s) + 2); - char *p = stripped; - - *p++ = '*'; - - while (*s && *s != ',') - *p++ = *s++; - - *p = '\0'; - return stripped; -} - /* Switch [BACK] to eh_frame_section. If we don't have an eh_frame_section, switch to the data section instead, and write out a synthetic start label for collect2 the first time around. */ @@ -3514,27 +3496,17 @@ new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel) #ifndef DEBUG_ADDR_SECTION #define DEBUG_ADDR_SECTION ".debug_addr" #endif -#ifndef DEBUG_NORM_MACINFO_SECTION -#define DEBUG_NORM_MACINFO_SECTION ".debug_macinfo" +#ifndef DEBUG_MACINFO_SECTION +#define DEBUG_MACINFO_SECTION ".debug_macinfo" #endif #ifndef DEBUG_DWO_MACINFO_SECTION #define DEBUG_DWO_MACINFO_SECTION ".debug_macinfo.dwo" #endif -#ifndef DEBUG_MACINFO_SECTION -#define DEBUG_MACINFO_SECTION \ - (!dwarf_split_debug_info \ - ? (DEBUG_NORM_MACINFO_SECTION) : (DEBUG_DWO_MACINFO_SECTION)) -#endif -#ifndef DEBUG_NORM_MACRO_SECTION -#define DEBUG_NORM_MACRO_SECTION ".debug_macro" -#endif #ifndef DEBUG_DWO_MACRO_SECTION #define DEBUG_DWO_MACRO_SECTION ".debug_macro.dwo" #endif #ifndef DEBUG_MACRO_SECTION -#define DEBUG_MACRO_SECTION \ - (!dwarf_split_debug_info \ - ? (DEBUG_NORM_MACRO_SECTION) : (DEBUG_DWO_MACRO_SECTION)) +#define DEBUG_MACRO_SECTION ".debug_macro" #endif #ifndef DEBUG_LINE_SECTION #define DEBUG_LINE_SECTION ".debug_line" @@ -3580,10 +3552,6 @@ new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel) #define TEXT_SECTION_NAME ".text" #endif -/* Section flags for .debug_macinfo/.debug_macro section. */ -#define DEBUG_MACRO_SECTION_FLAGS \ - (dwarf_split_debug_info ? SECTION_DEBUG | SECTION_EXCLUDE : SECTION_DEBUG) - /* Section flags for .debug_str section. */ #define DEBUG_STR_SECTION_FLAGS \ (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \ @@ -25522,7 +25490,7 @@ output_macinfo (void) tree comdat_key = get_identifier (ref->info); /* Terminate the previous .debug_macinfo section. */ dw2_asm_output_data (1, 0, "End compilation unit"); - targetm.asm_out.named_section (DEBUG_MACRO_SECTION, + targetm.asm_out.named_section (debug_macinfo_section_name, SECTION_DEBUG | SECTION_LINKONCE, comdat_key); @@ -25550,53 +25518,11 @@ output_macinfo (void) } } -/* Set up for Dwarf output at the start of compilation. */ +/* Initialize the various sections and labels for dwarf output. */ static void -dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) +init_sections_and_labels (void) { - /* This option is currently broken, see (PR53118 and PR46102). */ - if (flag_eliminate_dwarf2_dups - && strstr (lang_hooks.name, "C++")) - { - warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring"); - flag_eliminate_dwarf2_dups = 0; - } - - /* Allocate the file_table. */ - file_table = hash_table::create_ggc (50); - -#ifndef DWARF2_LINENO_DEBUGGING_INFO - /* Allocate the decl_die_table. */ - decl_die_table = hash_table::create_ggc (10); - - /* Allocate the decl_loc_table. */ - decl_loc_table = hash_table::create_ggc (10); - - /* Allocate the cached_dw_loc_list_table. */ - cached_dw_loc_list_table = hash_table::create_ggc (10); - - /* Allocate the initial hunk of the decl_scope_table. */ - vec_alloc (decl_scope_table, 256); - - /* Allocate the initial hunk of the abbrev_die_table. */ - abbrev_die_table = ggc_cleared_vec_alloc - (ABBREV_DIE_TABLE_INCREMENT); - abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT; - /* Zero-th entry is allocated, but unused. */ - abbrev_die_table_in_use = 1; - - /* Allocate the dwarf_proc_stack_usage_map. */ - dwarf_proc_stack_usage_map = new hash_map; - - /* Allocate the pubtypes and pubnames vectors. */ - vec_alloc (pubname_table, 32); - vec_alloc (pubtype_table, 32); - - vec_alloc (incomplete_types, 64); - - vec_alloc (used_rtx_array, 32); - if (!dwarf_split_debug_info) { debug_info_section = get_section (DEBUG_INFO_SECTION, @@ -25605,6 +25531,10 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) SECTION_DEBUG, NULL); debug_loc_section = get_section (DEBUG_LOC_SECTION, SECTION_DEBUG, NULL); + debug_macinfo_section_name + = dwarf_strict ? DEBUG_MACINFO_SECTION : DEBUG_MACRO_SECTION; + debug_macinfo_section = get_section (debug_macinfo_section_name, + SECTION_DEBUG, NULL); } else { @@ -25625,8 +25555,8 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) /* Somewhat confusing detail: The skeleton_[abbrev|info] sections stay in the main .o, but the skeleton_line goes into the split off dwo. */ debug_skeleton_line_section - = get_section (DEBUG_DWO_LINE_SECTION, - SECTION_DEBUG | SECTION_EXCLUDE, NULL); + = get_section (DEBUG_DWO_LINE_SECTION, + SECTION_DEBUG | SECTION_EXCLUDE, NULL); ASM_GENERATE_INTERNAL_LABEL (debug_skeleton_line_section_label, DEBUG_SKELETON_LINE_SECTION_LABEL, 0); debug_str_offsets_section = get_section (DEBUG_STR_OFFSETS_SECTION, @@ -25638,13 +25568,14 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) SECTION_DEBUG | SECTION_EXCLUDE, NULL); debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION, DEBUG_STR_DWO_SECTION_FLAGS, NULL); + debug_macinfo_section_name + = dwarf_strict ? DEBUG_DWO_MACINFO_SECTION : DEBUG_DWO_MACRO_SECTION; + debug_macinfo_section = get_section (debug_macinfo_section_name, + SECTION_DEBUG | SECTION_EXCLUDE, + NULL); } debug_aranges_section = get_section (DEBUG_ARANGES_SECTION, SECTION_DEBUG, NULL); - debug_macinfo_section = get_section (dwarf_strict - ? DEBUG_MACINFO_SECTION - : DEBUG_MACRO_SECTION, - DEBUG_MACRO_SECTION_FLAGS, NULL); debug_line_section = get_section (DEBUG_LINE_SECTION, SECTION_DEBUG, NULL); debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION, @@ -25658,14 +25589,8 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) debug_frame_section = get_section (DEBUG_FRAME_SECTION, SECTION_DEBUG, NULL); - ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label, DEBUG_ABBREV_SECTION_LABEL, 0); - ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0); - ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label, - COLD_TEXT_SECTION_LABEL, 0); - ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0); - ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label, DEBUG_INFO_SECTION_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label, @@ -25679,12 +25604,57 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) ? DEBUG_MACINFO_SECTION_LABEL : DEBUG_MACRO_SECTION_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_SECTION_LABEL, 0); +} + +/* Set up for Dwarf output at the start of compilation. */ + +static void +dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) +{ + /* This option is currently broken, see (PR53118 and PR46102). */ + if (flag_eliminate_dwarf2_dups + && strstr (lang_hooks.name, "C++")) + { + warning (0, "-feliminate-dwarf2-dups is broken for C++, ignoring"); + flag_eliminate_dwarf2_dups = 0; + } + + /* Allocate the file_table. */ + file_table = hash_table::create_ggc (50); + +#ifndef DWARF2_LINENO_DEBUGGING_INFO + /* Allocate the decl_die_table. */ + decl_die_table = hash_table::create_ggc (10); + + /* Allocate the decl_loc_table. */ + decl_loc_table = hash_table::create_ggc (10); + + /* Allocate the cached_dw_loc_list_table. */ + cached_dw_loc_list_table = hash_table::create_ggc (10); + + /* Allocate the initial hunk of the decl_scope_table. */ + vec_alloc (decl_scope_table, 256); + + /* Allocate the initial hunk of the abbrev_die_table. */ + abbrev_die_table = ggc_cleared_vec_alloc + (ABBREV_DIE_TABLE_INCREMENT); + abbrev_die_table_allocated = ABBREV_DIE_TABLE_INCREMENT; + /* Zero-th entry is allocated, but unused. */ + abbrev_die_table_in_use = 1; + + /* Allocate the dwarf_proc_stack_usage_map. */ + dwarf_proc_stack_usage_map = new hash_map; + + /* Allocate the pubtypes and pubnames vectors. */ + vec_alloc (pubname_table, 32); + vec_alloc (pubtype_table, 32); + + vec_alloc (incomplete_types, 64); + + vec_alloc (used_rtx_array, 32); if (debug_info_level >= DINFO_LEVEL_VERBOSE) vec_alloc (macinfo_table, 64); - - switch_to_section (text_section); - ASM_OUTPUT_LABEL (asm_out_file, text_section_label); #endif /* Make sure the line number table for .text always exists. */ @@ -25707,6 +25677,17 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) static void dwarf2out_assembly_start (void) { +#ifndef DWARF2_LINENO_DEBUGGING_INFO + ASM_GENERATE_INTERNAL_LABEL (text_section_label, TEXT_SECTION_LABEL, 0); + ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0); + ASM_GENERATE_INTERNAL_LABEL (cold_text_section_label, + COLD_TEXT_SECTION_LABEL, 0); + ASM_GENERATE_INTERNAL_LABEL (cold_end_label, COLD_END_LABEL, 0); + + switch_to_section (text_section); + ASM_OUTPUT_LABEL (asm_out_file, text_section_label); +#endif + if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE && dwarf2out_do_cfi_asm () && (!(flag_unwind_tables || flag_exceptions) @@ -27866,6 +27847,9 @@ dwarf2out_finish (const char *) if (flag_eliminate_dwarf2_dups) break_out_includes (comp_unit_die ()); + /* Initialize sections and labels used for actual assembler output. */ + init_sections_and_labels (); + /* Traverse the DIE's and add sibling attributes to those DIE's that have children. */ add_sibling_attributes (comp_unit_die ()); -- 2.11.4.GIT