OBSOLETA
TÍTULO: Usar combreloc con versiones recientes de binutils
VERSIÓN LFS: 3.3+ (quizás también anteriores)
AUTOR: Zack Winkles <sativa93@bellsouth.net>
TRADUCTOR: Proyecto LFS-ES
SINOPSIS:
Configurar/engañar a binutils para usar la opción -z combreloc
RECETA:
Contenidos
* Introducción
* Métodos
* Problemas
Introducción
Las versiones recientes de binutils (el programa ld en realidad) incluye una
nueva opción que proporciona la misma mejora en la carga de los programas que
objprelink para KDE, pero para todos los programas compilados con ella. Como
regla general puedes esperar entre un 20% y un 30% de reducción del tiempo
de carga. Personalmente nunca tuve problemas al compilar *TODO* en mi
sistema con esta opción (incluyendo gcc, glibc, etc).
Métodos
Aquí está el (Here's the real meat of it all). Aunque todo lo que necesitas hacer
es enlazar el programa con esta opción, puede ser bastante difícil lograr que
todas tus opciones les sean pasadas a ld. Un ejemplo claro es gcc. Para hacer
que use la opción en el binario libgcc_s.so tienes que establecer unas ocho
variables de entorno y editar unos cuantos Makefiles. Pero si lo quieres
hacer así, la forma apropiada es establecer la variable LDFLAGS:
export LDFLAGS='-z combreloc'
debería funcionar. Estimo que un 50% de los paquetes en verdad reconocerán y
utilizarán esa variable. No queremos detenernos aquí ¿verdad? Llevémoslo un
poco más allá y establezcamos la variable CFLAGS también:
export CFLAGS='**TU_CFLAGS** -z combreloc'
export CXXFLAGS='**TU_CFLAGS** -z combreloc'
Si no entiendes porque pongo también CXXFLAGS tienes peores cosas de las que
preocuparte que los tiempos de carga en una computadora... (Onward). Aún con
esto, programas como bzip2 no se optimizarán. Llevémoslo otro poco más allá:
export CC='gcc -z combreloc'
export CXX='g++ -z combreloc'
Piensas que ahora es suficiente? No lo creo. Al compilar gcc no importa que
variables hayas establecido: gcc las ignora a todas y usa las suyas propias.
Este es el método más fácil/agresivo para lograrlo en tu sistema completo.
ADVERTENCIA: Todos los programas que compiles harán uso de ld con la
opción -z combreloc. Ya no habrá forma de usar ld sin dicha opción más que
llamar a ld.orig o borrar el guión y renombrar ld.orig como ld (al revés que
las instrucciones que siguen).
mv /usr/bin/ld /usr/bin/ld.orig &&
cat > /usr/bin/ld << "EOF"
#!/bin/sh
# Comienzo de /usr/bin/ld
# (Wrapper) Guión para usar la opción -z combreloc en todos los ejecutables
# Por: Zack Winkles
exec /usr/bin/ld.orig -z combreloc "$@"
# Fin de /usr/bin/ld
EOF
chmod 755 /usr/bin/ld
Ahora puedes olvidarte de CC, CFLAGS y todas las otras cosas que hicimos en
la receta anteriormente. ¿No te alegra haber leído la receta completa? ;).
Sólo hay un último detalle que mencionar. Cuando compilas el sistema por
primera vez dentro del entorno chroot estático ¿cómo hacer para que todo esté
optimizado entonces? Es bastante fácil en realidad. Toma las instrucciones de
más arribay modifica cada ocurrencia de /usr/bin por /static/bin. De este
modo hasta las binutils estáticas quedarán optimizadas. Bastante fácil, ¿no?
Problemas
Hasta ahora nunca he tenido ninguna clase de problemas con nada de lo que
compilé, aún usando el método más agresivo. Lo único que he notado es una
mejora en el rendimiento. Si tienes algún problema házmelo saber y trataré de
ayudarte.
|