Construire un GCC moderne (4.x) pour cibler un kernel 2.4.x sur la même architecture que l’hôte?

La question est relativement simple: comment puis-je créer un GCC de la série 4.x (avec binutils et friends) qui cible un ABI 2.4 sur la même architecture que l’hôte du compilateur?

Le système hôte serait x86 ou x86_64 et la seule exigence est que les fichiers ELF construits fonctionnent sur un ancien kernel aussi longtemps que l’ABI correspond. (Les sources / en-têtes du kernel existent)

Une libc compatible serait également nécessaire pour la lier. Cependant, je peux aussi lier dynamicment avec elle, car je connais la version (g) de la libc.

Tout pointeur serait très apprécié. Je suis un peu familier avec crosstool-ng , mais cela ne semble même plus supporter les kernelx 2.4 (pour des raisons évidentes).

Le moyen le plus simple est probablement d’installer une chaîne d’outils moderne sur un ancien système d’exploitation.

RHEL 2.1 ou 3 pourrait être le meilleur, car ils ont été supportés jusqu’à récemment.

La compilation de gcc 4 peut être délicate car vous aurez également besoin de bibliothèques mathématiques. Vous devrez peut-être faire une approche en plusieurs étapes.

MODIFIER:

Pour comstackr le plus récent gcc:

  1. Comstackz la dernière marque – ajoutez à PATH
  2. Décompressez gcc
  3. Décompressez mpfr, gmp, mpc dans le répertoire gcc
  4. lien symbolique vers les répertoires versionnés vers la base (mpfr, gmp, mpc).
  5. Construire et installer gcc

Quelque chose comme ça:

cd ~/software tar xjf $DOWNLOAD/gcc/gcc-core-${GCCVER}.tar.bz2 || failure "unpack gcc failed" tar xjf $DOWNLOAD/gcc/gcc-g++-${GCCVER}.tar.bz2 || failure "unpack g++ failed" cd gcc-${GCCVER} tar xjf $DOWNLOAD/gmp-5.0.2.tar.bz2 || failure "unpack gmp failed" #tar xjf $DOWNLOAD/gmp-4.3.2.tar.bz2 || failure "unpack gmp failed" ln -s gmp-* gmp tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed" #tar xjf $DOWNLOAD/mpfr-2.4.2.tar.bz2 || failure "unpack mpfr failed" ln -s mpfr-* mpfr tar xzf $DOWNLOAD/mpc-0.9.tar.gz || failure "unpack mpc failed" ln -s mpc-* mpc cd .. mkdir gcc-build cd gcc-build ../gcc-${GCCVER}/configure --prefix=/opt/tools || failure "configure failed" make || failure "make failed" make install || failure "install failed" 

Je pense que vous devriez probablement construire un compilateur croisé GCC dans ce cas, et que vous devriez comstackr GLibc qui gèrerait la dépendance à l’ancien kernel 2.4.

Cependant, avez-vous simplement essayé de comstackr votre code et de le lier simplement à l’ancienne bibliothèque Glibc compatible avec le kernel 2.4? Je suppose que cela devrait fonctionner.

Et avez-vous essayé d’exécuter votre binary (obtenu de manière simple sur un système récent en utilisant son récent GCC) sur l’ancien système? Qu’est-ce qui ne fonctionne pas comme prévu?

Cordialement.