This is the mail archive of the binutils@sourceware.cygnus.com 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]

Re: Linking of ARM-elf object files


Hi Kai,

: Trying again, now the binutils-20000116, for arm-elf showed that the
: linker still doesn't produce executables which could run under GDB
: and the simulator...

Can you explain further about what is going wrong here ?

:  My test executables will become about two times bigger than those
: produced with a working linker (990426)

Hmm, Have you determined what is getting bigger ?  Is it the code, the
debug information or something else ?

: and the 'readelf -a' shows about them something like : 
: 
:  So the 'OS/ABI' is a '<unknown: 61>' in the new unworking 'arm-elf'
: executables etc.

Oops - this was a bug in readelf.  I have now checked in a patch to
fix this.

:  Could someone please give some explanation into this?

The problem was that older versions of the GNU linker did not
correctly implement some of the arm-elf relocs.  In particular the old
linker had built in knowledge about the length of the execution
pipleine on the ARM chips, which was a bad thing.

In order to fix this, we had to change the linker and also change the
relocs being produced by the assembler, which made binaries produced
by the fixed toolchain incompatible with binaries produced by the old
toolchain.  Since people were (and are) still using the old toolchain
we could not just arbitrarily switch over to the new relocs without
proving some form of backward compatability.

We provided this compatability in two ways.  The first was code in BFD
to automatically detect binaries produced by the fixed toolchain and
so behave correctly.  (See the comment in bfd/elf32-arm.h starting at
line 1225).  This code relies upon using the OSABI field of the ELF
e_ident[] array to detect old binaries (value = 0) and new binaries
(value = 0x61).

The second method was to provide a new, arm-elf specific switch to the
linker, -p or --no-pipeline-knowledge, which can be used to
specifically tell the linker that it should be using the fixed
versions of the relocs.

Cheers
	Nick

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