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