This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] bfd: xtensa: ignore overflow in hight part of const16 relocation


On Fri, Dec 7, 2018 at 1:17 PM Max Filippov <jcmvbkbc@gmail.com> wrote:
>
> 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 whould wrap around instead.
>
> bfd/
> 2018-12-07  Max Filippov  <jcmvbkbc@gmail.com>
>
>         * elf32-xtensa.c (elf_xtensa_do_reloc): Only use bits 16..31 of
>         the relocated value for the high part const16 immediate.

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.

> ---
>  bfd/elf32-xtensa.c | 5 +++--
>  1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c
> index cf085b7b0751..de960cd3b8fc 100644
> --- a/bfd/elf32-xtensa.c
> +++ b/bfd/elf32-xtensa.c
> @@ -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
> --
> 2.11.0
>


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]