Re: i386 -> x86_64 cross compile failure (binutils bug?)

Ken Moffat
2005-12-09T19:50:57Z

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: TEXT/PLAIN; CHARSET=X-UNKNOWN; FORMAT=flowed, Size: 1048 bytes --]

On Fri, 9 Dec 2005, Lee Revell wrote:

> I'm trying to build an x66-64 kernel on a 32 bit system (Ubuntu 5.10).
> I added -m64 to the CFLAGS as per the gcc docs. But the build fails
> with:
>
> $ make ARCH=x86_64
> [...]
> CC init/initramfs.o
> CC init/calibrate.o
> LD init/built-in.o
> CHK usr/initramfs_list
> CC arch/x86_64/kernel/process.o
> CC arch/x86_64/kernel/signal.o
> AS arch/x86_64/kernel/entry.o
> arch/x86_64/kernel/entry.S: Assembler messages:
> arch/x86_64/kernel/entry.S:204: Error: cannot represent relocation type BFD_RELOC_X86_64_32S

Unless ubuntu provides a biarch toolchain (and the fact gcc accepts
'-m64' means nothing - use 'file' on init/built-in.o), you have to build
a cross toolchain, (just binutils and gcc), put that on your path, and
use

make ARCH=x86_64 CROSS_COMPILE=x86_64-pc-linux-gnu-

so that the build will use x86_64-pc-linux-gnu-as and friends. You
should not need to mess with the CFLAGS.

Ken
--
das eine Mal als Tragödie, das andere Mal als Farce