How to build a 64-bit gcc on a hybrid 32-bit/64-bit (Intel) GNU/Linux system

David Madore david+ml@madore.org
Fri Mar 10 17:56:00 GMT 2017


Dear list,

I have a system running Debian GNU/Linux 8.7 (stable/jessie) on Intel
hardware that is capable of executing both 32-bit (=i686) and 64-bit
(=x86_64) code; it has a 64-bit kernel and a mostly 32-bit userland
(default personality is i686), but a number of additional 64-bit
libraries (runtime and development) are installed.  The system gcc and
binutils are 32-bit binaries but are capable of compiling 64-bit code
with the -m64 switch (and the binaries will then run successfully).

I would like to use this system to compile a 64-bit binary of
gcc-4.9.4 (it should be able to compile both 32-bit and 64-bit code,
defaulting to 64-bit).  Ideally, this gcc should be essentially
identical to a version compiled, and fully bootstrapped, with the
default options, on a 64-bit Debian system (having the same packages).

What would be the correct way to achieve this?

My first naïve attempt was to setarch x86_64 and provide gcc and g++
shell scripts which add the -m64 switch to the command line.  This
fails essentially because gcc tries to use a linker plugin (64-bit,
obviously) which is incompatible with the (32-bit) system ld.  I don't
know how to bootstrap my way around this.

I tried a number of other approaches, like trying to ignore the fact
that the system can already compile and execute 64-bit binaries and
attempting a full cross-compiler bootstrap (with and without
binutils), but everything failed so far.  I can give a detail account
of what failed, of course, but lest I flood this list with a
description of every stupid attempt I made, let me first ask how I
_should_ have proceeded.

Thanks for any help,

-- 
     David A. Madore
   ( http://www.madore.org/~david/ )



More information about the Gcc-help mailing list