que - El aliasing del símbolo usando GCC/binutils funciona intermitentemente
efecto aliasing pdf (0)
Estoy trabajando en un software que, por un tiempo limitado, se ejecuta en hardware puro hasta que el puerto Linux esté listo para el horario de máxima audiencia. El software está siendo vinculado contra uClibc, que proporciona implementaciones de malloc, clock_gettime, etc., pero el problema es que todos confían en syscalls que simplemente atraparán el hardware ya que aún no tenemos un kernel para manejarlos.
He estado usando aliasing para anular las funciones que necesitamos, es decir, our_mem.c:
void* our_malloc(size_t size) { .. }
void* malloc(size_t size) __attribute__ ((malloc, weak, alias("our_malloc")));
El problema es que esto parece funcionar de forma aleatoria. Puedo tener una compilación donde todas las llamadas tengan un alias adecuado, en la próxima compilación donde modifiqué algo en un archivo no relacionado, de repente funciona hasta un punto y luego una de las llamadas va a uClibc malloc. Al principio pensé que era una cuestión de orden de enlace, pero el sistema de compilación siempre se vincula en el mismo orden y la misma llamada funcionará en una compilación y fallará en la siguiente. Los binarios están (obviamente) vinculados estáticamente.
No estoy seguro de que este sea exactamente el uso que se le debe dar al alias, ya que no he encontrado mucha documentación sobre él, pero he usado con éxito esta técnica unos años antes en malloc y en sus amigos (también con uClibc) y luego funcionó de manera consistente .