160 lines
3 KiB
ArmAsm
160 lines
3 KiB
ArmAsm
/***************************************************************************
|
|
*
|
|
* Copyright 2015-2019 BES.
|
|
* All rights reserved. All unpublished rights reserved.
|
|
*
|
|
* No part of this work may be used or reproduced in any form or by any
|
|
* means, or stored in a database or retrieval system, without prior written
|
|
* permission of BES.
|
|
*
|
|
* Use of this work is governed by a license granted by BES.
|
|
* This work contains confidential and proprietary information of
|
|
* BES. which is protected by copyright, trade secret,
|
|
* trademark and other intellectual property rights.
|
|
*
|
|
****************************************************************************/
|
|
|
|
#include "plat_addr_map.h"
|
|
|
|
#define MIN_BURN_BUFFER_SIZE 0x2000
|
|
#define BURN_BUFFER_END 0x11000
|
|
|
|
#define HEAP_SECTION_SIZE 0x40
|
|
#define STACK_SECTION_SIZE 0x1000
|
|
|
|
#define CODE_MSG_OVERHEAD 8
|
|
|
|
LR_vector (RAMX_BASE + BURN_BUFFER_END) NOCOMPRESS
|
|
{
|
|
vector_table RAM_BASE UNINIT VECTOR_SECTION_SIZE
|
|
{
|
|
*(.bss.vector_table, +FIRST)
|
|
}
|
|
|
|
reboot_param (ImageBase(vector_table) + VECTOR_SECTION_SIZE) UNINIT REBOOT_PARAM_SECTION_SIZE
|
|
{
|
|
*(.bss.reboot_param, +FIRST)
|
|
}
|
|
|
|
burn_buffer (ImageBase(reboot_param) + REBOOT_PARAM_SECTION_SIZE) UNINIT
|
|
{
|
|
/* The size of .burn_buffer should be greater than __rom_HeapLimit. In most cases 8K is enough. */
|
|
*(.bss.burn_buffer)
|
|
}
|
|
|
|
ScatterAssert(ImageLimit(burn_buffer) <= (ImageBase(vector_table) + BURN_BUFFER_END))
|
|
}
|
|
|
|
LR_boot_struct +0
|
|
{
|
|
boot_struct RAMX_TO_RAM(+0)
|
|
{
|
|
*(.boot_struct, +FIRST)
|
|
}
|
|
|
|
exec_struct +0
|
|
{
|
|
*(.exec_struct, +FIRST)
|
|
}
|
|
|
|
got_info +0
|
|
{
|
|
*(.got)
|
|
*(.got.plt)
|
|
*(.igot.plt)
|
|
*(.dynamic)
|
|
}
|
|
}
|
|
|
|
LR_text +0
|
|
{
|
|
text +0 FIXED
|
|
{
|
|
*(.text*)
|
|
|
|
#ifndef NOSTD
|
|
*(InRoot$$Sections)
|
|
*armlib*(+TEXT)
|
|
#endif
|
|
}
|
|
|
|
.ARM.extab +0
|
|
{
|
|
*(.ARM.extab*, .gnu.linkonce.armextab.*)
|
|
}
|
|
|
|
/* .ARM.exidx contains R_ARM_PREL31 (+-0x40000000) offset to functions, which means
|
|
* the session location cannot be too far away from the function addresses */
|
|
.ARM.exidx +0
|
|
{
|
|
*(.ARM.exidx*, .gnu.linkonce.armexidx.*)
|
|
}
|
|
|
|
rodata RAMX_TO_RAM(+0)
|
|
{
|
|
*(.rodata*)
|
|
|
|
#ifndef NOSTD
|
|
*armlib*(+CONST)
|
|
KEEP(*(.eh_frame*))
|
|
#endif
|
|
*(.note.gnu.build-id)
|
|
. = ALIGN(4);
|
|
}
|
|
|
|
cust_cmd_init_tbl +0
|
|
{
|
|
*(.cust_cmd_init_tbl)
|
|
}
|
|
|
|
cust_cmd_hdlr_tbl +0
|
|
{
|
|
*(.cust_cmd_hldr_tbl)
|
|
}
|
|
|
|
data +0
|
|
{
|
|
*(.data*)
|
|
|
|
#ifndef NOSTD
|
|
*armlib*(+DATA)
|
|
#endif
|
|
}
|
|
|
|
.build_info +0
|
|
{
|
|
*(.build_info, +FIRST)
|
|
}
|
|
|
|
/* The following section be the last loaded section */
|
|
code_start_addr +0
|
|
{
|
|
*(.code_start_addr, +LAST)
|
|
}
|
|
|
|
bss +0 UNINIT
|
|
{
|
|
*(.bss*)
|
|
*(COMMON)
|
|
|
|
#ifndef NOSTD
|
|
*armlib*(+BSS)
|
|
#endif
|
|
}
|
|
|
|
ARM_LIB_HEAP +0 ALIGN 8 EMPTY HEAP_SECTION_SIZE
|
|
{
|
|
}
|
|
|
|
ARM_LIB_STACK (RAM_BASE + RAM_SIZE - STACK_SECTION_SIZE) ALIGN 8 EMPTY STACK_SECTION_SIZE
|
|
{
|
|
}
|
|
|
|
/* Check if data + heap + stack exceeds RAM limit */
|
|
ScatterAssert(ImageBase(ARM_LIB_STACK) >= ImageLimit(ARM_LIB_HEAP))
|
|
ScatterAssert(ImageLimit(ARM_LIB_STACK) <= (RAM_BASE + RAM_SIZE))
|
|
|
|
free_ram ImageLimit(ARM_LIB_HEAP) EMPTY (ImageBase(ARM_LIB_STACK) - ImageLimit(ARM_LIB_HEAP))
|
|
{
|
|
}
|
|
}
|