192 lines
4.3 KiB
ArmAsm
192 lines
4.3 KiB
ArmAsm
|
/* SPDX-License-Identifier: BSD-3-Clause */
|
||
|
/*
|
||
|
* Copyright (c) 2021 Rockchip Electronics Co., Ltd.
|
||
|
*/
|
||
|
|
||
|
#include "rtconfig.h"
|
||
|
|
||
|
MEMORY
|
||
|
{
|
||
|
FLASH (rx) : ORIGIN = 0x18000000, LENGTH = 16M /* Nor Flash */
|
||
|
SRAM_I (rxw) : ORIGIN = 0x04000000, LENGTH = 1M /* SRAM */
|
||
|
SRAM_D (rxw) : ORIGIN = 0x20000000, LENGTH = 1M /* SRAM */
|
||
|
}
|
||
|
|
||
|
MAIN_STACK_SIZE = 0x400;
|
||
|
|
||
|
ENTRY(Reset_Handler)
|
||
|
|
||
|
SECTIONS
|
||
|
{
|
||
|
.text :
|
||
|
{
|
||
|
. = ALIGN(32);
|
||
|
KEEP(*(.vectors))
|
||
|
. = ALIGN(32);
|
||
|
|
||
|
*(.text*)
|
||
|
KEEP(*(.init))
|
||
|
KEEP(*(.fini))
|
||
|
*(.rodata*)
|
||
|
|
||
|
*(COMMON)
|
||
|
|
||
|
/* section information for finsh shell */
|
||
|
. = ALIGN(4);
|
||
|
__fsymtab_start = .;
|
||
|
KEEP(*(FSymTab))
|
||
|
__fsymtab_end = .;
|
||
|
. = ALIGN(4);
|
||
|
__vsymtab_start = .;
|
||
|
KEEP(*(VSymTab))
|
||
|
__vsymtab_end = .;
|
||
|
. = ALIGN(4);
|
||
|
|
||
|
/* section information for initial. */
|
||
|
. = ALIGN(4);
|
||
|
__rt_init_start = .;
|
||
|
KEEP(*(SORT(.rti_fn*)))
|
||
|
__rt_init_end = .;
|
||
|
. = ALIGN(4);
|
||
|
|
||
|
/* section information for modules */
|
||
|
. = ALIGN(4);
|
||
|
__rtmsymtab_start = .;
|
||
|
KEEP(*(RTMSymTab))
|
||
|
__rtmsymtab_end = .;
|
||
|
. = ALIGN(4);
|
||
|
|
||
|
KEEP(*(.eh_frame*))
|
||
|
} > SRAM_I
|
||
|
|
||
|
.ARM.extab :
|
||
|
{
|
||
|
*(.ARM.extab* .gnu.linkonce.armextab.*)
|
||
|
} > SRAM_I
|
||
|
|
||
|
.ARM.exidx :
|
||
|
{
|
||
|
__exidx_start = .;
|
||
|
*(.ARM.exidx* .gnu.linkonce.armexidx.*)
|
||
|
__exidx_end = .;
|
||
|
} > SRAM_I
|
||
|
|
||
|
.ctors :
|
||
|
{
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__ctors_start__ = .);
|
||
|
KEEP(*(SORT(.ctors.*)))
|
||
|
KEEP(*(.ctors))
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__ctors_end__ = .);
|
||
|
} > SRAM_I
|
||
|
|
||
|
.dtors :
|
||
|
{
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__dtors_start__ = .);
|
||
|
KEEP(*(SORT(.dtors.*)))
|
||
|
KEEP(*(.dtors))
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__dtors_end__ = .);
|
||
|
} > SRAM_I
|
||
|
|
||
|
.copy.table :
|
||
|
{
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__copy_table_start__ = .);
|
||
|
LONG (__etext)
|
||
|
LONG (__data_start__)
|
||
|
LONG ((__data_end__ - __data_start__) / 4)
|
||
|
PROVIDE(__copy_table_end__ = .);
|
||
|
} > SRAM_I
|
||
|
|
||
|
.zero.table :
|
||
|
{
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__zero_table_start__ = .);
|
||
|
LONG (__bss_start__)
|
||
|
LONG ((__bss_end__ - __bss_start__) / 4)
|
||
|
PROVIDE(__zero_table_end__ = .);
|
||
|
} > SRAM_I
|
||
|
|
||
|
/**
|
||
|
* Location counter can end up 2byte aligned with narrow Thumb code but
|
||
|
* __etext is assumed by startup code to be the LMA of a section in RAM
|
||
|
* which must be 4byte aligned. In addition, 32byte cacheline alignment
|
||
|
* is required here, because of RK2108 with cache.
|
||
|
*/
|
||
|
__etext = ALIGN (32);
|
||
|
|
||
|
SRAM_DATA_DEST = ORIGIN(SRAM_D) + __etext - ORIGIN(SRAM_I);
|
||
|
|
||
|
.data SRAM_DATA_DEST : AT (__etext)
|
||
|
{
|
||
|
__data_start__ = ALIGN (32);
|
||
|
*(vtable)
|
||
|
*(.data)
|
||
|
*(.data.*)
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
/* preinit data */
|
||
|
PROVIDE_HIDDEN (__preinit_array_start = .);
|
||
|
KEEP(*(.preinit_array))
|
||
|
PROVIDE_HIDDEN (__preinit_array_end = .);
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
/* init data */
|
||
|
PROVIDE_HIDDEN (__init_array_start = .);
|
||
|
KEEP(*(SORT(.init_array.*)))
|
||
|
KEEP(*(.init_array))
|
||
|
PROVIDE_HIDDEN (__init_array_end = .);
|
||
|
|
||
|
. = ALIGN(4);
|
||
|
/* finit data */
|
||
|
PROVIDE_HIDDEN (__fini_array_start = .);
|
||
|
KEEP(*(SORT(.fini_array.*)))
|
||
|
KEEP(*(.fini_array))
|
||
|
PROVIDE_HIDDEN (__fini_array_end = .);
|
||
|
|
||
|
KEEP(*(.jcr*))
|
||
|
. = ALIGN(4);
|
||
|
_gp = ABSOLUTE(.); /* Base of small data */
|
||
|
|
||
|
. = ALIGN(32);
|
||
|
/* All data end */
|
||
|
__data_end__ = .;
|
||
|
} > SRAM_D
|
||
|
|
||
|
.bss :
|
||
|
{
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__bss_start__ = .);
|
||
|
*(.bss)
|
||
|
*(.bss.*)
|
||
|
*(.dynbss)
|
||
|
*(COMMON)
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__bss_end__ = .);
|
||
|
} > SRAM_D
|
||
|
|
||
|
.stack :
|
||
|
{
|
||
|
. = ALIGN(32);
|
||
|
__StackLimit = .;
|
||
|
. = . + MAIN_STACK_SIZE;
|
||
|
. = ALIGN(32);
|
||
|
__StackTop = .;
|
||
|
__stack = __StackTop;
|
||
|
} > SRAM_D
|
||
|
|
||
|
.heap :
|
||
|
{
|
||
|
. = ALIGN(32);
|
||
|
PROVIDE(__heap_begin = .);
|
||
|
__end__ = .;
|
||
|
PROVIDE(end = .);
|
||
|
. = ORIGIN(SRAM_D) + LENGTH(SRAM_D);
|
||
|
__HeapLimit = .;
|
||
|
PROVIDE(__heap_end = .);
|
||
|
} > SRAM_D
|
||
|
}
|