rp2040/example/boot2/boot2.ld

75 lines
1.7 KiB
Plaintext

_start = ORIGIN(FLASH);
ENTRY(_start)
MEMORY
{
FLASH (xrx) :ORIGIN = 0x10000000, LENGTH = 256K
RAM (xrw) :ORIGIN = 0x20000000, LENGTH = 256K
STACK (rw) :ORIGIN = 0x20040000, LENGTH = 8K - 256
AUTO(xrx) :ORIGIN = 0x20041F00, LENGTH = 256
}
_stack_top = ORIGIN(STACK) + LENGTH(STACK);
PHDRS
{
boot2_pre PT_LOAD FLAGS(5); /* R + X */
text PT_LOAD FLAGS(5); /* R + X */
rodata PT_LOAD FLAGS(5); /* R + W */
data PT_LOAD FLAGS(6); /* R + W */
bss PT_LOAD FLAGS(6); /* R + W */
}
SECTIONS
{
.boot2_pre :
{
KEEP(*boot2_pre.*(.text.boot2_pre))
KEEP(*(.text.boot2_pre))
_boot2_pre_size = . - ADDR(.boot2_pre);
ASSERT(_boot2_pre_size <= 240, "Error: .boot2_pre size exceeds 240 bytes!");
. += 240 - _boot2_pre_size;
LONG(_env_start) /* envionment variables start address */
LONG(0)
LONG(0)
LONG(0) /* MPEG2 of CRC32 */
} >AUTO AT > FLASH :boot2_pre
.text :
{
. = ALIGN(4);
_boot2_copy_self_start_addr = .;
*(.text*)
. = ALIGN(4);
} >RAM AT > FLASH :text
.rodata :
{
. = ALIGN(4);
*(.rodata*)
. = ALIGN(4);
} >RAM AT > FLASH :rodata
.data :
{
. = ALIGN(4);
*(.data*)
. = ALIGN(4);
} >RAM AT > FLASH :data
_boot2_copy_self_end_addr = .;
.bss (NOLOAD) :
{
. = ALIGN(4);
_bss_start = .;
*(.bss*)
. = ALIGN(4);
_bss_end = .;
} >RAM :bss
_env_start = ADDR(.bss);
_env_start = ALIGN(4K);
_env_start = _env_start - (ORIGIN(RAM) - ORIGIN(FLASH));
}