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

Lee Revell
2005-12-10T02:02:40Z

On Fri, 2005-12-09 at 18:23 -0600, Jeffrey Hundstad wrote:
> Lee Revell wrote:
>
> >On Fri, 2005-12-09 at 16:37 -0600, Jeffrey Hundstad wrote:
> >
> >
> >>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
> >>>
> >>>
> >>>
> >>>
> >>I have successfully done this using Debian/Sid.
> >>
> >>
> >>
> >
> >I added "-m64" to AFLAGS as well and now I get farther:
> >
> > CC arch/x86_64/ia32/syscall32.o
> > AS arch/x86_64/ia32/vsyscall-sysenter.o
> >arch/x86_64/ia32/vsyscall-sysenter.S: Assembler messages:
> >arch/x86_64/ia32/vsyscall-sysenter.S:14: Error: suffix or operands invalid for `push'
> >arch/x86_64/ia32/vsyscall-sysenter.S:16: Error: suffix or operands invalid for `push'
> >arch/x86_64/ia32/vsyscall-sysenter.S:18: Error: suffix or operands invalid for `push'
> >arch/x86_64/ia32/vsyscall-sysenter.S:25: Error: suffix or operands invalid for `pop'
> >arch/x86_64/ia32/vsyscall-sysenter.S:27: Error: suffix or operands invalid for `pop'
> >arch/x86_64/ia32/vsyscall-sysenter.S:29: Error: suffix or operands invalid for `pop'
> >arch/x86_64/ia32/vsyscall-sigreturn.S:16: Error: suffix or operands invalid for `pop'
> >make[1]: *** [arch/x86_64/ia32/vsyscall-sysenter.o] Error 1
> >make: *** [arch/x86_64/ia32] Error 2
> >
> >Lee
> >
> >
> >
>
> Yes, some commands NEED the -m64 and and WILL NOT work with -m64.
>

Aha! I disabled CONFIG_IA32_EMULATION and it works perfectly.

So all that's needed to build an x86_64 kernel with the i386 Ubuntu 5.10
toolchain:

- edit Makefile: add -m64 to CFLAGS and AFLAGS
- disable CONFIG_IA32_EMULATION
- make ARCH=x86_64

Lee