1d6aed566Sopenharmony_ci/* 2d6aed566Sopenharmony_ci * Copyright (C) 2017 C-SKY Microsystems Co., Ltd. All rights reserved. 3d6aed566Sopenharmony_ci * 4d6aed566Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 5d6aed566Sopenharmony_ci * you may not use this file except in compliance with the License. 6d6aed566Sopenharmony_ci * You may obtain a copy of the License at 7d6aed566Sopenharmony_ci * 8d6aed566Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 9d6aed566Sopenharmony_ci * 10d6aed566Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 11d6aed566Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 12d6aed566Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d6aed566Sopenharmony_ci * See the License for the specific language governing permissions and 14d6aed566Sopenharmony_ci * limitations under the License. 15d6aed566Sopenharmony_ci */ 16d6aed566Sopenharmony_ci 17d6aed566Sopenharmony_ci/****************************************************************************** 18d6aed566Sopenharmony_ci * @file liteos.ld 19d6aed566Sopenharmony_ci * @brief csky linker file 20d6aed566Sopenharmony_ci * @version V1.0 21d6aed566Sopenharmony_ci * @date 02. June 2017 22d6aed566Sopenharmony_ci ******************************************************************************/ 23d6aed566Sopenharmony_ciMEMORY 24d6aed566Sopenharmony_ci{ 25d6aed566Sopenharmony_ci I-SRAM : ORIGIN = 0x0 , LENGTH = 0x20000 /* I-SRAM 128KB */ 26d6aed566Sopenharmony_ci D-SRAM : ORIGIN = 0x20000000 , LENGTH = 0x20000 /* D-SRAM 128KB */ 27d6aed566Sopenharmony_ci O-SRAM : ORIGIN = 0x50000000 , LENGTH = 0x800000 /* off-chip SRAM 8MB */ 28d6aed566Sopenharmony_ci SRAM : ORIGIN = 0x60000000 , LENGTH = 0x20000 /* on-chip SRAM 128KB */ 29d6aed566Sopenharmony_ci} 30d6aed566Sopenharmony_ci 31d6aed566Sopenharmony_ci_Min_Heap_Size = 0x200; 32d6aed566Sopenharmony_ci_Min_Stack_Size = 0x400; 33d6aed566Sopenharmony_ci 34d6aed566Sopenharmony_ciPROVIDE (__ram_end = ORIGIN(O-SRAM) + LENGTH(O-SRAM)); 35d6aed566Sopenharmony_ci 36d6aed566Sopenharmony_ciREGION_ALIAS("REGION_TEXT", O-SRAM); 37d6aed566Sopenharmony_ciREGION_ALIAS("REGION_RODATA", O-SRAM); 38d6aed566Sopenharmony_ciREGION_ALIAS("REGION_DATA", O-SRAM); 39d6aed566Sopenharmony_ciREGION_ALIAS("REGION_BSS", O-SRAM); 40d6aed566Sopenharmony_ci 41d6aed566Sopenharmony_ciENTRY(Reset_Handler) 42d6aed566Sopenharmony_ciSECTIONS 43d6aed566Sopenharmony_ci{ 44d6aed566Sopenharmony_ci .text : { 45d6aed566Sopenharmony_ci . = ALIGN(0x4) ; 46d6aed566Sopenharmony_ci KEEP(*startup.o(.text)) 47d6aed566Sopenharmony_ci __text_start = .; 48d6aed566Sopenharmony_ci __stext = . ; 49d6aed566Sopenharmony_ci *(.text) 50d6aed566Sopenharmony_ci *(.text*) 51d6aed566Sopenharmony_ci *(.text.*) 52d6aed566Sopenharmony_ci *(.stub) 53d6aed566Sopenharmony_ci *(.gnu.linkonce.t*) 54d6aed566Sopenharmony_ci *(.glue_7t) 55d6aed566Sopenharmony_ci *(.glue_7) 56d6aed566Sopenharmony_ci KEEP (*(.init)) 57d6aed566Sopenharmony_ci KEEP (*(.fini)) 58d6aed566Sopenharmony_ci . = ALIGN (4) ; 59d6aed566Sopenharmony_ci __etext = . ; 60d6aed566Sopenharmony_ci __text_end = .; 61d6aed566Sopenharmony_ci } > REGION_TEXT 62d6aed566Sopenharmony_ci 63d6aed566Sopenharmony_ci .rodata : { 64d6aed566Sopenharmony_ci . = ALIGN(0x4) ; 65d6aed566Sopenharmony_ci __rodata_start = .; 66d6aed566Sopenharmony_ci __srodata = .; 67d6aed566Sopenharmony_ci *(.rdata) 68d6aed566Sopenharmony_ci *(.rdata*) 69d6aed566Sopenharmony_ci *(.rdata.*) 70d6aed566Sopenharmony_ci *(.rodata) 71d6aed566Sopenharmony_ci *(.rodata*) 72d6aed566Sopenharmony_ci *(.rodata.*) 73d6aed566Sopenharmony_ci *(.rodata.str1.4) 74d6aed566Sopenharmony_ci KEEP (*crtbegin.o(.ctors)) 75d6aed566Sopenharmony_ci KEEP (*crtbegin?.o(.ctors)) 76d6aed566Sopenharmony_ci KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) 77d6aed566Sopenharmony_ci KEEP (*(SORT(.ctors.*))) 78d6aed566Sopenharmony_ci KEEP (*(.ctors)) 79d6aed566Sopenharmony_ci KEEP (*crtbegin.o(.dtors)) 80d6aed566Sopenharmony_ci KEEP (*crtbegin?.o(.dtors)) 81d6aed566Sopenharmony_ci KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) 82d6aed566Sopenharmony_ci KEEP (*(SORT(.dtors.*))) 83d6aed566Sopenharmony_ci KEEP (*(.dtors)) 84d6aed566Sopenharmony_ci . = ALIGN(0x4) ; 85d6aed566Sopenharmony_ci __erodata = .; 86d6aed566Sopenharmony_ci __rodata_end = .; 87d6aed566Sopenharmony_ci } > REGION_RODATA 88d6aed566Sopenharmony_ci 89d6aed566Sopenharmony_ci .preinit_array : 90d6aed566Sopenharmony_ci { 91d6aed566Sopenharmony_ci PROVIDE_HIDDEN (__preinit_array_start = .); 92d6aed566Sopenharmony_ci KEEP (*(.preinit_array*)) 93d6aed566Sopenharmony_ci PROVIDE_HIDDEN (__preinit_array_end = .); 94d6aed566Sopenharmony_ci } >REGION_RODATA 95d6aed566Sopenharmony_ci 96d6aed566Sopenharmony_ci .init_array : 97d6aed566Sopenharmony_ci { 98d6aed566Sopenharmony_ci PROVIDE_HIDDEN (__init_array_start = .); 99d6aed566Sopenharmony_ci KEEP (*(SORT(.init_array.*))) 100d6aed566Sopenharmony_ci KEEP (*(.init_array*)) 101d6aed566Sopenharmony_ci PROVIDE_HIDDEN (__init_array_end = .); 102d6aed566Sopenharmony_ci } >REGION_RODATA 103d6aed566Sopenharmony_ci 104d6aed566Sopenharmony_ci .fini_array : 105d6aed566Sopenharmony_ci { 106d6aed566Sopenharmony_ci PROVIDE_HIDDEN (__fini_array_start = .); 107d6aed566Sopenharmony_ci KEEP (*(SORT(.fini_array.*))) 108d6aed566Sopenharmony_ci KEEP (*(.fini_array*)) 109d6aed566Sopenharmony_ci PROVIDE_HIDDEN (__fini_array_end = .); 110d6aed566Sopenharmony_ci } >REGION_RODATA 111d6aed566Sopenharmony_ci 112d6aed566Sopenharmony_ci .data : { 113d6aed566Sopenharmony_ci . = ALIGN(0x4) ; 114d6aed566Sopenharmony_ci __sdata = . ; 115d6aed566Sopenharmony_ci __data_start__ = . ; 116d6aed566Sopenharmony_ci __ram_data_start = __data_start__; 117d6aed566Sopenharmony_ci data_start = . ; 118d6aed566Sopenharmony_ci *(.sdata) 119d6aed566Sopenharmony_ci *(.sdata.*) 120d6aed566Sopenharmony_ci *(.data) 121d6aed566Sopenharmony_ci *(.data*) 122d6aed566Sopenharmony_ci *(.data.*) 123d6aed566Sopenharmony_ci *(__libc_subfreeres) 124d6aed566Sopenharmony_ci *(.note.ABI-tag) 125d6aed566Sopenharmony_ci KEEP(*( SORT (.liteos.table.*))); 126d6aed566Sopenharmony_ci . = ALIGN(0x4) ; 127d6aed566Sopenharmony_ci __edata = .; 128d6aed566Sopenharmony_ci __data_end__ = .; 129d6aed566Sopenharmony_ci __ram_data_end = __data_end__; 130d6aed566Sopenharmony_ci } > REGION_DATA AT > REGION_RODATA 131d6aed566Sopenharmony_ci 132d6aed566Sopenharmony_ci .eh_frame : ONLY_IF_RW { 133d6aed566Sopenharmony_ci KEEP (*(.eh_frame)) 134d6aed566Sopenharmony_ci } > REGION_DATA AT > REGION_RODATA 135d6aed566Sopenharmony_ci 136d6aed566Sopenharmony_ci .gcc_except_table : ONLY_IF_RW { 137d6aed566Sopenharmony_ci *(.gcc_except_table .gcc_except_table.*) 138d6aed566Sopenharmony_ci __edata = .; 139d6aed566Sopenharmony_ci __data_end__ = .; 140d6aed566Sopenharmony_ci } > REGION_DATA AT > REGION_RODATA 141d6aed566Sopenharmony_ci 142d6aed566Sopenharmony_ci .bss : { 143d6aed566Sopenharmony_ci . = ALIGN(0x4) ; 144d6aed566Sopenharmony_ci __sbss = ALIGN(0x4) ; 145d6aed566Sopenharmony_ci __bss_start = . ; 146d6aed566Sopenharmony_ci *(.sbss) 147d6aed566Sopenharmony_ci *(.sbss.*) 148d6aed566Sopenharmony_ci *(.bss) 149d6aed566Sopenharmony_ci *(.bss.*) 150d6aed566Sopenharmony_ci *(COMMON) 151d6aed566Sopenharmony_ci . = ALIGN(4); 152d6aed566Sopenharmony_ci __init_stack_s = ABSOLUTE(.); 153d6aed566Sopenharmony_ci . += 0x1000; 154d6aed566Sopenharmony_ci __init_stack_e = ABSOLUTE(.); 155d6aed566Sopenharmony_ci . = ALIGN(0x4) ; 156d6aed566Sopenharmony_ci __ebss = . ; 157d6aed566Sopenharmony_ci __bss_end = .; 158d6aed566Sopenharmony_ci __end = . ; 159d6aed566Sopenharmony_ci end = . ; 160d6aed566Sopenharmony_ci } > REGION_BSS 161d6aed566Sopenharmony_ci 162d6aed566Sopenharmony_ci . = ALIGN(0x8); 163d6aed566Sopenharmony_ci __heap_start = .; 164d6aed566Sopenharmony_ci __heap_end = ORIGIN(O-SRAM) + LENGTH(O-SRAM) - _Min_Stack_Size - 4; 165d6aed566Sopenharmony_ci __heap_size = __heap_end - __heap_start; 166d6aed566Sopenharmony_ci} 167