bfd: xtensa: ignore overflow in hight part of const16 relocation
32-bit constants loaded by two const16 opcodes that involve relocation (e.g. calculated as a sum of a symbol and a constant) may overflow, resulting in linking error with the following message: dangerous relocation: const16: cannot encode: (_start+0x70000000) They should wrap around instead. Limit const16 opcode immediate field to 16 least significant bits to implement this wrap around. bfd/ 2018-12-11 Max Filippov <jcmvbkbc@gmail.com> * elf32-xtensa.c (elf_xtensa_do_reloc): Limit const16 opcode immediate field to 16 least significant bits.
This commit is contained in:
parent
750b258ef8
commit
00863b8e40
|
@ -1,3 +1,8 @@
|
|||
2018-12-11 Max Filippov <jcmvbkbc@gmail.com>
|
||||
|
||||
* elf32-xtensa.c (elf_xtensa_do_reloc): Limit const16 opcode
|
||||
immediate field to 16 least significant bits.
|
||||
|
||||
2018-12-11 H.J. Lu <hongjiu.lu@intel.com>
|
||||
|
||||
* elf32-xc16x.c (elf32_xc16x_rtype_to_howto): New function.
|
||||
|
|
|
@ -1957,8 +1957,9 @@ elf_xtensa_do_reloc (reloc_howto_type *howto,
|
|||
}
|
||||
else if (opcode == get_const16_opcode ())
|
||||
{
|
||||
/* ALT used for high 16 bits. */
|
||||
newval = relocation >> 16;
|
||||
/* ALT used for high 16 bits.
|
||||
Ignore 32-bit overflow. */
|
||||
newval = (relocation >> 16) & 0xffff;
|
||||
opnd = 1;
|
||||
}
|
||||
else
|
||||
|
|
Loading…
Reference in New Issue