summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland McGrath <[email protected]>2009-06-28 14:48:02 -0700
committerRoland McGrath <[email protected]>2009-06-28 14:48:02 -0700
commit5dbccdbeba148960ff97a96088894ec46add70c6 (patch)
treef7084fb85404c414d2d897b7ae8c24d6b2f5c33a
parent8d7432288a321d00cc12dbbfa302285f03c68621 (diff)
readelf: Add -N option, speeds up DWARF printing without address->name lookups.
-rw-r--r--NEWS2
-rw-r--r--src/ChangeLog6
-rw-r--r--src/readelf.c11
3 files changed, 18 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index e3106f71..2933d35a 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,8 @@ libelf: Add elf_getshdrnum alias for elf_getshnum and elf_getshdrstrndx alias
for elf_getshstrndx and deprecate original names. Sun screwed up
their implementation and asked for a solution.
+readelf: Add -N option, speeds up DWARF printing without address->name lookups.
+
Version 0.141:
libebl: sparc backend fixes;
diff --git a/src/ChangeLog b/src/ChangeLog
index f74b31d5..a1078ab6 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,9 @@
+2009-06-28 Roland McGrath <[email protected]>
+
+ * readelf.c (print_address_names): New static variable.
+ (options, parse_opt): Grok -N/--numeric-addresses to clear it.
+ (format_dwarf_addr): Don't look up name if !print_address_names.
+
2009-06-13 Ulrich Drepper <[email protected]>
* ldgeneric.c: Don't use deprecated libelf functions.
diff --git a/src/readelf.c b/src/readelf.c
index ca9772e4..2ab2ab58 100644
--- a/src/readelf.c
+++ b/src/readelf.c
@@ -100,6 +100,8 @@ static const struct argp_option options[] =
0 },
{ NULL, 0, NULL, 0, N_("Output control:"), 0 },
+ { "numeric-addresses", 'N', NULL, 0,
+ N_("Do not find symbol names for addresses in DWARF data"), 0 },
{ NULL, 0, NULL, 0, NULL, 0 }
};
@@ -165,6 +167,9 @@ static bool print_archive_index;
/* True if any of the control options except print_archive_index is set. */
static bool any_control_option;
+/* True if we should print addresses from DWARF in symbolic form. */
+static bool print_address_names = true;
+
/* Select printing of debugging sections. */
static enum section_e
{
@@ -406,6 +411,9 @@ parse_opt (int key, char *arg,
add_dump_section (arg);
any_control_option = true;
break;
+ case 'N':
+ print_address_names = false;
+ break;
case ARGP_KEY_NO_ARGS:
fputs (gettext ("Missing file name.\n"), stderr);
goto do_argp_help;
@@ -3061,7 +3069,8 @@ format_dwarf_addr (Dwfl_Module *dwflmod,
{
/* See if there is a name we can give for this address. */
GElf_Sym sym;
- const char *name = dwfl_module_addrsym (dwflmod, address, &sym, NULL);
+ const char *name = print_address_names
+ ? dwfl_module_addrsym (dwflmod, address, &sym, NULL) : NULL;
if (name != NULL)
sym.st_value = address - sym.st_value;