RFC: readelf -x NAME
Daniel Jacobowitz
drow@false.org
Fri Nov 11 21:20:00 GMT 2005
More information about the Binutils mailing list
Fri Nov 11 21:20:00 GMT 2005
- Previous message (by thread): [PATCH] objcopy/strip option to retain file symbols
- Next message (by thread): RFC: readelf -x NAME
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
I like to use readelf -x when examining certain little-endian sections, since it uses a much friendlier byte order than objdump by default. But every time I do this it drives me crazy that I need to look up the section indices. So I finally fixed that. This patch allows -x NAME to dump sections by name. Ambiguities are resolved in favor of section numbers. OK? Comments? -- Daniel Jacobowitz CodeSourcery, LLC 2005-11-11 Daniel Jacobowitz <dan@codesourcery.com> * readelf.c (struct dump_list_entry, request_dump_byname) (initialise_dumps_byname): New. (parse_args): Call request_dump_byname. (process_section_contents): Call initialise_dumps_byname. * doc/binutils.texi (readelf): Mention -x NAME. * NEWS: Likewise. Index: src/binutils/doc/binutils.texi =================================================================== --- src.orig/binutils/doc/binutils.texi 2005-10-18 17:26:35.000000000 -0400 +++ src/binutils/doc/binutils.texi 2005-11-11 16:15:02.000000000 -0500 @@ -3324,7 +3324,7 @@ readelf [@option{-a}|@option{--all}] [@option{-V}|@option{--version-info}] [@option{-A}|@option{--arch-specific}] [@option{-D}|@option{--use-dynamic}] - [@option{-x} <number>|@option{--hex-dump=}<number>] + [@option{-x} <number or name>|@option{--hex-dump=}<number or name>] [@option{-w[liaprmfFsoR]}| @option{--debug-dump}[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges]] [@option{-I}|@option{-histogram}] @@ -3444,9 +3444,11 @@ When displaying symbols, this option mak symbol table in the file's dynamic section, rather than the one in the symbols section. -@item -x <number> -@itemx --hex-dump=<number> +@item -x <number or name> +@itemx --hex-dump=<number or name> Displays the contents of the indicated section as a hexadecimal dump. +A number identifies a particular section by index in the section table; +any other string identifies all sections with that name in the object file. @item -w[liaprmfFsoR] @itemx --debug-dump[=line,=info,=abbrev,=pubnames,=aranges,=macro,=frames,=frames-interp,=str,=loc,=Ranges] Index: src/binutils/readelf.c =================================================================== --- src.orig/binutils/readelf.c 2005-10-18 17:26:34.000000000 -0400 +++ src/binutils/readelf.c 2005-11-11 16:10:56.000000000 -0500 @@ -177,6 +177,16 @@ static size_t group_count; static struct group *section_groups; static struct group **section_headers_groups; +/* A linked list of the section names for which dumps were requested + by name. */ +struct dump_list_entry +{ + char *name; + int type; + struct dump_list_entry *next; +}; +static struct dump_list_entry *dump_sects_byname; + /* A dynamic array of flags indicating for which sections a hex dump has been requested (via the -x switch) and/or a disassembly dump (via the -i switch). */ @@ -185,8 +195,9 @@ unsigned num_cmdline_dump_sects = 0; /* A dynamic array of flags indicating for which sections a dump of some kind has been requested. It is reset on a per-object file - basis and then initialised from the cmdline_dump_sects array and - the results of interpreting the -w switch. */ + basis and then initialised from the cmdline_dump_sects array, + the results of interpreting the -w switch, and the + dump_sects_byname list. */ char *dump_sects = NULL; unsigned int num_dump_sects = 0; @@ -2658,6 +2669,27 @@ request_dump (unsigned int section, int return; } +/* Request a dump by section name. */ + +static void +request_dump_byname (const char *section, int type) +{ + struct dump_list_entry *new_request; + + new_request = malloc (sizeof (struct dump_list_entry)); + if (!new_request) + error (_("Out of memory allocating dump request table.")); + + new_request->name = strdup (section); + if (!new_request->name) + error (_("Out of memory allocating dump request table.")); + + new_request->type = type; + + new_request->next = dump_sects_byname; + dump_sects_byname = new_request; +} + static void parse_args (int argc, char **argv) { @@ -2745,11 +2777,10 @@ parse_args (int argc, char **argv) do_dump++; section = strtoul (optarg, & cp, 0); if (! *cp && section >= 0) - { - request_dump (section, HEX_DUMP); - break; - } - goto oops; + request_dump (section, HEX_DUMP); + else + request_dump_byname (optarg, HEX_DUMP); + break; case 'w': do_dump++; if (optarg == 0) @@ -2913,7 +2944,9 @@ parse_args (int argc, char **argv) do_wide++; break; default: +#ifdef SUPPORT_DISASSEMBLY oops: +#endif /* xgettext:c-format */ error (_("Invalid option '-%c'\n"), c); /* Drop through. */ @@ -7502,6 +7535,32 @@ display_debug_section (Elf_Internal_Shdr return result; } +/* Set DUMP_SECTS for all sections where dumps were requested + based on section name. */ + +static void +initialise_dumps_byname (void) +{ + struct dump_list_entry *cur; + + for (cur = dump_sects_byname; cur; cur = cur->next) + { + unsigned int i; + int any; + + for (i = 0, any = 0; i < elf_header.e_shnum; i++) + if (streq (SECTION_NAME (section_headers + i), cur->name)) + { + request_dump (i, cur->type); + any = 1; + } + + if (!any) + warn (_("Section '%s' was not dumped because it does not exist!\n"), + cur->name); + } +} + static void process_section_contents (FILE *file) { @@ -7511,6 +7570,8 @@ process_section_contents (FILE *file) if (! do_dump) return; + initialise_dumps_byname (); + for (i = 0, section = section_headers; i < elf_header.e_shnum && i < num_dump_sects; i++, section++) Index: src/binutils/NEWS =================================================================== --- src.orig/binutils/NEWS 2005-10-18 17:26:34.000000000 -0400 +++ src/binutils/NEWS 2005-11-11 16:16:41.000000000 -0500 @@ -1,5 +1,7 @@ -*- text -*- +* Add "-x NAME" to readelf in addition to "-x NUMBER". + * Add -i and -t switches to cxxfilt. -i disables the display of implementation specific extra demangling information (if any) and -t disables the demangling of types.
- Previous message (by thread): [PATCH] objcopy/strip option to retain file symbols
- Next message (by thread): RFC: readelf -x NAME
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list