mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-18 05:12:33 +08:00
* readelf.c (dynamic_nent): New variable.
(get_32bit_dynamic_section): Set it. (get_64bit_dynamic_section): Here too. (process_dynamic_section): Use it instead of dynamic_size. (process_syminfo): Likewise.
This commit is contained in:
@ -1,5 +1,11 @@
|
|||||||
2004-06-22 Alan Modra <amodra@bigpond.net.au>
|
2004-06-22 Alan Modra <amodra@bigpond.net.au>
|
||||||
|
|
||||||
|
* readelf.c (dynamic_nent): New variable.
|
||||||
|
(get_32bit_dynamic_section): Set it.
|
||||||
|
(get_64bit_dynamic_section): Here too.
|
||||||
|
(process_dynamic_section): Use it instead of dynamic_size.
|
||||||
|
(process_syminfo): Likewise.
|
||||||
|
|
||||||
* readelf.c (get_32bit_dynamic_section): Correct number of entries
|
* readelf.c (get_32bit_dynamic_section): Correct number of entries
|
||||||
translated from external to internal form.
|
translated from external to internal form.
|
||||||
(get_64bit_dynamic_section): Likewise.
|
(get_64bit_dynamic_section): Likewise.
|
||||||
|
@ -119,6 +119,7 @@ long archive_file_offset;
|
|||||||
unsigned long archive_file_size;
|
unsigned long archive_file_size;
|
||||||
unsigned long dynamic_addr;
|
unsigned long dynamic_addr;
|
||||||
bfd_size_type dynamic_size;
|
bfd_size_type dynamic_size;
|
||||||
|
unsigned int dynamic_nent;
|
||||||
char *dynamic_strings;
|
char *dynamic_strings;
|
||||||
char *string_table;
|
char *string_table;
|
||||||
unsigned long string_table_length;
|
unsigned long string_table_length;
|
||||||
@ -4664,7 +4665,8 @@ get_32bit_dynamic_section (FILE *file)
|
|||||||
if (!edyn)
|
if (!edyn)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
dynamic_section = malloc (dynamic_size * sizeof (Elf_Internal_Dyn));
|
dynamic_nent = dynamic_size / sizeof (*ext);
|
||||||
|
dynamic_section = malloc (dynamic_nent * sizeof (*entry));
|
||||||
|
|
||||||
if (dynamic_section == NULL)
|
if (dynamic_section == NULL)
|
||||||
{
|
{
|
||||||
@ -4697,7 +4699,8 @@ get_64bit_dynamic_section (FILE *file)
|
|||||||
if (!edyn)
|
if (!edyn)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
dynamic_section = malloc (dynamic_size * sizeof (Elf_Internal_Dyn));
|
dynamic_nent = dynamic_size / sizeof (*ext);
|
||||||
|
dynamic_section = malloc (dynamic_nent * sizeof (*entry));
|
||||||
|
|
||||||
if (dynamic_section == NULL)
|
if (dynamic_section == NULL)
|
||||||
{
|
{
|
||||||
@ -4757,7 +4760,6 @@ static int
|
|||||||
process_dynamic_section (FILE *file)
|
process_dynamic_section (FILE *file)
|
||||||
{
|
{
|
||||||
Elf_Internal_Dyn *entry;
|
Elf_Internal_Dyn *entry;
|
||||||
bfd_size_type i;
|
|
||||||
|
|
||||||
if (dynamic_size == 0)
|
if (dynamic_size == 0)
|
||||||
{
|
{
|
||||||
@ -4778,9 +4780,9 @@ process_dynamic_section (FILE *file)
|
|||||||
/* Find the appropriate symbol table. */
|
/* Find the appropriate symbol table. */
|
||||||
if (dynamic_symbols == NULL)
|
if (dynamic_symbols == NULL)
|
||||||
{
|
{
|
||||||
for (i = 0, entry = dynamic_section;
|
for (entry = dynamic_section;
|
||||||
i < dynamic_size;
|
entry < dynamic_section + dynamic_nent;
|
||||||
++i, ++entry)
|
++entry)
|
||||||
{
|
{
|
||||||
Elf_Internal_Shdr section;
|
Elf_Internal_Shdr section;
|
||||||
|
|
||||||
@ -4824,9 +4826,9 @@ process_dynamic_section (FILE *file)
|
|||||||
/* Similarly find a string table. */
|
/* Similarly find a string table. */
|
||||||
if (dynamic_strings == NULL)
|
if (dynamic_strings == NULL)
|
||||||
{
|
{
|
||||||
for (i = 0, entry = dynamic_section;
|
for (entry = dynamic_section;
|
||||||
i < dynamic_size;
|
entry < dynamic_section + dynamic_nent;
|
||||||
++i, ++entry)
|
++entry)
|
||||||
{
|
{
|
||||||
unsigned long offset;
|
unsigned long offset;
|
||||||
long str_tab_len;
|
long str_tab_len;
|
||||||
@ -4870,9 +4872,9 @@ process_dynamic_section (FILE *file)
|
|||||||
{
|
{
|
||||||
unsigned long syminsz = 0;
|
unsigned long syminsz = 0;
|
||||||
|
|
||||||
for (i = 0, entry = dynamic_section;
|
for (entry = dynamic_section;
|
||||||
i < dynamic_size;
|
entry < dynamic_section + dynamic_nent;
|
||||||
++i, ++entry)
|
++entry)
|
||||||
{
|
{
|
||||||
if (entry->d_tag == DT_SYMINENT)
|
if (entry->d_tag == DT_SYMINENT)
|
||||||
{
|
{
|
||||||
@ -4889,7 +4891,7 @@ process_dynamic_section (FILE *file)
|
|||||||
|
|
||||||
if (dynamic_syminfo_offset != 0 && syminsz != 0)
|
if (dynamic_syminfo_offset != 0 && syminsz != 0)
|
||||||
{
|
{
|
||||||
Elf_External_Syminfo *extsyminfo;
|
Elf_External_Syminfo *extsyminfo, *extsym;
|
||||||
Elf_Internal_Syminfo *syminfo;
|
Elf_Internal_Syminfo *syminfo;
|
||||||
|
|
||||||
/* There is a syminfo section. Read the data. */
|
/* There is a syminfo section. Read the data. */
|
||||||
@ -4906,11 +4908,12 @@ process_dynamic_section (FILE *file)
|
|||||||
}
|
}
|
||||||
|
|
||||||
dynamic_syminfo_nent = syminsz / sizeof (Elf_External_Syminfo);
|
dynamic_syminfo_nent = syminsz / sizeof (Elf_External_Syminfo);
|
||||||
for (i = 0, syminfo = dynamic_syminfo; i < dynamic_syminfo_nent;
|
for (syminfo = dynamic_syminfo, extsym = extsyminfo;
|
||||||
++i, ++syminfo)
|
syminfo < dynamic_syminfo + dynamic_syminfo_nent;
|
||||||
|
++syminfo, ++extsym)
|
||||||
{
|
{
|
||||||
syminfo->si_boundto = BYTE_GET (extsyminfo[i].si_boundto);
|
syminfo->si_boundto = BYTE_GET (extsym->si_boundto);
|
||||||
syminfo->si_flags = BYTE_GET (extsyminfo[i].si_flags);
|
syminfo->si_flags = BYTE_GET (extsym->si_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
free (extsyminfo);
|
free (extsyminfo);
|
||||||
@ -4918,14 +4921,14 @@ process_dynamic_section (FILE *file)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (do_dynamic && dynamic_addr)
|
if (do_dynamic && dynamic_addr)
|
||||||
printf (_("\nDynamic section at offset 0x%lx contains %ld entries:\n"),
|
printf (_("\nDynamic section at offset 0x%lx contains %u entries:\n"),
|
||||||
dynamic_addr, (long) dynamic_size);
|
dynamic_addr, dynamic_nent);
|
||||||
if (do_dynamic)
|
if (do_dynamic)
|
||||||
printf (_(" Tag Type Name/Value\n"));
|
printf (_(" Tag Type Name/Value\n"));
|
||||||
|
|
||||||
for (i = 0, entry = dynamic_section;
|
for (entry = dynamic_section;
|
||||||
i < dynamic_size;
|
entry < dynamic_section + dynamic_nent;
|
||||||
i++, entry++)
|
entry++)
|
||||||
{
|
{
|
||||||
if (do_dynamic)
|
if (do_dynamic)
|
||||||
{
|
{
|
||||||
@ -6282,7 +6285,7 @@ process_syminfo (FILE *file ATTRIBUTE_UNUSED)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (dynamic_syminfo[i].si_boundto > 0
|
if (dynamic_syminfo[i].si_boundto > 0
|
||||||
&& dynamic_syminfo[i].si_boundto < dynamic_size)
|
&& dynamic_syminfo[i].si_boundto < dynamic_nent)
|
||||||
{
|
{
|
||||||
print_symbol (10,
|
print_symbol (10,
|
||||||
dynamic_strings
|
dynamic_strings
|
||||||
|
Reference in New Issue
Block a user