if (section->start == NULL)
return (const unsigned char *) _("<no .debug_str section>");
- /* DWARF sections under Mach-O have non-zero addresses. */
- offset -= section->address;
if (offset > section->size)
{
warn (_("DW_FORM_strp offset too big: %s\n"),
return (dwo ? _("<no .debug_str_offsets.dwo section>")
: _("<no .debug_str_offsets section>"));
- /* DWARF sections under Mach-O have non-zero addresses. */
- index_offset -= index_section->address;
if (this_set != NULL)
index_offset += this_set->section_offsets [DW_SECT_STR_OFFSETS];
if (index_offset > index_section->size)
case DW_FORM_ref8:
case DW_FORM_data8:
+ if (!do_loc)
{
dwarf_vma high_bits;
dwarf_vma utmp;
return data;
/* For some attributes we can display further information. */
- printf ("\t");
-
switch (attribute)
{
case DW_AT_inline:
+ printf ("\t");
switch (uvalue)
{
case DW_INL_not_inlined:
break;
case DW_AT_language:
+ printf ("\t");
switch (uvalue)
{
/* Ordered by the numeric value of these constants. */
break;
case DW_AT_encoding:
+ printf ("\t");
switch (uvalue)
{
case DW_ATE_void: printf ("(void)"); break;
break;
case DW_AT_accessibility:
+ printf ("\t");
switch (uvalue)
{
case DW_ACCESS_public: printf ("(public)"); break;
break;
case DW_AT_visibility:
+ printf ("\t");
switch (uvalue)
{
case DW_VIS_local: printf ("(local)"); break;
break;
case DW_AT_virtuality:
+ printf ("\t");
switch (uvalue)
{
case DW_VIRTUALITY_none: printf ("(none)"); break;
break;
case DW_AT_identifier_case:
+ printf ("\t");
switch (uvalue)
{
case DW_ID_case_sensitive: printf ("(case_sensitive)"); break;
break;
case DW_AT_calling_convention:
+ printf ("\t");
switch (uvalue)
{
case DW_CC_normal: printf ("(normal)"); break;
break;
case DW_AT_ordering:
+ printf ("\t");
switch (uvalue)
{
case -1: printf (_("(undefined)")); break;
if ((dwarf_version < 4
&& (form == DW_FORM_data4 || form == DW_FORM_data8))
|| form == DW_FORM_sec_offset)
- printf (_("(location list)"));
+ printf (_(" (location list)"));
/* Fall through. */
case DW_AT_allocated:
case DW_AT_associated:
{
int need_frame_base;
- printf ("(");
+ printf ("\t(");
need_frame_base = decode_location_expression (block_start,
pointer_size,
offset_size,
abbrev_number = read_uleb128 (section->start + uvalue, NULL, end);
- printf (_("[Abbrev Number: %ld"), abbrev_number);
+ printf (_("\t[Abbrev Number: %ld"), abbrev_number);
/* Don't look up abbrev for DW_FORM_ref_addr, as it very often will
use different abbrev table, and we don't track .debug_info chunks
yet. */
free_abbrevs ();
- /* Process the abbrevs used by this compilation unit. DWARF
- sections under Mach-O have non-zero addresses. */
+ /* Process the abbrevs used by this compilation unit. */
if (compunit.cu_abbrev_offset >= abbrev_size)
warn (_("Debug info is corrupted, abbrev offset (%lx) is larger than abbrev section size (%lx)\n"),
(unsigned long) compunit.cu_abbrev_offset,
return NULL;
}
+static const char *
+get_gdb_index_symbol_kind_name (gdb_index_symbol_kind kind)
+{
+ /* See gdb/gdb-index.h. */
+ static const char * const kinds[] =
+ {
+ N_ ("no info"),
+ N_ ("type"),
+ N_ ("variable"),
+ N_ ("function"),
+ N_ ("other"),
+ N_ ("unused5"),
+ N_ ("unused6"),
+ N_ ("unused7")
+ };
+
+ return _ (kinds[kind]);
+}
+
static int
-display_debug_pubnames (struct dwarf_section *section,
- void *file ATTRIBUTE_UNUSED)
+display_debug_pubnames_worker (struct dwarf_section *section,
+ void *file ATTRIBUTE_UNUSED,
+ int is_gnu)
{
DWARF2_Internal_PubNames names;
unsigned char *start = section->start;
printf (_(" Size of area in .debug_info section: %ld\n"),
(long) names.pn_size);
- printf (_("\n Offset\tName\n"));
+ if (is_gnu)
+ printf (_("\n Offset Kind Name\n"));
+ else
+ printf (_("\n Offset\tName\n"));
do
{
if (offset != 0)
{
data += offset_size;
- printf (" %-6lx\t%s\n", offset, data);
+ if (is_gnu)
+ {
+ unsigned int kind_data;
+ gdb_index_symbol_kind kind;
+ const char *kind_name;
+ int is_static;
+
+ SAFE_BYTE_GET (kind_data, data, 1, end);
+ data++;
+ /* GCC computes the kind as the upper byte in the CU index
+ word, and then right shifts it by the CU index size.
+ Left shift KIND to where the gdb-index.h accessor macros
+ can use it. */
+ kind_data <<= GDB_INDEX_CU_BITSIZE;
+ kind = GDB_INDEX_SYMBOL_KIND_VALUE (kind_data);
+ kind_name = get_gdb_index_symbol_kind_name (kind);
+ is_static = GDB_INDEX_SYMBOL_STATIC_VALUE (kind_data);
+ printf (" %-6lx %s,%-10s %s\n",
+ offset, is_static ? _("s") : _("g"),
+ kind_name, data);
+ }
+ else
+ printf (" %-6lx\t%s\n", offset, data);
data += strnlen ((char *) data, end - data) + 1;
}
}
return 1;
}
+static int
+display_debug_pubnames (struct dwarf_section *section, void *file)
+{
+ return display_debug_pubnames_worker (section, file, 0);
+}
+
+static int
+display_debug_gnu_pubnames (struct dwarf_section *section, void *file)
+{
+ return display_debug_pubnames_worker (section, file, 1);
+}
+
static int
display_debug_macinfo (struct dwarf_section *section,
void *file ATTRIBUTE_UNUSED)
if (!seen_first_offset)
error (_("No location lists in .debug_info section!\n"));
- /* DWARF sections under Mach-O have non-zero addresses. */
if (debug_information [first].num_loc_offsets > 0
- && debug_information [first].loc_offsets [0] != section->address)
+ && debug_information [first].loc_offsets [0] != 0)
warn (_("Location lists in %s section start at 0x%s\n"),
section->name,
dwarf_vmatoa ("x", debug_information [first].loc_offsets [0]));
== debug_information [i].loc_offsets [j])
continue;
has_frame_base = debug_information [i].have_frame_base [j];
- /* DWARF sections under Mach-O have non-zero addresses. */
- offset = debug_information [i].loc_offsets [j] - section->address;
+ offset = debug_information [i].loc_offsets [j];
next = section_begin + offset;
base_address = debug_information [i].base_address;
qsort (range_entries, num_range_list, sizeof (*range_entries),
range_entry_compar);
- /* DWARF sections under Mach-O have non-zero addresses. */
- if (dwarf_check != 0 && range_entries[0].ranges_offset != section->address)
+ if (dwarf_check != 0 && range_entries[0].ranges_offset != 0)
warn (_("Range lists in %s section start at 0x%lx\n"),
section->name, range_entries[0].ranges_offset);
pointer_size = debug_info_p->pointer_size;
- /* DWARF sections under Mach-O have non-zero addresses. */
- offset = range_entry->ranges_offset - section->address;
+ offset = range_entry->ranges_offset;
next = section_begin + offset;
base_address = debug_info_p->base_address;
else
printf ("%c%lu", num_cus > 1 ? '\t' : ' ', (unsigned long) cu);
- switch (kind)
- {
- case GDB_INDEX_SYMBOL_KIND_NONE:
- printf (_(" [no symbol information]"));
- break;
- case GDB_INDEX_SYMBOL_KIND_TYPE:
- printf (is_static
- ? _(" [static type]")
- : _(" [global type]"));
- break;
- case GDB_INDEX_SYMBOL_KIND_VARIABLE:
- printf (is_static
- ? _(" [static variable]")
- : _(" [global variable]"));
- break;
- case GDB_INDEX_SYMBOL_KIND_FUNCTION:
- printf (is_static
- ? _(" [static function]")
- : _(" [global function]"));
- break;
- case GDB_INDEX_SYMBOL_KIND_OTHER:
- printf (is_static
- ? _(" [static other]")
- : _(" [global other]"));
- break;
- default:
- printf (is_static
- ? _(" [static unknown: %d]")
- : _(" [global unknown: %d]"),
- kind);
- break;
- }
+ printf (" [%s, %s]",
+ is_static ? _("static") : _("global"),
+ get_gdb_index_symbol_kind_name (kind));
if (num_cus > 1)
printf ("\n");
}
display_debug_lines, &do_debug_lines, 1 },
{ { ".debug_pubnames", ".zdebug_pubnames", NULL, NULL, 0, 0, 0 },
display_debug_pubnames, &do_debug_pubnames, 0 },
+ { { ".debug_gnu_pubnames", ".zdebug_gnu_pubnames", NULL, NULL, 0, 0, 0 },
+ display_debug_gnu_pubnames, &do_debug_pubnames, 0 },
{ { ".eh_frame", "", NULL, NULL, 0, 0, 0 },
display_debug_frames, &do_debug_frames, 1 },
{ { ".debug_macinfo", ".zdebug_macinfo", NULL, NULL, 0, 0, 0 },
display_debug_loc, &do_debug_loc, 1 },
{ { ".debug_pubtypes", ".zdebug_pubtypes", NULL, NULL, 0, 0, 0 },
display_debug_pubnames, &do_debug_pubtypes, 0 },
+ { { ".debug_gnu_pubtypes", ".zdebug_gnu_pubtypes", NULL, NULL, 0, 0, 0 },
+ display_debug_gnu_pubnames, &do_debug_pubtypes, 0 },
{ { ".debug_ranges", ".zdebug_ranges", NULL, NULL, 0, 0, 0 },
display_debug_ranges, &do_debug_ranges, 1 },
{ { ".debug_static_func", ".zdebug_static_func", NULL, NULL, 0, 0, 0 },