mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-27 22:48:57 +08:00
bfin reloc offset checks
These all ought to use bfd_reloc_offset_in_range. In particular, replace the check using howto->size + 1u. * elf32-bfin.c (bfin_pcrel24_reloc): Use bfd_reloc_offset_in_range. (bfin_imm16_reloc, bfin_byte4_reloc, bfin_bfd_reloc), (bfin_final_link_relocate): Likewise.
This commit is contained in:
@ -59,9 +59,8 @@ bfin_pcrel24_reloc (bfd *abfd,
|
|||||||
reloc_howto_type *howto = reloc_entry->howto;
|
reloc_howto_type *howto = reloc_entry->howto;
|
||||||
asection *output_section;
|
asection *output_section;
|
||||||
bool relocatable = (output_bfd != NULL);
|
bool relocatable = (output_bfd != NULL);
|
||||||
bfd_size_type limit = bfd_get_section_limit_octets (abfd, input_section);
|
|
||||||
|
|
||||||
if (addr - 2 > limit || limit - (addr - 2) < 2)
|
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, addr - 2))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
if (bfd_is_und_section (symbol->section)
|
if (bfd_is_und_section (symbol->section)
|
||||||
@ -157,10 +156,9 @@ bfin_imm16_reloc (bfd *abfd,
|
|||||||
reloc_howto_type *howto = reloc_entry->howto;
|
reloc_howto_type *howto = reloc_entry->howto;
|
||||||
asection *output_section;
|
asection *output_section;
|
||||||
bool relocatable = (output_bfd != NULL);
|
bool relocatable = (output_bfd != NULL);
|
||||||
bfd_size_type limit = bfd_get_section_limit_octets (abfd, input_section);
|
|
||||||
|
|
||||||
/* Is the address of the relocation really within the section? */
|
/* Is the address of the relocation really within the section? */
|
||||||
if (reloc_addr > limit || limit - reloc_addr < 2)
|
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, reloc_addr))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
if (bfd_is_und_section (symbol->section)
|
if (bfd_is_und_section (symbol->section)
|
||||||
@ -229,10 +227,10 @@ bfin_byte4_reloc (bfd *abfd,
|
|||||||
bfd_vma output_base = 0;
|
bfd_vma output_base = 0;
|
||||||
asection *output_section;
|
asection *output_section;
|
||||||
bool relocatable = (output_bfd != NULL);
|
bool relocatable = (output_bfd != NULL);
|
||||||
bfd_size_type limit = bfd_get_section_limit_octets (abfd, input_section);
|
|
||||||
|
|
||||||
/* Is the address of the relocation really within the section? */
|
/* Is the address of the relocation really within the section? */
|
||||||
if (addr > limit || limit - addr < 4)
|
if (!bfd_reloc_offset_in_range (reloc_entry->howto, abfd, input_section,
|
||||||
|
addr))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
if (bfd_is_und_section (symbol->section)
|
if (bfd_is_und_section (symbol->section)
|
||||||
@ -297,10 +295,9 @@ bfin_bfd_reloc (bfd *abfd,
|
|||||||
reloc_howto_type *howto = reloc_entry->howto;
|
reloc_howto_type *howto = reloc_entry->howto;
|
||||||
asection *output_section;
|
asection *output_section;
|
||||||
bool relocatable = (output_bfd != NULL);
|
bool relocatable = (output_bfd != NULL);
|
||||||
bfd_size_type limit = bfd_get_section_limit_octets (abfd, input_section);
|
|
||||||
|
|
||||||
/* Is the address of the relocation really within the section? */
|
/* Is the address of the relocation really within the section? */
|
||||||
if (addr > limit || limit - addr < howto->size + 1u)
|
if (!bfd_reloc_offset_in_range (howto, abfd, input_section, addr))
|
||||||
return bfd_reloc_outofrange;
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
if (bfd_is_und_section (symbol->section)
|
if (bfd_is_und_section (symbol->section)
|
||||||
@ -1320,11 +1317,10 @@ bfin_final_link_relocate (Elf_Internal_Rela *rel, reloc_howto_type *howto,
|
|||||||
{
|
{
|
||||||
bfd_reloc_status_type r = bfd_reloc_ok;
|
bfd_reloc_status_type r = bfd_reloc_ok;
|
||||||
bfd_vma x;
|
bfd_vma x;
|
||||||
bfd_size_type limit = bfd_get_section_limit_octets (input_bfd,
|
|
||||||
input_section);
|
|
||||||
|
|
||||||
if (address - 2 > limit || limit - (address - 2) < 4)
|
if (!bfd_reloc_offset_in_range (howto, input_bfd, input_section,
|
||||||
return bfd_reloc_outofrange;
|
address - 2))
|
||||||
|
return bfd_reloc_outofrange;
|
||||||
|
|
||||||
value += addend;
|
value += addend;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user