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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta