I have a question related to gcc's linker.
I'm working with embedded stuff (PIC32), but PIC32's compiler and linker are based on gcc, so, main things should be common for "regular" gcc linker and PIC32 linker.
In order to save flash space (which is often insufficient on microcontrollers) I need to put several large functions in the bootloader, and application should call these functions just by pointers.
So, I need to create vector table in the generated code.
I'm trying to get absolute address of the function and write it to the generated code, but still getting errors.
In the example below I'm trying to get address of the function _formatted_write
.
Code:
.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 returns error: "unresolvable symbol '_formatted_write' referenced in expression
".
I have noticed that if I write some garbage instead of _formatted_write
, then it returns error "undefined symbol .....
", so, _formatted_write
is known by linker.
It makes me think I should perform some additional steps to make it "resolvable". But still no idea how to do that.