Script de Linker: insere o endereço absoluto da função no código gerado

Eu tenho uma pergunta relacionada ao vinculador do gcc.

Eu estou trabalhando com coisas incorporadas (PIC32), mas o compilador e linker do PIC32 são baseados no gcc, então, as principais coisas devem ser comuns para o vinculador gcc "regular" e o vinculador PIC32.

A fim de economizar espaço em flash (que é muitas vezes insuficiente em microcontroladores) eu preciso colocar várias funções grandes no bootloader, e o aplicativo deve chamar essas funções apenas por ponteiros.

Então, eu preciso criar uma tabela vetorial no código gerado.

Eu estou tentando obter o endereço absoluto da função e escrevê-lo para o código gerado, mas ainda recebendo erros.

No exemplo abaixo, estou tentando obter o endereço da função_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

O vinculador retorna erro: "unresolvable symbol '_formatted_write' referenced in expression".

Eu notei que se eu escrever algum lixo em vez de_formatted_write, então retorna erro "undefined symbol .....", assim,_formatted_write é conhecido pelo linker.

Isso me faz pensar que devo executar algumas etapas adicionais para torná-lo "resolvível". Mas ainda não faço ideia de como fazer isso.

questionAnswers(2)

yourAnswerToTheQuestion