Hi!
Did you get a linker script that works? I have the same problem. I was using CW and its script is not that compatible with GCC. Like WRITEW does not exists etc. See the file below. Some parts ar easy to adjust, like KEEP_SECTION is changed to KEEP at the correct place, but WRITEW and EXCEPTION stops me.... If I delete to much the linker will say "undefined referencce tp '__bss_start__ " and "__bss_end__".
In short: How to make the CW linker file working in GCC?
Very happy for answers. :smileyhappy:
MEMORY {
m_interrupts (RX) : ORIGIN = 0x0000C000, LENGTH = 0x00000400
m_cfmprotrom (RX) : ORIGIN = 0x0000C400, LENGTH = 0x00000010
m_text (RX) : ORIGIN = 0x0000C410, LENGTH = 0x00040000-0x0000C410
m_data (RW) : ORIGIN = 0x1FFF8400, LENGTH = 0x0000FC00
}
KEEP_SECTION { .vectortable }
KEEP_SECTION { .cfmconfig }
SECTIONS {
.interrupts :
{
__vector_table = .;
* (.vectortable)
. = ALIGN (0x4);
} > m_interrupts
.cfmprotect :
{
*(.cfmconfig)
. = ALIGN (0x4);
} > m_cfmprotrom
.app_text:
{
ALIGNALL(4);
* (.init)
* (.text)
.= ALIGN(0x8) ;
* (.rodata)
.= ALIGN(0x4) ;
___ROM_AT = .;
} > m_text
.app_data: AT(___ROM_AT)
{
* (.sdata)
* (.data)
.= ALIGN(0x4) ;
*(.ARM.extab)
.= ALIGN(0x4) ;
__exception_table_start__ = .;
EXCEPTION
__exception_table_end__ = .;
.= ALIGN(0x4) ;
__sinit__ = .;
STATICINIT
.= ALIGN(0x8) ;
} > m_data
.bss :
{
.= ALIGN(0x4) ;
__START_BSS = .;
* (.bss)
__END_BSS = .;
.= ALIGN(0x8) ;
} >> m_data
_romp_at = ___ROM_AT + SIZEOF(.app_data);
.romp : AT(_romp_at)
{
__S_romp = _romp_at;
WRITEW(___ROM_AT);
WRITEW(ADDR(.app_data));
WRITEW(SIZEOF(.app_data));
WRITEW(0);
WRITEW(0);
WRITEW(0);
}
__SP_INIT = . + 0x00004000;
__heap_addr = __SP_INIT;
__heap_size = 0x00004000;
}