Commit 392fa55c by Richard Biener Committed by Richard Biener

dwarf2out.c (stripattributes): Remove unused function.

2016-09-26  Richard Biener  <rguenther@suse.de>

	* 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.

From-SVN: r240484
parent e6358ebd
2016-09-26 Richard Biener <rguenther@suse.de> 2016-09-26 Richard Biener <rguenther@suse.de>
* 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 <rguenther@suse.de>
PR debug/77692 PR debug/77692
* cgraphunit.c (analyze_functions): Before early removing * cgraphunit.c (analyze_functions): Before early removing
global vars calls the late_global_decl debug handler mark global vars calls the late_global_decl debug handler mark
......
...@@ -159,6 +159,7 @@ static GTY(()) section *debug_skeleton_abbrev_section; ...@@ -159,6 +159,7 @@ static GTY(()) section *debug_skeleton_abbrev_section;
static GTY(()) section *debug_aranges_section; static GTY(()) section *debug_aranges_section;
static GTY(()) section *debug_addr_section; static GTY(()) section *debug_addr_section;
static GTY(()) section *debug_macinfo_section; static GTY(()) section *debug_macinfo_section;
static const char *debug_macinfo_section_name;
static GTY(()) section *debug_line_section; static GTY(()) section *debug_line_section;
static GTY(()) section *debug_skeleton_line_section; static GTY(()) section *debug_skeleton_line_section;
static GTY(()) section *debug_loc_section; static GTY(()) section *debug_loc_section;
...@@ -265,7 +266,6 @@ static GTY(()) dw_die_ref decltype_auto_die; ...@@ -265,7 +266,6 @@ static GTY(()) dw_die_ref decltype_auto_die;
/* Forward declarations for functions defined in this file. */ /* Forward declarations for functions defined in this file. */
static char *stripattributes (const char *);
static void output_call_frame_info (int); static void output_call_frame_info (int);
static void dwarf2out_note_section_used (void); static void dwarf2out_note_section_used (void);
...@@ -410,24 +410,6 @@ should_emit_struct_debug (tree type, enum debug_info_usage usage) ...@@ -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 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 [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 switch to the data section instead, and write out a synthetic start label
for collect2 the first time around. */ for collect2 the first time around. */
...@@ -3514,27 +3496,17 @@ new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel) ...@@ -3514,27 +3496,17 @@ new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel)
#ifndef DEBUG_ADDR_SECTION #ifndef DEBUG_ADDR_SECTION
#define DEBUG_ADDR_SECTION ".debug_addr" #define DEBUG_ADDR_SECTION ".debug_addr"
#endif #endif
#ifndef DEBUG_NORM_MACINFO_SECTION #ifndef DEBUG_MACINFO_SECTION
#define DEBUG_NORM_MACINFO_SECTION ".debug_macinfo" #define DEBUG_MACINFO_SECTION ".debug_macinfo"
#endif #endif
#ifndef DEBUG_DWO_MACINFO_SECTION #ifndef DEBUG_DWO_MACINFO_SECTION
#define DEBUG_DWO_MACINFO_SECTION ".debug_macinfo.dwo" #define DEBUG_DWO_MACINFO_SECTION ".debug_macinfo.dwo"
#endif #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 #ifndef DEBUG_DWO_MACRO_SECTION
#define DEBUG_DWO_MACRO_SECTION ".debug_macro.dwo" #define DEBUG_DWO_MACRO_SECTION ".debug_macro.dwo"
#endif #endif
#ifndef DEBUG_MACRO_SECTION #ifndef DEBUG_MACRO_SECTION
#define DEBUG_MACRO_SECTION \ #define DEBUG_MACRO_SECTION ".debug_macro"
(!dwarf_split_debug_info \
? (DEBUG_NORM_MACRO_SECTION) : (DEBUG_DWO_MACRO_SECTION))
#endif #endif
#ifndef DEBUG_LINE_SECTION #ifndef DEBUG_LINE_SECTION
#define DEBUG_LINE_SECTION ".debug_line" #define DEBUG_LINE_SECTION ".debug_line"
...@@ -3580,10 +3552,6 @@ new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel) ...@@ -3580,10 +3552,6 @@ new_addr_loc_descr (rtx addr, enum dtprel_bool dtprel)
#define TEXT_SECTION_NAME ".text" #define TEXT_SECTION_NAME ".text"
#endif #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. */ /* Section flags for .debug_str section. */
#define DEBUG_STR_SECTION_FLAGS \ #define DEBUG_STR_SECTION_FLAGS \
(HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \ (HAVE_GAS_SHF_MERGE && flag_merge_debug_strings \
...@@ -25522,7 +25490,7 @@ output_macinfo (void) ...@@ -25522,7 +25490,7 @@ output_macinfo (void)
tree comdat_key = get_identifier (ref->info); tree comdat_key = get_identifier (ref->info);
/* Terminate the previous .debug_macinfo section. */ /* Terminate the previous .debug_macinfo section. */
dw2_asm_output_data (1, 0, "End compilation unit"); 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_DEBUG
| SECTION_LINKONCE, | SECTION_LINKONCE,
comdat_key); comdat_key);
...@@ -25550,53 +25518,11 @@ output_macinfo (void) ...@@ -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 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<dwarf_file_hasher>::create_ggc (50);
#ifndef DWARF2_LINENO_DEBUGGING_INFO
/* Allocate the decl_die_table. */
decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
/* Allocate the decl_loc_table. */
decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
/* Allocate the cached_dw_loc_list_table. */
cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::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<dw_die_ref>
(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<dw_die_ref, int>;
/* 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) if (!dwarf_split_debug_info)
{ {
debug_info_section = get_section (DEBUG_INFO_SECTION, debug_info_section = get_section (DEBUG_INFO_SECTION,
...@@ -25605,6 +25531,10 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) ...@@ -25605,6 +25531,10 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
SECTION_DEBUG, NULL); SECTION_DEBUG, NULL);
debug_loc_section = get_section (DEBUG_LOC_SECTION, debug_loc_section = get_section (DEBUG_LOC_SECTION,
SECTION_DEBUG, NULL); 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 else
{ {
...@@ -25638,13 +25568,14 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) ...@@ -25638,13 +25568,14 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
SECTION_DEBUG | SECTION_EXCLUDE, NULL); SECTION_DEBUG | SECTION_EXCLUDE, NULL);
debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION, debug_str_dwo_section = get_section (DEBUG_STR_DWO_SECTION,
DEBUG_STR_DWO_SECTION_FLAGS, NULL); 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, debug_aranges_section = get_section (DEBUG_ARANGES_SECTION,
SECTION_DEBUG, NULL); 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, debug_line_section = get_section (DEBUG_LINE_SECTION,
SECTION_DEBUG, NULL); SECTION_DEBUG, NULL);
debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION, debug_pubnames_section = get_section (DEBUG_PUBNAMES_SECTION,
...@@ -25658,14 +25589,8 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) ...@@ -25658,14 +25589,8 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
debug_frame_section = get_section (DEBUG_FRAME_SECTION, debug_frame_section = get_section (DEBUG_FRAME_SECTION,
SECTION_DEBUG, NULL); SECTION_DEBUG, NULL);
ASM_GENERATE_INTERNAL_LABEL (text_end_label, TEXT_END_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label, ASM_GENERATE_INTERNAL_LABEL (abbrev_section_label,
DEBUG_ABBREV_SECTION_LABEL, 0); 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, ASM_GENERATE_INTERNAL_LABEL (debug_info_section_label,
DEBUG_INFO_SECTION_LABEL, 0); DEBUG_INFO_SECTION_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label, ASM_GENERATE_INTERNAL_LABEL (debug_line_section_label,
...@@ -25679,12 +25604,57 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) ...@@ -25679,12 +25604,57 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
? DEBUG_MACINFO_SECTION_LABEL ? DEBUG_MACINFO_SECTION_LABEL
: DEBUG_MACRO_SECTION_LABEL, 0); : DEBUG_MACRO_SECTION_LABEL, 0);
ASM_GENERATE_INTERNAL_LABEL (loc_section_label, DEBUG_LOC_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<dwarf_file_hasher>::create_ggc (50);
#ifndef DWARF2_LINENO_DEBUGGING_INFO
/* Allocate the decl_die_table. */
decl_die_table = hash_table<decl_die_hasher>::create_ggc (10);
/* Allocate the decl_loc_table. */
decl_loc_table = hash_table<decl_loc_hasher>::create_ggc (10);
/* Allocate the cached_dw_loc_list_table. */
cached_dw_loc_list_table = hash_table<dw_loc_list_hasher>::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<dw_die_ref>
(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<dw_die_ref, int>;
/* 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) if (debug_info_level >= DINFO_LEVEL_VERBOSE)
vec_alloc (macinfo_table, 64); vec_alloc (macinfo_table, 64);
switch_to_section (text_section);
ASM_OUTPUT_LABEL (asm_out_file, text_section_label);
#endif #endif
/* Make sure the line number table for .text always exists. */ /* Make sure the line number table for .text always exists. */
...@@ -25707,6 +25677,17 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED) ...@@ -25707,6 +25677,17 @@ dwarf2out_init (const char *filename ATTRIBUTE_UNUSED)
static void static void
dwarf2out_assembly_start (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 if (HAVE_GAS_CFI_SECTIONS_DIRECTIVE
&& dwarf2out_do_cfi_asm () && dwarf2out_do_cfi_asm ()
&& (!(flag_unwind_tables || flag_exceptions) && (!(flag_unwind_tables || flag_exceptions)
...@@ -27866,6 +27847,9 @@ dwarf2out_finish (const char *) ...@@ -27866,6 +27847,9 @@ dwarf2out_finish (const char *)
if (flag_eliminate_dwarf2_dups) if (flag_eliminate_dwarf2_dups)
break_out_includes (comp_unit_die ()); 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 /* Traverse the DIE's and add sibling attributes to those DIE's that
have children. */ have children. */
add_sibling_attributes (comp_unit_die ()); add_sibling_attributes (comp_unit_die ());
......
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