forked from xuos/xiuos
171 lines
3.2 KiB
Plaintext
171 lines
3.2 KiB
Plaintext
|
|
|
|
STACK_SIZE = 48*1024;
|
|
L1_PAGE_TABLE_SIZE = 16K;
|
|
RAM_VECTORS_SIZE = 72;
|
|
|
|
OUTPUT_FORMAT("elf32-littlearm")
|
|
OUTPUT_ARCH(arm)
|
|
|
|
MEMORY
|
|
{
|
|
OCRAM (rwx) : ORIGIN = 0x00900000, LENGTH = 256K
|
|
DDR (rwx) : ORIGIN = 0x10000000, LENGTH = 2048M
|
|
}
|
|
|
|
SECTIONS
|
|
{
|
|
/*
|
|
* -- OCRAM --
|
|
*
|
|
* Nothing in OCRAM can be loaded at boot, because the boot image must be a contiguous
|
|
* region of memory.
|
|
*/
|
|
/* MMU L1 page table */
|
|
.l1_page_table (NOLOAD) :
|
|
{
|
|
__l1_page_table_start = .;
|
|
. += L1_PAGE_TABLE_SIZE;
|
|
} > OCRAM
|
|
|
|
/* allocate a heap in ocram */
|
|
.heap.ocram (NOLOAD) : ALIGN(4)
|
|
{
|
|
__heap_ocram_start = .;
|
|
. += LENGTH(OCRAM) - L1_PAGE_TABLE_SIZE - RAM_VECTORS_SIZE ;
|
|
__heap_ocram_end = .;
|
|
} > OCRAM
|
|
|
|
/* RAM vector table comes at the end of OCRAM */
|
|
.ram_vectors (ORIGIN(OCRAM) + LENGTH(OCRAM) - RAM_VECTORS_SIZE) (NOLOAD) :
|
|
{
|
|
__ram_vectors_start = .;
|
|
. += RAM_VECTORS_SIZE;
|
|
__ram_vectors_end = .;
|
|
} > OCRAM
|
|
|
|
/*
|
|
* -- DDR --
|
|
*/
|
|
|
|
/* -- read-only sections -- */
|
|
|
|
_start_image_add = ORIGIN(DDR);
|
|
|
|
.ivt (ORIGIN(DDR)) :
|
|
{
|
|
. = . + 0x400;
|
|
*(.ivt)
|
|
} > DDR
|
|
|
|
.boot_data :
|
|
{
|
|
__start_boot_data = .;
|
|
*(.boot_data)
|
|
} > DDR
|
|
|
|
/* aligned to ease the hexdump read of generated binary */
|
|
.dcd_hdr : ALIGN(16)
|
|
{
|
|
__start_dcd = .;
|
|
*(.dcd_hdr)
|
|
} > DDR
|
|
.dcd_wrt_cmd :
|
|
{
|
|
*(.dcd_wrt_cmd)
|
|
} > DDR
|
|
.dcd_data :
|
|
{
|
|
*(.dcd_data)
|
|
} > DDR
|
|
|
|
__text_start = .;
|
|
.text :
|
|
{
|
|
*(.startup)
|
|
*(.text)
|
|
*(.text.*)
|
|
|
|
/* section information for finsh shell */
|
|
. = ALIGN(4);
|
|
__isrtbl_idx_start = .;
|
|
KEEP(*(.isrtbl.idx))
|
|
__isrtbl_start = .;
|
|
KEEP(*(.isrtbl))
|
|
__isrtbl_end = .;
|
|
. = ALIGN(4);
|
|
} > DDR
|
|
__text_end = .;
|
|
|
|
__rodata_start = .;
|
|
.rodata :
|
|
{
|
|
*(.rodata) *(.rodata.*)
|
|
} > DDR
|
|
__rodata_end = .;
|
|
|
|
. = ALIGN(4);
|
|
.ctors :
|
|
{
|
|
PROVIDE(__ctors_start__ = .);
|
|
KEEP(*(SORT(.ctors.*)))
|
|
KEEP(*(.ctors))
|
|
PROVIDE(__ctors_end__ = .);
|
|
} > DDR
|
|
|
|
.dtors :
|
|
{
|
|
PROVIDE(__dtors_start__ = .);
|
|
KEEP(*(SORT(.dtors.*)))
|
|
KEEP(*(.dtors))
|
|
PROVIDE(__dtors_end__ = .);
|
|
} > DDR
|
|
|
|
/* . = ALIGN(16 * 1024);
|
|
.l1_page_table :
|
|
{
|
|
__l1_page_table_start = .;
|
|
. += 16K;
|
|
} */
|
|
|
|
. = ALIGN(8);
|
|
__data_start = .;
|
|
.data :
|
|
{
|
|
*(.data)
|
|
*(.data.*)
|
|
} > DDR
|
|
__data_end = .;
|
|
|
|
. = ALIGN(8);
|
|
__bss_start = .;
|
|
.bss :
|
|
{
|
|
*(.bss)
|
|
*(.bss.*)
|
|
*(COMMON)
|
|
. = ALIGN(4);
|
|
} > DDR
|
|
. = ALIGN(4);
|
|
__bss_end = .;
|
|
|
|
.stacks :
|
|
{
|
|
__stacks_start = .;
|
|
. += STACK_SIZE;
|
|
__stacks_end = .;
|
|
stack_top = .;
|
|
} > DDR
|
|
|
|
/* Stabs debugging sections. */
|
|
.stab 0 : { *(.stab) }
|
|
.stabstr 0 : { *(.stabstr) }
|
|
.stab.excl 0 : { *(.stab.excl) }
|
|
.stab.exclstr 0 : { *(.stab.exclstr) }
|
|
.stab.index 0 : { *(.stab.index) }
|
|
.stab.indexstr 0 : { *(.stab.indexstr) }
|
|
.comment 0 : { *(.comment) }
|
|
|
|
_end = .;
|
|
}
|