aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2002-07-30 14:33:40 +0000
committerJakub Jelinek <jakub@redhat.com>2002-07-30 14:33:40 +0000
commit2979dc3446e3947ab15022d12aeeb67a4a87d95e (patch)
tree5b328f23048fc42a4eabeea1392d687864c099f3
parent704afa601f9abdd212d000ff61b1c6a32e085a0b (diff)
downloadfsf-binutils-gdb-2979dc3446e3947ab15022d12aeeb67a4a87d95e.zip
fsf-binutils-gdb-2979dc3446e3947ab15022d12aeeb67a4a87d95e.tar.gz
fsf-binutils-gdb-2979dc3446e3947ab15022d12aeeb67a4a87d95e.tar.bz2
* readelf.c (OPTION_DEBUG_DUMP): Define.
(options): Use it. (usage): Update help. (parse_args): Handle --debug-dump separately from -w. * doc/binutils.texi (readelf): Update documentation.
-rw-r--r--binutils/ChangeLog8
-rw-r--r--binutils/doc/binutils.texi6
-rw-r--r--binutils/readelf.c89
3 files changed, 98 insertions, 5 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog
index c3fc84d..7362803 100644
--- a/binutils/ChangeLog
+++ b/binutils/ChangeLog
@@ -1,3 +1,11 @@
+2002-07-30 Jakub Jelinek <jakub@redhat.com>
+
+ * readelf.c (OPTION_DEBUG_DUMP): Define.
+ (options): Use it.
+ (usage): Update help.
+ (parse_args): Handle --debug-dump separately from -w.
+ * doc/binutils.texi (readelf): Update documentation.
+
2002-07-25 Nick Clifton <nickc@redhat.com>
* po/es.po: Updated Spanish translation.
diff --git a/binutils/doc/binutils.texi b/binutils/doc/binutils.texi
index 7d7dda1..3006d9e 100644
--- a/binutils/doc/binutils.texi
+++ b/binutils/doc/binutils.texi
@@ -2864,7 +2864,7 @@ readelf [@option{-a}|@option{--all}]
[@option{-V}|@option{--version-info}]
[@option{-D}|@option{--use-dynamic}]
[@option{-x} <number>|@option{--hex-dump=}<number>]
- [@option{-w[liaprmfs]}|@option{--debug-dump}[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str]]
+ [@option{-w[liaprmfFso]}|@option{--debug-dump}[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc]]
[@option{-histogram}]
[@option{-v}|@option{--version}]
[@option{-W}|@option{--wide}]
@@ -2966,8 +2966,8 @@ symbols section.
@itemx --hex-dump=<number>
Displays the contents of the indicated section as a hexadecimal dump.
-@item -w[liaprmfs]
-@itemx --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str]
+@item -w[liaprmfFso]
+@itemx --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc]
Displays the contents of the debug sections in the file, if any are
present. If one of the optional letters or words follows the switch
then only data found in those specific sections will be dumped.
diff --git a/binutils/readelf.c b/binutils/readelf.c
index bffe6c7..d1c23da 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -2251,6 +2251,8 @@ get_section_type_name (sh_type)
}
}
+#define OPTION_DEBUG_DUMP 512
+
struct option options [] =
{
{"all", no_argument, 0, 'a'},
@@ -2270,7 +2272,7 @@ struct option options [] =
{"version-info", no_argument, 0, 'V'},
{"use-dynamic", no_argument, 0, 'D'},
{"hex-dump", required_argument, 0, 'x'},
- {"debug-dump", optional_argument, 0, 'w'},
+ {"debug-dump", optional_argument, 0, OPTION_DEBUG_DUMP},
{"unwind", no_argument, 0, 'u'},
#ifdef SUPPORT_DISASSEMBLY
{"instruction-dump", required_argument, 0, 'i'},
@@ -2305,7 +2307,8 @@ usage ()
-A --arch-specific Display architecture specific information (if any).\n\
-D --use-dynamic Use the dynamic section info when displaying symbols\n\
-x --hex-dump=<number> Dump the contents of section <number>\n\
- -w --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc]\n\
+ -w[liaprmfFso] or\n\
+ --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames,=str,=loc]\n\
Display the contents of DWARF2 debug sections\n"));
#ifdef SUPPORT_DISASSEMBLY
fprintf (stdout, _("\
@@ -2503,6 +2506,88 @@ parse_args (argc, argv)
}
}
break;
+ case OPTION_DEBUG_DUMP:
+ do_dump ++;
+ if (optarg == 0)
+ do_debugging = 1;
+ else
+ {
+ const char *debug_dump_opt[]
+ = { "line", "info", "abbrev", "pubnames", "ranges",
+ "macro", "frames", "frames-interp", "str", "loc", NULL };
+ unsigned int index;
+ const char *p;
+
+ do_debugging = 0;
+
+ p = optarg;
+ while (*p)
+ {
+ for (index = 0; debug_dump_opt[index]; index++)
+ {
+ size_t len = strlen (debug_dump_opt[index]);
+
+ if (strncmp (p, debug_dump_opt[index], len) == 0
+ && (p[len] == ',' || p[len] == '\0'))
+ {
+ switch (p[0])
+ {
+ case 'i':
+ do_debug_info = 1;
+ break;
+
+ case 'a':
+ do_debug_abbrevs = 1;
+ break;
+
+ case 'l':
+ if (p[1] == 'i')
+ do_debug_lines = 1;
+ else
+ do_debug_loc = 1;
+ break;
+
+ case 'p':
+ do_debug_pubnames = 1;
+ break;
+
+ case 'r':
+ do_debug_aranges = 1;
+ break;
+
+ case 'f':
+ if (len > 6)
+ do_debug_frames_interp = 1;
+ do_debug_frames = 1;
+ break;
+
+ case 'm':
+ do_debug_macinfo = 1;
+ break;
+
+ case 's':
+ do_debug_str = 1;
+ break;
+ }
+
+ p += len;
+ break;
+ }
+ }
+
+ if (debug_dump_opt[index] == NULL)
+ {
+ warn (_("Unrecognized debug option '%s'\n"), p);
+ p = strchr (p, ',');
+ if (p == NULL)
+ break;
+ }
+
+ if (*p == ',')
+ p++;
+ }
+ }
+ break;
#ifdef SUPPORT_DISASSEMBLY
case 'i':
do_dump ++;