Candidate fix for arm-coff testsuite failures
Nick Clifton
nickc@redhat.com
Wed Jun 8 13:46:00 GMT 2005
Hi Zack,
> 1) In a COFF configuration, local 'fb' labels (e.g. "1:") are not
> recognized as local by find_real_start. This is because
> find_real_start expects all local labels to begin with '.', but
> LOCAL_LABEL_PREFIX is only defined to '.' for OBJ_ELF. It seems
> safe to make that definition for all ARM targets.
Hmm - this might adversely affect hand-written assembler that is already
out there.
> (Perhaps
> find_real_start should be invoking LOCAL_LABEL, or S_IS_LOCAL, or
> both? I didn't mess with that.)
Actually I think that this would be a better way to solve the problem.
It should not be too hard to do I think. You already have the symbol
structure to hand and a simple S_IS_LOCAL() test ought to work. eg:
/* Names that start with '.' are local labels, not function entry
points. The compiler may generate BL instructions to these labels
because it needs to perform a branch to a far away location.
GAS generated local labels should also be ignored, but we cannot
assume that they will start with a '.', so we must used
S_IS_LOCAL. */
if (name[0] == '.' || S_IS_LOCAL (symbolP))
return symbolP;
> 2) COFF and ELF disagree on whether certain relocations should be
> optimized out by the assembler. In private discussion with Richard
> Earnshaw, we concluded that COFF was right, so this patch
> removes the OBJ_ELF special case from arm_force_relocation.
OK.
> 3) COFF and ELF also disagree on the names of some relocations (as
> printed by objdump). I avoided this problem by modifying the
> affected test cases so that no relocations appear in the object
> file.
Does that mean that you have removed all tests for the generation of
relocs ? ie do we now have no way of checking that GAS (for ARM) is
actually generating relocs properly ?
> 4) The fix to (2) broke some other test cases for ELF. This is
> because md_apply_fix3 has OBJ_ELF #ifdefs that assume the special
> case that was removed from arm_force_relocation. I poked at them
> until I got clean test results again, but I'm not confident in this
> part of the patch. (In an ideal world I'd like to see all those
> #ifdefs gone from md_apply_fix3 - I don't understand why ELF, and
> only ELF, needs to override *valP with fixP->fx_offset, but only
> for some relocations...)
Agreed - it is a mess. Another thing to fix one fine day.
> With this patch applied, I see only the following failures:
>
> arm-vxworks: FAIL: TLS
> arm-wince-pe: FAIL: ARM basic instructions (WinCE version)
> arm-wince-pe: FAIL: ARM arm7t (WinCE version)
> arm-wince-pe: FAIL: ARM architecture 4t instructions
> arm-wince-pe: FAIL: immediate expressions
> arm-wince-pe: FAIL: OFFSET_IMM regression
Have you investigated the reasons for these failures ?
The WinCE tests for example are using customised expected disassembly
ooutputs. Maybe these need to be updated ?
> in this set of targets:
>
> arm-elf
> arm-coff
> arm-aout
> arm-epoc-pe
> arm-nto
> arm-vxworks
> arm-wince-pe
> arm-symbianelf
> arm-none-eabi
> xscale-coff
> xscale-elf
Excellent - all the targets I test as well.
The patch is not approved yet, as I would like to hear your
thoughts/test results on issue 1.
Cheers
Nick
More information about the Binutils
mailing list