Files
2025-12-03 11:12:34 +08:00

186 lines
3.4 KiB
C

// *INDENT-OFF*
#include "p11_rom_stubs.ld"
#include "power/p11/p11_mmap.h"
/*
p11 memory地址图
0xf28000, end
0xf27fe0, poff ram, 0x20
0xf27f00, m2p_message, 0xe0
0xf27ec0, p2m_message, 0x40
0xf2xxxx, stack, 0x600
0xf2xxxx, bss
0xf20080, code/data
0xf20000, isr_vertor, 0x80
*/
MEMORY
{
p11_message_ram(rw) : ORIGIN = P2M_MESSAGE_RAM_BEGIN, LENGTH = (P2M_MESSAGE_SIZE+M2P_MESSAGE_SIZE)
msys_poweroff_ram(rw) : ORIGIN = MSYS_POFF_RAM_BEGIN, LENGTH = MSYS_POFF_RAM_SIZE
p11_ram0(rw) : ORIGIN = P11_RAM0_BEGIN, LENGTH = P11_RAM0_SIZE
}
ENTRY(_start)
SECTIONS
{
. = ORIGIN(p11_ram0);
.text ALIGN(32):
{
*startup.o(.text)
*(.text*)
*(.*.text)
*(.*.const)
*(.*.text)
*(.ipc_spin_lock.text.cache.L1)
. = ALIGN(4);
sensor_dev_begin = .;
KEEP(*(.sensor_dev))
sensor_dev_end = .;
. = ALIGN(4);
*(.rodata*)
#include "power/ld/power_text.ld"
. = ALIGN(4);
*(.*.data)
. = ALIGN(4);
*(.data*)
. = ALIGN(4);
} > p11_ram0
.data ALIGN(32):
{
/* *(.data*) */
} > p11_ram0
.bss ALIGN(4):
{
*(.bss)
*(.*.bss)
*(COMMON)
} > p11_ram0
.stack_bss ALIGN(32):
{
*(.stack_magic0)
PROVIDE(_stack_begin = .);
PROVIDE(_sstack_begin = .);
*(.sstack)
PROVIDE(_sstack_end = .);
PROVIDE(_ustack_begin = .);
*(.ustack)
PROVIDE(_ustack_end = .);
PROVIDE(_stack_end = .);
*(.stack_magic1)
} > p11_ram0
#if 0
PROVIDE(overlay_demo_begin = .);
OVERLAY : AT(0x200000) SUBALIGN(4)
{
.overlay_bank_demo_init
{
LONG(0xffffffff);
*(.demo.code.bank.0)
. = ALIGN(4);
}
.overlay_bank_demo_normal0
{
LONG(0xffffffff);
*(.demo.code.bank.1)
}
.overlay_bank_demo_normal1
{
LONG(0xffffffff);
*(.demo.code.bank.2)
}
} > p11_ram0
PROVIDE(overlay_demo_end = .);
PROVIDE(overlay_sensor_begin = .);
OVERLAY : AT(0x210000) SUBALIGN(4)
{
/* TODO: */
.overlay_bank_sensor_init
{
LONG(0xffffffff);
*(.sensor.code.bank.0)
. = ALIGN(4);
}
.overlay_bank_sensor_normal0
{
LONG(0xffffffff);
*(.sensor.code.bank.1)
}
.overlay_bank_sensor_normal1
{
LONG(0xffffffff);
*(.sensor.code.bank.2)
}
} > p11_ram0
PROVIDE(overlay_sensor_end = .);
PROVIDE(overlay_sys_begin = .);
OVERLAY : AT(0x220000) SUBALIGN(4)
{
/* TODO: */
.overlay_bank_sys_init
{
LONG(0xffffffff);
*(.sys.code.bank.0)
. = ALIGN(4);
}
.overlay_bank_sys_normal0
{
LONG(0xffffffff);
*(.sys.code.bank.1)
}
} > p11_ram0
PROVIDE(overlay_sys_end = .);
#endif
PROVIDE(p11_heap_begin = .);
p11_heap_end = P2M_MESSAGE_RAM_BEGIN;
. = ORIGIN(p11_message_ram);
.p11_message ALIGN(32):
{
*(.p2m_data)
*(.m2p_data)
} > p11_message_ram
. = ORIGIN(msys_poweroff_ram);
.p11_poweroff ALIGN(32):
{
*(.msys_poff_data)
} > msys_poweroff_ram
}
text_begin = ADDR(.text);
text_size = SIZEOF(.text);
text_end = text_begin + text_size;
bss_begin = ADDR(.bss);
bss_size = SIZEOF(.bss);
p11_message_begin = ADDR(.p11_message);
p11_message_size = SIZEOF(.p11_message);
data_addr = ADDR(.data);
data_begin = text_begin + text_size;
data_size = SIZEOF(.data);