diff options
author | Jakub Jelinek <jakub@redhat.com> | 2010-04-01 21:45:02 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2010-04-01 21:45:02 +0200 |
commit | 2f43d500a6769e563fb8f645e7530c2f144d7023 (patch) | |
tree | e6a4eb02054539cf58c90a07ac8af671992f4f19 | |
parent | 777351a5fdf460dc2a4a2ed6c63a1e0b899512b7 (diff) | |
download | gcc-2f43d500a6769e563fb8f645e7530c2f144d7023.zip gcc-2f43d500a6769e563fb8f645e7530c2f144d7023.tar.gz gcc-2f43d500a6769e563fb8f645e7530c2f144d7023.tar.bz2 |
dwarf2out.c (output_compilation_unit_header): For -gdwarf-4 use version 4 instead of version 3.
* dwarf2out.c (output_compilation_unit_header): For
-gdwarf-4 use version 4 instead of version 3.
(output_line_info): For version 4 and above emit additional
maximum ops per insn header field.
(DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN): Define.
* dwarf2out.c (is_c_family, is_java): Remove.
(lower_bound_default): New function.
(add_bound_info, gen_descr_array_type_die): Use it.
From-SVN: r157930
-rw-r--r-- | gcc/ChangeLog | 12 | ||||
-rw-r--r-- | gcc/dwarf2out.c | 95 |
2 files changed, 65 insertions, 42 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index e78624f..80c62a4 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2010-04-01 Jakub Jelinek <jakub@redhat.com> + + * dwarf2out.c (output_compilation_unit_header): For + -gdwarf-4 use version 4 instead of version 3. + (output_line_info): For version 4 and above emit additional + maximum ops per insn header field. + (DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN): Define. + + * dwarf2out.c (is_c_family, is_java): Remove. + (lower_bound_default): New function. + (add_bound_info, gen_descr_array_type_die): Use it. + 2010-04-01 Dodji Seketeli <dodji@redhat.com> PR debug/43325 diff --git a/gcc/dwarf2out.c b/gcc/dwarf2out.c index 5faa58c..82b0d49 100644 --- a/gcc/dwarf2out.c +++ b/gcc/dwarf2out.c @@ -5689,6 +5689,11 @@ skeleton_chain_node; is not made available by the GCC front-end. */ #define DWARF_LINE_DEFAULT_IS_STMT_START 1 +/* Maximum number of operations per instruction bundle. */ +#ifndef DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN +#define DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN 1 +#endif + #ifdef DWARF2_DEBUGGING_INFO /* This location is used by calc_die_sizes() to keep track the offset of each DIE within the .debug_info section. */ @@ -5964,9 +5969,7 @@ static const char *get_AT_string (dw_die_ref, enum dwarf_attribute); static int get_AT_flag (dw_die_ref, enum dwarf_attribute); static unsigned get_AT_unsigned (dw_die_ref, enum dwarf_attribute); static inline dw_die_ref get_AT_ref (dw_die_ref, enum dwarf_attribute); -static bool is_c_family (void); static bool is_cxx (void); -static bool is_java (void); static bool is_fortran (void); static bool is_ada (void); static void remove_AT (dw_die_ref, enum dwarf_attribute); @@ -7443,18 +7446,6 @@ get_AT_file (dw_die_ref die, enum dwarf_attribute attr_kind) return a ? AT_file (a) : NULL; } -/* Return TRUE if the language is C or C++. */ - -static inline bool -is_c_family (void) -{ - unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language); - - return (lang == DW_LANG_C || lang == DW_LANG_C89 || lang == DW_LANG_ObjC - || lang == DW_LANG_C99 - || lang == DW_LANG_C_plus_plus || lang == DW_LANG_ObjC_plus_plus); -} - /* Return TRUE if the language is C++. */ static inline bool @@ -7477,16 +7468,6 @@ is_fortran (void) || lang == DW_LANG_Fortran95); } -/* Return TRUE if the language is Java. */ - -static inline bool -is_java (void) -{ - unsigned int lang = get_AT_unsigned (comp_unit_die, DW_AT_language); - - return lang == DW_LANG_Java; -} - /* Return TRUE if the language is Ada. */ static inline bool @@ -10687,11 +10668,6 @@ output_compilation_unit_header (void) { int ver = dwarf_version; - /* Don't mark the output as DWARF-4 until we make full use of the - version 4 extensions, and gdb supports them. For now, -gdwarf-4 - selects only a few extensions from the DWARF-4 spec. */ - if (ver > 3) - ver = 3; if (DWARF_INITIAL_LENGTH_SIZE - DWARF_OFFSET_SIZE == 4) dw2_asm_output_data (4, 0xffffffff, "Initial length escape value indicating 64-bit DWARF extension"); @@ -11538,12 +11514,6 @@ output_line_info (void) unsigned long function; int ver = dwarf_version; - /* Don't mark the output as DWARF-4 until we make full use of the - version 4 extensions, and gdb supports them. For now, -gdwarf-4 - selects only a few extensions from the DWARF-4 spec. */ - if (ver > 3) - ver = 3; - ASM_GENERATE_INTERNAL_LABEL (l1, LINE_NUMBER_BEGIN_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (l2, LINE_NUMBER_END_LABEL, 0); ASM_GENERATE_INTERNAL_LABEL (p1, LN_PROLOG_AS_LABEL, 0); @@ -11571,6 +11541,9 @@ output_line_info (void) dw2_asm_output_data (1, 1, "Minimum Instruction Length"); + if (ver >= 4) + dw2_asm_output_data (1, DWARF_LINE_DEFAULT_MAX_OPS_PER_INSN, + "Maximum Operations Per Instruction"); dw2_asm_output_data (1, DWARF_LINE_DEFAULT_IS_STMT_START, "Default is_stmt_start flag"); dw2_asm_output_data (1, DWARF_LINE_BASE, @@ -16339,6 +16312,42 @@ add_comp_dir_attribute (dw_die_ref die) add_AT_string (die, DW_AT_comp_dir, remap_debug_filename (wd)); } +/* Return the default for DW_AT_lower_bound, or -1 if there is not any + default. */ + +static int +lower_bound_default (void) +{ + switch (get_AT_unsigned (comp_unit_die, DW_AT_language)) + { + case DW_LANG_C: + case DW_LANG_C89: + case DW_LANG_C99: + case DW_LANG_C_plus_plus: + case DW_LANG_ObjC: + case DW_LANG_ObjC_plus_plus: + case DW_LANG_Java: + return 0; + case DW_LANG_Fortran77: + case DW_LANG_Fortran90: + case DW_LANG_Fortran95: + return 1; + case DW_LANG_UPC: + case DW_LANG_D: + return dwarf_version >= 4 ? 0 : -1; + case DW_LANG_Ada95: + case DW_LANG_Ada83: + case DW_LANG_Cobol74: + case DW_LANG_Cobol85: + case DW_LANG_Pascal83: + case DW_LANG_Modula2: + case DW_LANG_PLI: + return dwarf_version >= 4 ? 1 : -1; + default: + return -1; + } +} + /* Given a tree node describing an array bound (either lower or upper) output a representation for that bound. */ @@ -16356,11 +16365,13 @@ add_bound_info (dw_die_ref subrange_die, enum dwarf_attribute bound_attr, tree b case INTEGER_CST: { unsigned int prec = simple_type_size_in_bits (TREE_TYPE (bound)); + int dflt; /* Use the default if possible. */ if (bound_attr == DW_AT_lower_bound - && (((is_c_family () || is_java ()) && integer_zerop (bound)) - || (is_fortran () && integer_onep (bound)))) + && host_integerp (bound, 0) + && (dflt = lower_bound_default ()) != -1 + && tree_low_cst (bound, 0) == dflt) ; /* Otherwise represent the bound as an unsigned value with the @@ -17261,11 +17272,11 @@ gen_descr_array_type_die (tree type, struct array_descr_info *info, if (info->dimen[dim].lower_bound) { /* If it is the default value, omit it. */ - if ((is_c_family () || is_java ()) - && integer_zerop (info->dimen[dim].lower_bound)) - ; - else if (is_fortran () - && integer_onep (info->dimen[dim].lower_bound)) + int dflt; + + if (host_integerp (info->dimen[dim].lower_bound, 0) + && (dflt = lower_bound_default ()) != -1 + && tree_low_cst (info->dimen[dim].lower_bound, 0) == dflt) ; else add_descr_info_field (subrange_die, DW_AT_lower_bound, |