2005-09-02 H.J. Lu <hongjiu.lu@intel.com>
* readelf.c (debug_abbrev_contents): New. (debug_abbrev_size): Likewise. (load_debug_abbrev): Likewise. (free_debug_abbrev): Likewise. (process_debug_info): Use them.
This commit is contained in:
parent
8f06b2d82f
commit
a841cf65e9
|
@ -1,3 +1,11 @@
|
||||||
|
2005-09-02 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
* readelf.c (debug_abbrev_contents): New.
|
||||||
|
(debug_abbrev_size): Likewise.
|
||||||
|
(load_debug_abbrev): Likewise.
|
||||||
|
(free_debug_abbrev): Likewise.
|
||||||
|
(process_debug_info): Use them.
|
||||||
|
|
||||||
2005-08-17 H.J. Lu <hongjiu.lu@intel.com>
|
2005-08-17 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR binutils/1179
|
PR binutils/1179
|
||||||
|
|
|
@ -7658,6 +7658,41 @@ free_debug_range (void)
|
||||||
debug_range_size = 0;
|
debug_range_size = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned char *debug_abbrev_contents;
|
||||||
|
static unsigned long debug_abbrev_size;
|
||||||
|
|
||||||
|
static void
|
||||||
|
load_debug_abbrev (FILE *file)
|
||||||
|
{
|
||||||
|
Elf_Internal_Shdr *sec;
|
||||||
|
|
||||||
|
/* If it is already loaded, do nothing. */
|
||||||
|
if (debug_abbrev_contents != NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
/* Locate the .debug_ranges section. */
|
||||||
|
sec = find_section (".debug_abbrev");
|
||||||
|
if (sec == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
debug_abbrev_size = sec->sh_size;
|
||||||
|
|
||||||
|
debug_abbrev_contents = get_data (NULL, file, sec->sh_offset, 1,
|
||||||
|
sec->sh_size,
|
||||||
|
_("debug_abbrev section data"));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
free_debug_abbrev (void)
|
||||||
|
{
|
||||||
|
if (debug_abbrev_contents == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
free ((char *) debug_abbrev_contents);
|
||||||
|
debug_abbrev_contents = NULL;
|
||||||
|
debug_abbrev_size = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Apply addends of RELA relocations. */
|
/* Apply addends of RELA relocations. */
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
@ -9051,6 +9086,13 @@ process_debug_info (Elf_Internal_Shdr *section, unsigned char *start,
|
||||||
load_debug_range (file);
|
load_debug_range (file);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
load_debug_abbrev (file);
|
||||||
|
if (debug_abbrev_contents == NULL)
|
||||||
|
{
|
||||||
|
warn (_("Unable to locate .debug_abbrev section!\n"));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (section_begin = start, unit = 0; start < end; unit++)
|
for (section_begin = start, unit = 0; start < end; unit++)
|
||||||
{
|
{
|
||||||
DWARF2_Internal_CompUnit compunit;
|
DWARF2_Internal_CompUnit compunit;
|
||||||
|
@ -9132,29 +9174,10 @@ process_debug_info (Elf_Internal_Shdr *section, unsigned char *start,
|
||||||
|
|
||||||
free_abbrevs ();
|
free_abbrevs ();
|
||||||
|
|
||||||
/* Read in the abbrevs used by this compilation unit. */
|
/* Process the abbrevs used by this compilation unit. */
|
||||||
{
|
process_abbrev_section
|
||||||
Elf_Internal_Shdr *sec;
|
(debug_abbrev_contents + compunit.cu_abbrev_offset,
|
||||||
unsigned char *begin;
|
debug_abbrev_contents + debug_abbrev_size);
|
||||||
|
|
||||||
/* Locate the .debug_abbrev section and process it. */
|
|
||||||
sec = find_section (".debug_abbrev");
|
|
||||||
if (sec == NULL)
|
|
||||||
{
|
|
||||||
warn (_("Unable to locate .debug_abbrev section!\n"));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
begin = get_data (NULL, file, sec->sh_offset, 1, sec->sh_size,
|
|
||||||
_("debug_abbrev section data"));
|
|
||||||
if (!begin)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
process_abbrev_section (begin + compunit.cu_abbrev_offset,
|
|
||||||
begin + sec->sh_size);
|
|
||||||
|
|
||||||
free (begin);
|
|
||||||
}
|
|
||||||
|
|
||||||
level = 0;
|
level = 0;
|
||||||
while (tags < start)
|
while (tags < start)
|
||||||
|
@ -9228,6 +9251,8 @@ process_debug_info (Elf_Internal_Shdr *section, unsigned char *start,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
free_debug_abbrev ();
|
||||||
|
|
||||||
/* Set num_debug_info_entries here so that it can be used to check if
|
/* Set num_debug_info_entries here so that it can be used to check if
|
||||||
we need to process .debug_loc and .debug_ranges sections. */
|
we need to process .debug_loc and .debug_ranges sections. */
|
||||||
if ((do_loc || do_debug_loc || do_debug_ranges)
|
if ((do_loc || do_debug_loc || do_debug_ranges)
|
||||||
|
|
Loading…
Reference in New Issue