[PATCH] bfd: xtensa: ignore overflow in hight part of const16 relocation
Max Filippov
jcmvbkbc@gmail.com
Tue Dec 11 22:25:00 GMT 2018
On Fri, Dec 7, 2018 at 1:38 PM Max Filippov <jcmvbkbc@gmail.com> wrote:
> On Fri, Dec 7, 2018 at 1:31 PM augustine.sterling@gmail.com
> <augustine.sterling@gmail.com> wrote:
> > On Fri, Dec 7, 2018 at 1:17 PM Max Filippov <jcmvbkbc@gmail.com> wrote:
> > This is generally OK. I would probably change the comment to, "Ignore
> > high sixteen bits". The way it is worded now it sounds like a 32-bit
> > overflow, so more than ~4GB.
>
> It is a 32-bit overflow of the relocated value, and when the value is
> shifted right by 16 to extract immediate field for the const16 it doesn't
> fit into that 16-bit field.
> So the fix is to ignore all bits above the bit 31 of the relocated value,
> i.e. to only use bits 16..31 for the const16 immediate.
I've applied this fix to master with the following commit message:
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.
--
Thanks.
-- Max
More information about the Binutils
mailing list