This is the mail archive of the binutils@sources.redhat.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]
Other format: [Raw text]

Re: Linking nominally incompatible object files


Hi Bernd,

So I have a mix of GCC-compiled v850 object files, and Green Hills v800
(what I've called my "new" target) libraries.  When I link them all
together, I get:

lt-ld-new: warning: v850 architecture of input file `aim.o' is incompatible with v850e output
lt-ld-new: warning: v850 architecture of input file `circbuf.o' is incompatible with v850e output


Assuming that "lt-ld-new" is the GNU linker then this message is arising because the machine numbers of the two files are different. These numbers are held in the e_machine field of the ELF header and the GNU linker is expecting one of the values defined in the bfd/archures.c file (bfd_mach_v850, bfd_mach_v850e, bfd_mach_v850e1). The output file has its e_machine value filled in by using the value from the very first object file on the linker's command line. This is usually a file like crt0.o. So in this case the linker is telling you that the crt0.o file (or whichever is the first file in the link) is for a different version of the v850 than the aim.o file.

reloc type 2 not SUPPORTED


The weird thing is, that aim.o is generated by the v850 toolchain, so
its relocs cannot possibly be completely alien (if I link with the
v850-ld and remove all the v800 libraries, the errors are "undefined
reference", not "unsupported relocation").


Reloc 2 is for a function call. So if you remove the libraries then you are probably removing the definition of the function being called and hence the failure changes to "undefined reference". I am not sure why you are getting the message that the reloc is not supported. I think that some further investigation is needed.

Is the linker supposed to interpret the relocs based on the input file
format (would be nice) or based on the output file format?

Neither and both. It is supposed to interpret them based on the target architecture that it was built to support. When it is built to support more than one architecture then it is supposed to select the relocs that is supports based upon the input file that it is processing. (It is also allowed to refuse to link together files of different architectural types if it thinks that it cannot handle this).

Should I just give up now, while I can, before I involuntarily end up as
a BFD hacker?


Welcome to the dark side :-)

Cheers
 Nick


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