From: Roland McGrath Date: Fri, 21 Aug 2009 10:16:32 +0000 (-0700) Subject: Don't print raw block contents for locations we decode and print. X-Git-Tag: elfutils-0.143~29 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2d13ea2af88692700347109ffd6431d76218c2d1;p=platform%2Fupstream%2Felfutils.git Don't print raw block contents for locations we decode and print. --- diff --git a/src/ChangeLog b/src/ChangeLog index c0ea003..7b9970c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,8 @@ +2009-08-21 Roland McGrath + + * readelf.c (attr_callback): Use print_block only when we don't use + print_ops. + 2009-08-14 Roland McGrath * ar.c (do_oper_extract): Use pathconf instead of statfs. diff --git a/src/readelf.c b/src/readelf.c index b0f8fb0..e5b67b2 100644 --- a/src/readelf.c +++ b/src/readelf.c @@ -3065,12 +3065,14 @@ print_attributes (Ebl *ebl, const GElf_Ehdr *ehdr) static char * format_dwarf_addr (Dwfl_Module *dwflmod, - int address_size, Dwarf_Addr address) + int address_size, Dwarf_Addr address, bool tls) { /* See if there is a name we can give for this address. */ GElf_Sym sym; const char *name = print_address_names - ? dwfl_module_addrsym (dwflmod, address, &sym, NULL) : NULL; + ? ((tls ? dwfl_module_addrsym_tls : dwfl_module_addrsym) + (dwflmod, address, &sym, NULL)) + : NULL; if (name != NULL) sym.st_value = address - sym.st_value; @@ -3932,7 +3934,10 @@ print_ops (Dwfl_Module *dwflmod, Dwarf *dbg, int indent, int indentrest, if (op == DW_OP_addr) { - char *a = format_dwarf_addr (dwflmod, 0, addr); + char *a = format_dwarf_addr + (dwflmod, 0, addr, + len > 0 && (*data == DW_OP_GNU_push_tls_address + || *data == DW_OP_form_tls_address)); printf ("%*s[%4" PRIuMAX "] %s %s\n", indent, "", (uintmax_t) offset, known[op], a); free (a); @@ -4322,7 +4327,7 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, if (begin == (Dwarf_Addr) -1l) /* Base address entry. */ { - char *b = format_dwarf_addr (dwflmod, address_size, end); + char *b = format_dwarf_addr (dwflmod, address_size, end, false); printf (gettext (" [%6tx] base address %s\n"), offset, b); free (b); } @@ -4330,8 +4335,8 @@ print_debug_ranges_section (Dwfl_Module *dwflmod, first = true; else { - char *b = format_dwarf_addr (dwflmod, address_size, begin); - char *e = format_dwarf_addr (dwflmod, address_size, end); + char *b = format_dwarf_addr (dwflmod, address_size, begin, false); + char *e = format_dwarf_addr (dwflmod, address_size, end, false); /* We have an address range entry. */ if (first) /* First address range entry in a list. */ printf (gettext (" [%6tx] %s..%s\n"), offset, b, e); @@ -5120,7 +5125,8 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) dwarf_errmsg (-1)); return DWARF_CB_ABORT; } - char *a = format_dwarf_addr (cbargs->dwflmod, cbargs->addrsize, addr); + char *a = format_dwarf_addr (cbargs->dwflmod, cbargs->addrsize, + addr, false); printf (" %*s%-20s %s\n", (int) (level * 2), "", dwarf_attr_string (attr), a); free (a); @@ -5261,7 +5267,6 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) printf (" %*s%-20s ", (int) (level * 2), "", dwarf_attr_string (attr)); - print_block (block.length, block.data); switch (attr) { @@ -5288,6 +5293,10 @@ attr_callback (Dwarf_Attribute *attrp, void *arg) 12 + level * 2, 12 + level * 2, cbargs->addrsize, block.length, block.data); break; + + default: + print_block (block.length, block.data); + break; } break; @@ -5654,7 +5663,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, line += line_increment; address += address_increment; - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, false); printf (gettext ("\ special opcode %u: address+%u = %s, line%+d = %zu\n"), opcode, address_increment, a, line_increment, line); @@ -5694,7 +5703,7 @@ print_debug_line_section (Dwfl_Module *dwflmod, Ebl *ebl, else address = read_8ubyte_unaligned_inc (dbg, linep); { - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, false); printf (gettext ("set address to %s\n"), a); free (a); } @@ -5746,7 +5755,7 @@ define new file: dir=%u, mtime=%" PRIu64 ", length=%" PRIu64 ", name=%s\n"), get_uleb128 (u128, linep); address += minimum_instr_len * u128; { - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, false); printf (gettext ("advance address by %u to %s\n"), u128, a); free (a); @@ -5798,7 +5807,7 @@ define new file: dir=%u, mtime=%" PRIu64 ", length=%" PRIu64 ", name=%s\n"), * ((255 - opcode_base) / line_range)); address += u128; { - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, false); printf (gettext ("advance address by constant %u to %s\n"), u128, a); free (a); @@ -5814,7 +5823,7 @@ define new file: dir=%u, mtime=%" PRIu64 ", length=%" PRIu64 ", name=%s\n"), u128 = read_2ubyte_unaligned_inc (dbg, linep); address += u128; { - char *a = format_dwarf_addr (dwflmod, 0, address); + char *a = format_dwarf_addr (dwflmod, 0, address, false); printf (gettext ("\ advance address by fixed value %u to %s\n"), u128, a); @@ -5910,7 +5919,7 @@ print_debug_loc_section (Dwfl_Module *dwflmod, if (begin == (Dwarf_Addr) -1l) /* Base address entry. */ { - char *b = format_dwarf_addr (dwflmod, address_size, end); + char *b = format_dwarf_addr (dwflmod, address_size, end, false); printf (gettext (" [%6tx] base address %s\n"), offset, b); free (b); } @@ -5921,8 +5930,8 @@ print_debug_loc_section (Dwfl_Module *dwflmod, /* We have a location expression entry. */ uint_fast16_t len = read_2ubyte_unaligned_inc (dbg, readp); - char *b = format_dwarf_addr (dwflmod, address_size, begin); - char *e = format_dwarf_addr (dwflmod, address_size, end); + char *b = format_dwarf_addr (dwflmod, address_size, begin, false); + char *e = format_dwarf_addr (dwflmod, address_size, end, false); if (first) /* First entry in a list. */ printf (gettext (" [%6tx] %s..%s"), offset, b, e);