1/* 2 * Copyright 2021 hpmicro 3 * SPDX-License-Identifier: BSD-3-Clause 4 */ 5 6ENTRY(_start) 7 8STACK_SIZE = DEFINED(_stack_size) ? _stack_size : 0x4000; 9HEAP_SIZE = DEFINED(_heap_size) ? _heap_size : 0x40000; 10 11MEMORY 12{ 13 XPI0 (rx) : ORIGIN = 0x80000000, LENGTH = 16M 14 ILM (wx) : ORIGIN = 0, LENGTH = 256K 15 DLM (wx) : ORIGIN = 0x80000, LENGTH = 256K 16 AXI_SRAM (wx) : ORIGIN = 0x1080000, LENGTH = 768K 17 AXI_SRAM_NONCACHEABLE (wx) : ORIGIN = 0x01140000, LENGTH = 256K 18} 19 20__nor_cfg_option_load_addr__ = ORIGIN(XPI0) + 0x400; 21__boot_header_load_addr__ = ORIGIN(XPI0) + 0x1000; 22__app_load_addr__ = ORIGIN(XPI0) + 0x3000; 23__boot_header_length__ = __boot_header_end__ - __boot_header_start__; 24__app_offset__ = __app_load_addr__ - __boot_header_load_addr__; 25 26SECTIONS 27{ 28 .nor_cfg_option __nor_cfg_option_load_addr__ : { 29 KEEP(*(.nor_cfg_option)) 30 } > XPI0 31 32 .boot_header __boot_header_load_addr__ : { 33 __boot_header_start__ = .; 34 KEEP(*(.boot_header)) 35 KEEP(*(.fw_info_table)) 36 KEEP(*(.dc_info)) 37 __boot_header_end__ = .; 38 } > XPI0 39 40 .start __app_load_addr__ : { 41 . = ALIGN(8); 42 KEEP(*(.start)) 43 } > XPI0 44 45 .text (__vector_load_addr__ + __vector_ram_end__ - __vector_ram_start__): { 46 . = ALIGN(8); 47 *(.text) 48 *(.text*) 49 *(.rodata) 50 *(.rodata*) 51 *(.srodata) 52 *(.srodata*) 53 *(.hash) 54 *(.dyn*) 55 *(.gnu*) 56 *(.pl*) 57 58 KEEP(*(.eh_frame)) 59 *(.eh_frame*) 60 61 KEEP (*(.init)) 62 KEEP (*(.fini)) 63 . = ALIGN(8); 64 65 /* For OHOS Start */ 66 _hdf_drivers_start = .; 67 KEEP(*(.hdf.driver)) 68 _hdf_drivers_end = .; /* define a section for hdf driver */ 69 70 __zinitcall_bsp_start = .; 71 KEEP (*(.zinitcall.bsp0.init)) 72 KEEP (*(.zinitcall.bsp1.init)) 73 KEEP (*(.zinitcall.bsp2.init)) 74 KEEP (*(.zinitcall.bsp3.init)) 75 KEEP (*(.zinitcall.bsp4.init)) 76 __zinitcall_bsp_end = .; 77 . = ALIGN(4); 78 __zinitcall_device_start = .; 79 KEEP (*(.zinitcall.device0.init)) 80 KEEP (*(.zinitcall.device1.init)) 81 KEEP (*(.zinitcall.device2.init)) 82 KEEP (*(.zinitcall.device3.init)) 83 KEEP (*(.zinitcall.device4.init)) 84 __zinitcall_device_end = .; 85 . = ALIGN(4); 86 __zinitcall_core_start = .; 87 KEEP (*(.zinitcall.core0.init)) 88 KEEP (*(.zinitcall.core1.init)) 89 KEEP (*(.zinitcall.core2.init)) 90 KEEP (*(.zinitcall.core3.init)) 91 KEEP (*(.zinitcall.core4.init)) 92 __zinitcall_core_end = .; 93 . = ALIGN(4); 94 __zinitcall_sys_service_start = .; 95 KEEP (*(.zinitcall.sys.service0.init)) 96 KEEP (*(.zinitcall.sys.service1.init)) 97 KEEP (*(.zinitcall.sys.service2.init)) 98 KEEP (*(.zinitcall.sys.service3.init)) 99 KEEP (*(.zinitcall.sys.service4.init)) 100 __zinitcall_sys_service_end = .; 101 . = ALIGN(4); 102 __zinitcall_sys_feature_start = .; 103 KEEP (*(.zinitcall.sys.feature0.init)) 104 KEEP (*(.zinitcall.sys.feature1.init)) 105 KEEP (*(.zinitcall.sys.feature2.init)) 106 KEEP (*(.zinitcall.sys.feature3.init)) 107 KEEP (*(.zinitcall.sys.feature4.init)) 108 __zinitcall_sys_feature_end = .; 109 . = ALIGN(4); 110 __zinitcall_run_start = .; 111 KEEP (*(.zinitcall.run0.init)) 112 KEEP (*(.zinitcall.run1.init)) 113 KEEP (*(.zinitcall.run2.init)) 114 KEEP (*(.zinitcall.run3.init)) 115 KEEP (*(.zinitcall.run4.init)) 116 __zinitcall_run_end = .; 117 . = ALIGN(4); 118 __zinitcall_app_service_start = .; 119 KEEP (*(.zinitcall.app.service0.init)) 120 KEEP (*(.zinitcall.app.service1.init)) 121 KEEP (*(.zinitcall.app.service2.init)) 122 KEEP (*(.zinitcall.app.service3.init)) 123 KEEP (*(.zinitcall.app.service4.init)) 124 __zinitcall_app_service_end = .; 125 . = ALIGN(4); 126 __zinitcall_app_feature_start = .; 127 KEEP (*(.zinitcall.app.feature0.init)) 128 KEEP (*(.zinitcall.app.feature1.init)) 129 KEEP (*(.zinitcall.app.feature2.init)) 130 KEEP (*(.zinitcall.app.feature3.init)) 131 KEEP (*(.zinitcall.app.feature4.init)) 132 __zinitcall_app_feature_end = .; 133 . = ALIGN(4); 134 __zinitcall_test_start = .; 135 KEEP (*(.zinitcall.test0.init)) 136 KEEP (*(.zinitcall.test1.init)) 137 KEEP (*(.zinitcall.test2.init)) 138 KEEP (*(.zinitcall.test3.init)) 139 KEEP (*(.zinitcall.test4.init)) 140 __zinitcall_test_end = .; 141 . = ALIGN(4); 142 __zinitcall_exit_start = .; 143 KEEP (*(.zinitcall.exit0.init)) 144 KEEP (*(.zinitcall.exit1.init)) 145 KEEP (*(.zinitcall.exit2.init)) 146 KEEP (*(.zinitcall.exit3.init)) 147 KEEP (*(.zinitcall.exit4.init)) 148 __zinitcall_exit_end = .; 149 . = ALIGN(4); 150 /* For OHOS End */ 151 152 } > XPI0 153 154 .rel : { 155 KEEP(*(.rel*)) 156 } > XPI0 157 158 PROVIDE (__etext = .); 159 PROVIDE (_etext = .); 160 PROVIDE (etext = .); 161 162 __vector_load_addr__ = ADDR(.start) + SIZEOF(.start); 163 .vectors ORIGIN(ILM) : AT(__vector_load_addr__) { 164 . = ALIGN(8); 165 __vector_ram_start__ = .; 166 KEEP(*(.interrupt.HalTrapVector.text)); 167 KEEP(*(.interrupt.text)) 168 KEEP(*(.vector_table)) 169 KEEP(*(.isr_vector)) 170 . = ALIGN(8); 171 __vector_ram_end__ = .; 172 } > ILM 173 174 .data : AT(etext) { 175 . = ALIGN(8); 176 __data_start__ = .; 177 __global_pointer$ = . + 0x800; 178 *(.data) 179 *(.data*) 180 *(.sdata) 181 *(.sdata*) 182 *(.tdata) 183 *(.tdata*) 184 185 KEEP(*(.jcr)) 186 KEEP(*(.dynamic)) 187 KEEP(*(.got*)) 188 KEEP(*(.got)) 189 KEEP(*(.gcc_except_table)) 190 KEEP(*(.gcc_except_table.*)) 191 192 . = ALIGN(8); 193 PROVIDE(__preinit_array_start = .); 194 KEEP(*(.preinit_array)) 195 PROVIDE(__preinit_array_end = .); 196 197 . = ALIGN(8); 198 PROVIDE(__init_array_start = .); 199 KEEP(*(SORT_BY_INIT_PRIORITY(.init_array.*))) 200 KEEP(*(.init_array)) 201 PROVIDE(__init_array_end = .); 202 203 . = ALIGN(8); 204 PROVIDE(__finit_array_start = .); 205 KEEP(*(SORT_BY_INIT_PRIORITY(.finit_array.*))) 206 KEEP(*(.finit_array)) 207 PROVIDE(__finit_array_end = .); 208 209 . = ALIGN(8); 210 KEEP(*crtbegin*.o(.ctors)) 211 KEEP(*(EXCLUDE_FILE (*crtend*.o) .ctors)) 212 KEEP(*(SORT(.ctors.*))) 213 KEEP(*(.ctors)) 214 215 . = ALIGN(8); 216 KEEP(*crtbegin*.o(.dtors)) 217 KEEP(*(EXCLUDE_FILE (*crtend*.o) .dtors)) 218 KEEP(*(SORT(.dtors.*))) 219 KEEP(*(.dtors)) 220 . = ALIGN(8); 221 __data_end__ = .; 222 PROVIDE (__edata = .); 223 PROVIDE (_edata = .); 224 PROVIDE (edata = .); 225 } > AXI_SRAM 226 227 .fast : AT(etext + __data_end__ - __data_start__) { 228 . = ALIGN(8); 229 __ramfunc_start__ = .; 230 *(.fast) 231 . = ALIGN(8); 232 __ramfunc_end__ = .; 233 } > AXI_SRAM 234 235 __fw_size__ = __ramfunc_end__ - __ramfunc_start__ + __data_end__ - __data_start__ + etext - __app_load_addr__; 236 .bss : { 237 . = ALIGN(8); 238 __bss_start__ = .; 239 *(.bss) 240 *(.bss*) 241 *(.tbss*) 242 *(.sbss*) 243 *(.scommon) 244 *(.scommon*) 245 *(.tcommon*) 246 *(.dynsbss*) 247 *(COMMON) 248 . = ALIGN(8); 249 _end = .; 250 __bss_end__ = .; 251 } > DLM 252 253 .heap : { 254 . = ALIGN(8); 255 __heap_start = .; 256 __heap_start__ = .; 257 . += HEAP_SIZE; 258 __heap_end__ = .; 259 __heap_end = .; 260 } > AXI_SRAM 261 262 __heap_size = HEAP_SIZE; 263 264 .framebuffer (NOLOAD) : { 265 . = ALIGN(8); 266 KEEP(*(.framebuffer)) 267 . = ALIGN(8); 268 } > AXI_SRAM 269 270 .noncacheable : AT(etext + __data_end__ - __data_start__ + __ramfunc_end__ - __ramfunc_start__){ 271 . = ALIGN(8); 272 __noncacheable_init_start__ = .; 273 KEEP(*(.noncacheable.init)) 274 __noncacheable_init_end__ = .; 275 KEEP(*(.noncacheable)) 276 __noncacheable_bss_start__ = .; 277 KEEP(*(.noncacheable.bss)) 278 __noncacheable_bss_end__ = .; 279 . = ALIGN(8); 280 } > AXI_SRAM_NONCACHEABLE 281 282 .stack : { 283 . = ALIGN(8); 284 __stack_bootom = .; 285 . += STACK_SIZE; 286 __except_stack_top = .; 287 __stack_base__ = .; 288 . += STACK_SIZE; 289 . = ALIGN(8); 290 PROVIDE (_stack = .); 291 PROVIDE (_stack_safe = .); 292 __start_and_irq_stack_top = .; 293 } > DLM 294 295 __noncacheable_start__ = ORIGIN(AXI_SRAM_NONCACHEABLE); 296 __noncacheable_end__ = ORIGIN(AXI_SRAM_NONCACHEABLE) + LENGTH(AXI_SRAM_NONCACHEABLE); 297} 298