rp2040/example/boot2/boot2.ld
2025-04-19 21:07:29 +08:00

67 lines
1.5 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 <= 252, "Error: .boot2_pre size exceeds 252 bytes!");
. += 256 - _boot2_pre_size;
} >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
}