offset_in_range() question

H.J. Lu hjl.tools@gmail.com
Mon Jul 13 13:11:58 GMT 2020
On Mon, Jul 13, 2020 at 5:50 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> H.J.,
>
> the dependency on presence of an address size override, when the
> function is also used on immediate operands, struck me as being
> a possible source for problems. On 2009-09-15 you've made two
> changes to the construct in question, but I wonder whether even
> back then this code wasn't already dead. When, after quite a bit
> of playing, I couldn't come up with any immediate that this
> would go wrong on, I thought I'll give a try to removing that
> code altogether. And indeed - no fallout. Looking more closely
> then suggested that respective logic in optimize_imm() and
> optimize_disp() are already arranging for values to never need
> further massaging here.
>
> Do you agree that the code could be removed (see patch below in
> case of any uncertainty about what block of code I mean), or are
> you aware of things that might break this way?
>
> As an aside, I don't think the handling of out-of-range
> immediates is quite correct, but I'll get to this in more detail
> after thinking some more on possible solutions.
>
> Jan
>
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -2539,14 +2539,6 @@ offset_in_range (offsetT val, int size)
>      default: abort ();
>      }
>
> -#ifdef BFD64
> -  /* If BFD64, sign extend val for 32bit address mode.  */
> -  if (flag_code != CODE_64BIT
> -      || i.prefix[ADDR_PREFIX])
> -    if ((val & ~(((addressT) 2 << 31) - 1)) == 0)
> -      val = (val ^ ((addressT) 1 << 31)) - ((addressT) 1 << 31);
> -#endif
> -

This code came from

commit 3e73aa7c956514ce5bd5fa6320fb239229ac8a7b
Author: Jan Hubicka <jh@suse.cz>
Date:   Wed Dec 20 13:24:13 2000 +0000

            * tc-i386.h (i386_target_format): Define even for ELFs.

My changes only enabled it when BFD64 is defined.  If this code
dead, please replace it with abort for now.

Thanks.

>    if ((val & ~mask) != 0 && (val & ~mask) != ~mask)
>      {
>        char buf1[40], buf2[40];



-- 
H.J.


More information about the Binutils mailing list