mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-17 09:20:27 +08:00
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
This commit is contained in:
parent
777351a5fd
commit
2f43d500a6
@ -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
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user