[ARM] gas miscompiles ADR statement

Nick Clifton nickc@redhat.com
Tue Dec 3 00:28:00 GMT 2002


Hi Alan,

> I'm guilty.  The problem was introduced with my gas reloc rewrite.
> The following should fix it, but I'd like one of the ARM maintainers
> to OK it before I commit.
> 
> 	* config/tc-arm.c (arm_force_relocation): Return 0 for IMMEDIATE
> 	and ADRL_IMMEDIATE.

Approved - but ...

> +  /* Resolve immediate relocations even if the symbol is extern or weak.  */
> +  if (fixp->fx_r_type == BFD_RELOC_ARM_IMMEDIATE
> +      || fixp->fx_r_type == BFD_RELOC_ARM_ADRL_IMMEDIATE)
> +    return 0;
> +
>    return S_FORCE_RELOC (fixp->fx_addsy);

I think that the comment is probably too general.  There are quite a
lot of other immediate relocations supported by the ARM:

  BFD_RELOC_ARM_OFFSET_IMM
  BFD_RELOC_ARM_SHIFT_IMM
  BFD_RELOC_ARM_SWI
  BFD_RELOC_ARM_CP_OFF_IMM
  BFD_RELOC_ARM_ADR_IMM
  BFD_RELOC_ARM_LDR_IMM
  BFD_RELOC_ARM_LITERAL
  BFD_RELOC_ARM_OFFSET_IMM8
  BFD_RELOC_ARM_HWLITERAL
  BFD_RELOC_ARM_THUMB_IMM

Plus - I think that it would be a very good idea to include Enrico's
little test program in the ARM GAS testsuite, so that this bug does
not resurface in the future.

Cheers
        Nick



More information about the Binutils mailing list