Display the contents of a .debug.macinfo section

This commit is contained in:
Nick Clifton
2001-07-05 07:49:05 +00:00
parent 4ad0936356
commit e0c60db230
5 changed files with 146 additions and 17 deletions

View File

@@ -119,6 +119,7 @@ int do_debug_pubnames;
int do_debug_aranges;
int do_debug_frames;
int do_debug_frames_interp;
int do_debug_macinfo;
int do_arch;
int do_notes;
int is_32bit_elf;
@@ -210,6 +211,7 @@ static int display_debug_lines PARAMS ((Elf32_Internal_Sh
static int display_debug_abbrev PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_aranges PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_frames PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static int display_debug_macinfo PARAMS ((Elf32_Internal_Shdr *, unsigned char *, FILE *));
static unsigned char * process_abbrev_section PARAMS ((unsigned char *, unsigned char *));
static unsigned long read_leb128 PARAMS ((unsigned char *, int *, int));
static int process_extended_line_op PARAMS ((unsigned char *, int, int));
@@ -2019,7 +2021,7 @@ usage ()
fprintf (stdout, _(" -D or --use-dynamic Use the dynamic section info when displaying symbols\n"));
fprintf (stdout, _(" -x <number> or --hex-dump=<number>\n"));
fprintf (stdout, _(" Dump the contents of section <number>\n"));
fprintf (stdout, _(" -w[liaprf] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=frames]\n"));
fprintf (stdout, _(" -w[liaprmf] or --debug-dump[=line,=info,=abbrev,=pubnames,=ranges,=macro,=frames]\n"));
fprintf (stdout, _(" Display the contents of DWARF2 debug sections\n"));
#ifdef SUPPORT_DISASSEMBLY
fprintf (stdout, _(" -i <number> or --instruction-dump=<number>\n"));
@@ -2189,6 +2191,11 @@ parse_args (argc, argv)
do_debug_frames = 1;
break;
case 'm':
case 'M':
do_debug_macinfo = 1;
break;
default:
warn (_("Unrecognised debug option '%s'\n"), optarg);
break;
@@ -2935,7 +2942,7 @@ process_section_headers (file)
}
else if ((do_debugging || do_debug_info || do_debug_abbrevs
|| do_debug_lines || do_debug_pubnames || do_debug_aranges
|| do_debug_frames)
|| do_debug_frames || do_debug_macinfo)
&& strncmp (name, ".debug_", 7) == 0)
{
name += 7;
@@ -2947,6 +2954,7 @@ process_section_headers (file)
|| (do_debug_pubnames && (strcmp (name, "pubnames") == 0))
|| (do_debug_aranges && (strcmp (name, "aranges") == 0))
|| (do_debug_frames && (strcmp (name, "frame") == 0))
|| (do_debug_macinfo && (strcmp (name, "macinfo") == 0))
)
request_dump (i, DEBUG_DUMP);
}
@@ -6264,6 +6272,80 @@ process_abbrev_section (start, end)
}
static int
display_debug_macinfo (section, start, file)
Elf32_Internal_Shdr * section;
unsigned char * start;
FILE * file ATTRIBUTE_UNUSED;
{
unsigned char * end = start + section->sh_size;
unsigned char * curr = start;
unsigned int bytes_read;
enum dwarf_macinfo_record_type op;
printf (_("Contents of the %s section:\n\n"), SECTION_NAME (section));
while (curr < end)
{
unsigned int lineno;
const char * string;
op = * curr;
curr ++;
switch (op)
{
case DW_MACINFO_start_file:
{
unsigned int filenum;
lineno = read_leb128 (curr, & bytes_read, 0);
curr += bytes_read;
filenum = read_leb128 (curr, & bytes_read, 0);
curr += bytes_read;
printf (_(" DW_MACINFO_start_file - lineno: %d filenum: %d\n"), lineno, filenum);
}
break;
case DW_MACINFO_end_file:
printf (_(" DW_MACINFO_end_file\n"));
break;
case DW_MACINFO_define:
lineno = read_leb128 (curr, & bytes_read, 0);
curr += bytes_read;
string = curr;
curr += strlen (string) + 1;
printf (_(" DW_MACINFO_define - lineno : %d macro : %s\n"), lineno, string);
break;
case DW_MACINFO_undef:
lineno = read_leb128 (curr, & bytes_read, 0);
curr += bytes_read;
string = curr;
curr += strlen (string) + 1;
printf (_(" DW_MACINFO_undef - lineno : %d macro : %s\n"), lineno, string);
break;
case DW_MACINFO_vendor_ext:
{
unsigned int constant;
constant = read_leb128 (curr, & bytes_read, 0);
curr += bytes_read;
string = curr;
curr += strlen (string) + 1;
printf (_(" DW_MACINFO_vendor_ext - constant : %d string : %s\n"), constant, string);
}
break;
}
}
return 1;
}
static int
display_debug_abbrev (section, start, file)
Elf32_Internal_Shdr * section;
@@ -7846,7 +7928,7 @@ debug_displays[] =
{ ".debug_pubnames", display_debug_pubnames, NULL },
{ ".debug_frame", display_debug_frames, NULL },
{ ".eh_frame", display_debug_frames, NULL },
{ ".debug_macinfo", display_debug_not_supported, NULL },
{ ".debug_macinfo", display_debug_macinfo, NULL },
{ ".debug_str", display_debug_not_supported, NULL },
{ ".debug_static_func", display_debug_not_supported, NULL },
{ ".debug_static_vars", display_debug_not_supported, NULL },