This is the mail archive of the
binutils@sources.redhat.com
mailing list for the binutils project.
Re: "make check" failures on Linux/x86
The array size calculation was wrong.
* readelf.c (get_32bit_dynamic_section): Correct number of entries
translated from external to internal form.
(get_64bit_dynamic_section): Likewise.
Index: binutils/readelf.c
===================================================================
RCS file: /cvs/src/src/binutils/readelf.c,v
retrieving revision 1.241
diff -u -p -r1.241 readelf.c
--- binutils/readelf.c 18 Jun 2004 17:18:59 -0000 1.241
+++ binutils/readelf.c 22 Jun 2004 05:15:10 -0000
@@ -4656,9 +4656,8 @@ dynamic_section_ia64_val (Elf_Internal_D
static int
get_32bit_dynamic_section (FILE *file)
{
- Elf32_External_Dyn *edyn;
+ Elf32_External_Dyn *edyn, *ext;
Elf_Internal_Dyn *entry;
- bfd_size_type i;
edyn = get_data (NULL, file, dynamic_addr, dynamic_size,
_("dynamic section"));
@@ -4674,12 +4673,12 @@ get_32bit_dynamic_section (FILE *file)
return 0;
}
- for (i = 0, entry = dynamic_section;
- i < dynamic_size;
- i++, entry++)
+ for (ext = edyn, entry = dynamic_section;
+ (char *) ext < (char *) edyn + dynamic_size;
+ ext++, entry++)
{
- entry->d_tag = BYTE_GET (edyn[i].d_tag);
- entry->d_un.d_val = BYTE_GET (edyn[i].d_un.d_val);
+ entry->d_tag = BYTE_GET (ext->d_tag);
+ entry->d_un.d_val = BYTE_GET (ext->d_un.d_val);
}
free (edyn);
@@ -4690,9 +4689,8 @@ get_32bit_dynamic_section (FILE *file)
static int
get_64bit_dynamic_section (FILE *file)
{
- Elf64_External_Dyn *edyn;
+ Elf64_External_Dyn *edyn, *ext;
Elf_Internal_Dyn *entry;
- bfd_size_type i;
edyn = get_data (NULL, file, dynamic_addr, dynamic_size,
_("dynamic section"));
@@ -4708,12 +4706,12 @@ get_64bit_dynamic_section (FILE *file)
return 0;
}
- for (i = 0, entry = dynamic_section;
- i < dynamic_size;
- i++, entry++)
+ for (ext = edyn, entry = dynamic_section;
+ (char *) ext < (char *) edyn + dynamic_size;
+ ext++, entry++)
{
- entry->d_tag = BYTE_GET8 (edyn[i].d_tag);
- entry->d_un.d_val = BYTE_GET8 (edyn[i].d_un.d_val);
+ entry->d_tag = BYTE_GET8 (ext->d_tag);
+ entry->d_un.d_val = BYTE_GET8 (ext->d_un.d_val);
}
free (edyn);
--
Alan Modra
IBM OzLabs - Linux Technology Centre