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.