Usar combreloc con versiones recientes de binutils

					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.