mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-28 23:39:35 +08:00
MIPS/readelf: Simplify GOT[1] data availability check
Unavailable data is handled gracefully in MIPS GOT processing done by `print_mips_got_entry', so all that is needed in special GOT[1] handling is to verify whether data can be retrieved for the purpose of the GNU marker check done with `byte_get'. Remove the extra error reporting code then, introduced with commit 75ec1fdbb797 ("Fix runtime seg-fault in readelf when parsing a corrupt MIPS binary.") in the course of addressing PR binutils/21344, and defer the error case to regular local GOT entry processing. binutils/ * readelf.c (process_mips_specific): Remove error reporting from GOT[1] processing.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2017-04-25 Maciej W. Rozycki <macro@imgtec.com>
|
||||||
|
|
||||||
|
* readelf.c (process_mips_specific): Remove error reporting from
|
||||||
|
GOT[1] processing.
|
||||||
|
|
||||||
2017-04-25 Maciej W. Rozycki <macro@imgtec.com>
|
2017-04-25 Maciej W. Rozycki <macro@imgtec.com>
|
||||||
|
|
||||||
* readelf.c (process_mips_specific): Remove null GOT data check.
|
* readelf.c (process_mips_specific): Remove null GOT data check.
|
||||||
|
@ -15500,24 +15500,20 @@ process_mips_specific (FILE * file)
|
|||||||
if (ent == (bfd_vma) -1)
|
if (ent == (bfd_vma) -1)
|
||||||
goto got_print_fail;
|
goto got_print_fail;
|
||||||
|
|
||||||
if (data)
|
/* Check for the MSB of GOT[1] being set, denoting a GNU object.
|
||||||
|
This entry will be used by some runtime loaders, to store the
|
||||||
|
module pointer. Otherwise this is an ordinary local entry.
|
||||||
|
PR 21344: Check for the entry being fully available before
|
||||||
|
fetching it. */
|
||||||
|
if (data
|
||||||
|
&& data + ent - pltgot + addr_size <= data_end
|
||||||
|
&& (byte_get (data + ent - pltgot, addr_size)
|
||||||
|
>> (addr_size * 8 - 1)) != 0)
|
||||||
{
|
{
|
||||||
/* PR 21344 */
|
ent = print_mips_got_entry (data, pltgot, ent, data_end);
|
||||||
if (data + ent - pltgot > data_end - addr_size)
|
printf (_(" Module pointer (GNU extension)\n"));
|
||||||
{
|
if (ent == (bfd_vma) -1)
|
||||||
error (_("Invalid got entry - %#lx - overflows GOT table\n"),
|
goto got_print_fail;
|
||||||
(long) ent);
|
|
||||||
goto got_print_fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (byte_get (data + ent - pltgot, addr_size)
|
|
||||||
>> (addr_size * 8 - 1) != 0)
|
|
||||||
{
|
|
||||||
ent = print_mips_got_entry (data, pltgot, ent, data_end);
|
|
||||||
printf (_(" Module pointer (GNU extension)\n"));
|
|
||||||
if (ent == (bfd_vma) -1)
|
|
||||||
goto got_print_fail;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
printf ("\n");
|
printf ("\n");
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user