Relocatable linking on x86-64 for i386
Gleb Natapov
gleb at minantech.com
Mon Apr 4 13:15:39 IDT 2011
On Mon, Apr 04, 2011 at 02:06:18AM -0700, Valery Reznic wrote:
>
>
> --- On Mon, 4/4/11, Shachar Shemesh <shachar at shemesh.biz> wrote:
>
> > From: Shachar Shemesh <shachar at shemesh.biz>
> > Subject: Re: Relocatable linking on x86-64 for i386
> > To: "Valery Reznic" <valery_reznic at yahoo.com>
> > Cc: linux-il at cs.huji.ac.il
> > Date: Monday, April 4, 2011, 11:13 AM
> > On 04/04/11 10:15, Valery Reznic
> > wrote:
> > > Hello. I am trying to make relocatable linking on
> > x86-64 box for objects in format i386
> > >
> > > Naive
> > >
> > > ld -r file1.o file2.o -o output.o
> > >
> > > produce
> > > ld: Relocatable linking with relocations from format
> > elf32-i386 (file1.o) to format elf64-x86-64 (output.o) is
> > not supported
> > >
> > > But even when I add --oformat situation not improved:
> > >
> > > ld --output-format elf32-i386 -r file1.o file2.o -o
> > output.o
> > > ld: Relocatable linking with relocations from format
> > elf32-i386 (file1.o) to format elf32-i386 (output.o) is not
> > supported
> > >
> > > So linker correctly recognize what input and output
> > format should be,
> > > but for some reason don't want do it.
> > >
> > > Do you have any ideas if it can be done at all and
> > how?
> > >
> > Can't. You're trying to link objects compiled for different
> > machine codes. Tis not the linking stage that is wrong.
>
> I am not trying to mix i386 and x86_64 code in the same object.
>
> I have two object files for i386 and I want to combine it into one object file for i386 two.
>
> It works perfectly well on i386 box, but on x86-64 it's not.
>
ld -m elf_i386 -r file1.o file2.o -o output.o
> Valery.
>
> >
> > While it is possible to run both machine codes on your
> > computer, they must run in different processes (the kernel
> > actually treats x86 and amd64 codes differently when it sets
> > up the registers for the context switch), and thus you
> > cannot link them into a single executable, cannot
> > dynamically load one from the other, and cannot have two
> > threads with different types. Your only option for
> > interaction is RPC of some sort (or recompile one of them).
> >
> > Shachar
> >
> > -- Shachar Shemesh
> > Lingnu Open Source Consulting Ltd.
> > http://www.lingnu.com
> >
> >
>
> _______________________________________________
> Linux-il mailing list
> Linux-il at cs.huji.ac.il
> http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il
--
Gleb.
More information about the Linux-il
mailing list