This patch introduces a dwarf_debuginfo_p predicate that abstracts and replaces complex checks on write_symbols.
gcc/c-family/ChangeLog: * c-lex.c (init_c_lex): Use dwarf_debuginfo_p. gcc/ChangeLog: * config/c6x/c6x.c (c6x_output_file_unwind): Use dwarf_debuginfo_p. * dwarf2cfi.c (cfi_label_required_p): Likewise. (dwarf2out_do_frame): Likewise. * final.c (dwarf2_debug_info_emitted_p): Likewise. (final_scan_insn_1): Likewise. * flags.h (dwarf_debuginfo_p): New function declaration. * opts.c (dwarf_debuginfo_p): New function definition. * targhooks.c (default_debug_unwind_info): Use dwarf_debuginfo_p. * toplev.c (process_options): Likewise. --- gcc/c-family/c-lex.c | 4 ++-- gcc/config/c6x/c6x.c | 3 +-- gcc/dwarf2cfi.c | 9 ++++----- gcc/final.c | 15 ++++++--------- gcc/flags.h | 4 ++++ gcc/opts.c | 8 ++++++++ gcc/targhooks.c | 2 +- gcc/toplev.c | 6 ++---- 8 files changed, 28 insertions(+), 23 deletions(-) diff --git a/gcc/c-family/c-lex.c b/gcc/c-family/c-lex.c index 6374b72..5174b22 100644 --- a/gcc/c-family/c-lex.c +++ b/gcc/c-family/c-lex.c @@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see #include "stor-layout.h" #include "c-pragma.h" #include "debug.h" +#include "flags.h" #include "file-prefix-map.h" /* remap_macro_filename() */ #include "langhooks.h" #include "attribs.h" @@ -87,8 +88,7 @@ init_c_lex (void) /* Set the debug callbacks if we can use them. */ if ((debug_info_level == DINFO_LEVEL_VERBOSE - && (write_symbols == DWARF2_DEBUG - || write_symbols == VMS_AND_DWARF2_DEBUG)) + && dwarf_debuginfo_p ()) || flag_dump_go_spec != NULL) { cb->define = cb_define; diff --git a/gcc/config/c6x/c6x.c b/gcc/config/c6x/c6x.c index f9ad1e5..a10e2f8 100644 --- a/gcc/config/c6x/c6x.c +++ b/gcc/config/c6x/c6x.c @@ -439,8 +439,7 @@ c6x_output_file_unwind (FILE * f) { if (flag_unwind_tables || flag_exceptions) { - if (write_symbols == DWARF2_DEBUG - || write_symbols == VMS_AND_DWARF2_DEBUG) + if (dwarf_debuginfo_p ()) asm_fprintf (f, "\t.cfi_sections .debug_frame, .c6xabi.exidx\n"); else asm_fprintf (f, "\t.cfi_sections .c6xabi.exidx\n"); diff --git a/gcc/dwarf2cfi.c b/gcc/dwarf2cfi.c index 362ff3f..c27ac19 100644 --- a/gcc/dwarf2cfi.c +++ b/gcc/dwarf2cfi.c @@ -39,7 +39,7 @@ along with GCC; see the file COPYING3. If not see #include "expr.h" /* init_return_column_size */ #include "output.h" /* asm_out_file */ #include "debug.h" /* dwarf2out_do_frame, dwarf2out_do_cfi_asm */ - +#include "flags.h" /* dwarf_debuginfo_p */ /* ??? Poison these here until it can be done generically. They've been totally replaced in this file; make sure it stays that way. */ @@ -2289,8 +2289,7 @@ cfi_label_required_p (dw_cfi_ref cfi) if (dwarf_version == 2 && debug_info_level > DINFO_LEVEL_TERSE - && (write_symbols == DWARF2_DEBUG - || write_symbols == VMS_AND_DWARF2_DEBUG)) + && dwarf_debuginfo_p ()) { switch (cfi->dw_cfi_opc) { @@ -3557,9 +3556,9 @@ bool dwarf2out_do_frame (void) { /* We want to emit correct CFA location expressions or lists, so we - have to return true if we're going to output debug info, even if + have to return true if we're going to generate debug info, even if we're not going to output frame or unwind info. */ - if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG) + if (dwarf_debuginfo_p ()) return true; if (saved_do_cfi_asm > 0) diff --git a/gcc/final.c b/gcc/final.c index ba4285d..794702f 100644 --- a/gcc/final.c +++ b/gcc/final.c @@ -1428,7 +1428,8 @@ asm_str_count (const char *templ) static bool dwarf2_debug_info_emitted_p (tree decl) { - if (write_symbols != DWARF2_DEBUG && write_symbols != VMS_AND_DWARF2_DEBUG) + /* When DWARF2 debug info is not generated internally. */ + if (!dwarf_debuginfo_p ()) return false; if (DECL_IGNORED_P (decl)) @@ -2298,10 +2299,8 @@ final_scan_insn_1 (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, break; case NOTE_INSN_BLOCK_BEG: - if (debug_info_level == DINFO_LEVEL_NORMAL - || debug_info_level == DINFO_LEVEL_VERBOSE - || write_symbols == DWARF2_DEBUG - || write_symbols == VMS_AND_DWARF2_DEBUG + if (debug_info_level >= DINFO_LEVEL_NORMAL + || dwarf_debuginfo_p () || write_symbols == VMS_DEBUG) { int n = BLOCK_NUMBER (NOTE_BLOCK (insn)); @@ -2336,10 +2335,8 @@ final_scan_insn_1 (rtx_insn *insn, FILE *file, int optimize_p ATTRIBUTE_UNUSED, case NOTE_INSN_BLOCK_END: maybe_output_next_view (seen); - if (debug_info_level == DINFO_LEVEL_NORMAL - || debug_info_level == DINFO_LEVEL_VERBOSE - || write_symbols == DWARF2_DEBUG - || write_symbols == VMS_AND_DWARF2_DEBUG + if (debug_info_level >= DINFO_LEVEL_NORMAL + || dwarf_debuginfo_p () || write_symbols == VMS_DEBUG) { int n = BLOCK_NUMBER (NOTE_BLOCK (insn)); diff --git a/gcc/flags.h b/gcc/flags.h index 3415493..cc7b79b 100644 --- a/gcc/flags.h +++ b/gcc/flags.h @@ -40,6 +40,10 @@ unsigned int debug_set_count (uint32_t w_symbols); const char * debug_set_names (uint32_t w_symbols); +/* Return true iff DWARF2 debug info is enabled. */ + +extern bool dwarf_debuginfo_p (); + extern void strip_off_ending (char *, int); extern int base_of_path (const char *path, const char **base_out); diff --git a/gcc/opts.c b/gcc/opts.c index 026952f..3e0b046 100644 --- a/gcc/opts.c +++ b/gcc/opts.c @@ -126,6 +126,14 @@ debug_set_names (uint32_t w_symbols) return df_set_names; } +/* Return TRUE iff dwarf2 debug info is enabled. */ + +bool +dwarf_debuginfo_p () +{ + return (write_symbols & DWARF2_DEBUG); +} + /* Parse the -femit-struct-debug-detailed option value and set the flag variables. */ diff --git a/gcc/targhooks.c b/gcc/targhooks.c index 952fad4..267ba47 100644 --- a/gcc/targhooks.c +++ b/gcc/targhooks.c @@ -1975,7 +1975,7 @@ default_debug_unwind_info (void) /* Otherwise, only turn it on if dwarf2 debugging is enabled. */ #ifdef DWARF2_DEBUGGING_INFO - if (write_symbols == DWARF2_DEBUG || write_symbols == VMS_AND_DWARF2_DEBUG) + if (dwarf_debuginfo_p ()) return UI_DWARF2; #endif diff --git a/gcc/toplev.c b/gcc/toplev.c index a0ccec4..0e11d6a 100644 --- a/gcc/toplev.c +++ b/gcc/toplev.c @@ -1526,8 +1526,7 @@ process_options (void) debug_nonbind_markers_p = (optimize && debug_info_level >= DINFO_LEVEL_NORMAL - && (write_symbols == DWARF2_DEBUG - || write_symbols == VMS_AND_DWARF2_DEBUG) + && dwarf_debuginfo_p () && !(flag_selective_scheduling || flag_selective_scheduling2)); if (dwarf2out_as_loc_support == AUTODETECT_VALUE) @@ -1542,8 +1541,7 @@ process_options (void) debug_variable_location_views = (flag_var_tracking && debug_info_level >= DINFO_LEVEL_NORMAL - && (write_symbols == DWARF2_DEBUG - || write_symbols == VMS_AND_DWARF2_DEBUG) + && dwarf_debuginfo_p () && !dwarf_strict && dwarf2out_as_loc_support && dwarf2out_as_locview_support); -- 1.8.3.1