Script del enlazador: inserte la dirección absoluta de la función en el código generado
Tengo una pregunta relacionada con el enlazador de gcc.
Estoy trabajando con cosas incrustadas (PIC32), pero el compilador y el enlazador de PIC32 se basan en gcc, por lo tanto, las cosas principales deberían ser comunes para el enlazador de gcc "normal" y el enlazador de PIC32.
Para ahorrar espacio flash (que a menudo es insuficiente en los microcontroladores), necesito poner varias funciones grandes en el gestor de arranque, y la aplicación debería llamar a estas funciones solo por los punteros.
Por lo tanto, necesito crear una tabla de vectores en el código generado.
Estoy intentando obtener la dirección absoluta de la función y escribirla en el código generado, pero aún obtengo errores.
En el siguiente ejemplo estoy tratando de obtener la dirección de la función_formatted_write
.
Código:
.user_addr_table _USER_ADDR_TABLE_ADDR :
{
KEEP(*(.user_addr_table))
LONG((ABSOLUTE(_formatted_write))); /* _formatted_write is a name of my function */
} > user_addr_table
Linker devuelve error: "unresolvable symbol '_formatted_write' referenced in expression
".
He notado que si escribo algo de basura en lugar de_formatted_write
, entonces devuelve error "undefined symbol .....
", asi que,_formatted_write
Es conocido por enlazador.
Me hace pensar que debería realizar algunos pasos adicionales para hacerlo "resoluble". Pero todavía no tengo idea de cómo hacer eso.