mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-12-26 17:18:55 +00:00
* doc/binutils.texi: Add --dwarf-check option.
* dwarf.c (dwarf_check): New global flag. (fetch_indexed_string): New function. (fetch_indexed_value): New function. (get_FORM_name): Add DW_FORM_GNU_str_index and DW_FORM_GNU_addr_index. (decode_location_expression): Add DW_OP_GNU_addr_index. (read_and_display_attr_value): Add DW_FORM_GNU_str_index, DW_FORM_GNU_addr_index, DW_AT_GNU_addr_base, and DW_AT_GNU_ranges_base. (get_AT_name): Add new attributes for Fission. (process_debug_info): Load new debug sections for Fission. (load_debug_info): Check for .debug_info.dwo section. (display_loc_list, display_loc_list_dwo): New functions. (display_debug_loc): Move logic to above two functions. (display_debug_info): Choose abbrev section based on info section. (display_debug_types): Likewise. (display_trace_info): Likewise. (comp_addr_base): New function. (display_debug_addr): New function. (display_debug_str_offsets): New function. (display_debug_ranges): Allow missing range lists. Suppress diagnostics if dwarf_check not set. (debug_displays): Add column to select abbrev section. * dwarf.h (enum dwarf_section_display_enum): Add new debug sections for Fission. (struct dwarf_section): Add abbrev_sec field. (struct dwarf_section_display): New type. (debug_info): Add addr_base, ranges_base fields. (dwarf_check): New global variable. * objdump.c (usage): Add --dwarf-check option. (enum option_values): Add OPTION_DWARF_CHECK. (long_options): Add --dwarf-check. (main): Likewise. * readelf.c (OPTION_DWARF_CHECK): New macro. (options): Add --dwarf-check. (parse_args): Likewise. (process_section_headers): Use const_strneq instead of streq.
This commit is contained in:
@@ -109,30 +109,6 @@ typedef struct
|
||||
}
|
||||
DWARF2_Internal_ARange;
|
||||
|
||||
struct dwarf_section
|
||||
{
|
||||
/* A debug section has a different name when it's stored compressed
|
||||
or not. COMPRESSED_NAME and UNCOMPRESSED_NAME are the two
|
||||
possibilities. NAME is set to whichever one is used for this
|
||||
input file, as determined by load_debug_section(). */
|
||||
const char *uncompressed_name;
|
||||
const char *compressed_name;
|
||||
const char *name;
|
||||
unsigned char *start;
|
||||
dwarf_vma address;
|
||||
dwarf_size_type size;
|
||||
};
|
||||
|
||||
/* A structure containing the name of a debug section
|
||||
and a pointer to a function that can decode it. */
|
||||
struct dwarf_section_display
|
||||
{
|
||||
struct dwarf_section section;
|
||||
int (*display) (struct dwarf_section *, void *);
|
||||
int *enabled;
|
||||
unsigned int relocate : 1;
|
||||
};
|
||||
|
||||
enum dwarf_section_display_enum
|
||||
{
|
||||
abbrev = 0,
|
||||
@@ -156,9 +132,45 @@ enum dwarf_section_display_enum
|
||||
trace_info,
|
||||
trace_abbrev,
|
||||
trace_aranges,
|
||||
info_dwo,
|
||||
abbrev_dwo,
|
||||
types_dwo,
|
||||
line_dwo,
|
||||
loc_dwo,
|
||||
macro_dwo,
|
||||
macinfo_dwo,
|
||||
str_dwo,
|
||||
str_index,
|
||||
str_index_dwo,
|
||||
debug_addr,
|
||||
max
|
||||
};
|
||||
|
||||
struct dwarf_section
|
||||
{
|
||||
/* A debug section has a different name when it's stored compressed
|
||||
or not. COMPRESSED_NAME and UNCOMPRESSED_NAME are the two
|
||||
possibilities. NAME is set to whichever one is used for this
|
||||
input file, as determined by load_debug_section(). */
|
||||
const char *uncompressed_name;
|
||||
const char *compressed_name;
|
||||
const char *name;
|
||||
unsigned char *start;
|
||||
dwarf_vma address;
|
||||
dwarf_size_type size;
|
||||
enum dwarf_section_display_enum abbrev_sec;
|
||||
};
|
||||
|
||||
/* A structure containing the name of a debug section
|
||||
and a pointer to a function that can decode it. */
|
||||
struct dwarf_section_display
|
||||
{
|
||||
struct dwarf_section section;
|
||||
int (*display) (struct dwarf_section *, void *);
|
||||
int *enabled;
|
||||
unsigned int relocate : 1;
|
||||
};
|
||||
|
||||
extern struct dwarf_section_display debug_displays [];
|
||||
|
||||
/* This structure records the information that
|
||||
@@ -170,6 +182,12 @@ typedef struct
|
||||
int dwarf_version;
|
||||
dwarf_vma cu_offset;
|
||||
dwarf_vma base_address;
|
||||
/* This field is filled in when reading the attribute DW_AT_GNU_addr_base and
|
||||
is used with the form DW_AT_GNU_FORM_addr_index. */
|
||||
dwarf_vma addr_base;
|
||||
/* This field is filled in when reading the attribute DW_AT_GNU_ranges_base and
|
||||
is used when calculating ranges. */
|
||||
dwarf_vma ranges_base;
|
||||
/* This is an array of offsets to the location list table. */
|
||||
dwarf_vma * loc_offsets;
|
||||
int * have_frame_base;
|
||||
@@ -205,6 +223,8 @@ extern int do_wide;
|
||||
extern int dwarf_cutoff_level;
|
||||
extern unsigned long dwarf_start_die;
|
||||
|
||||
extern int dwarf_check;
|
||||
|
||||
extern void init_dwarf_regnames (unsigned int);
|
||||
extern void init_dwarf_regnames_i386 (void);
|
||||
extern void init_dwarf_regnames_x86_64 (void);
|
||||
|
||||
Reference in New Issue
Block a user