1/* 2 * Copyright (c) 2022-2022 Huawei Device Co., Ltd. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without modification, 5 * are permitted provided that the following conditions are met: 6 * 7 * 1. Redistributions of source code must retain the above copyright notice, this list of 8 * conditions and the following disclaimer. 9 * 10 * 2. Redistributions in binary form must reproduce the above copyright notice, this list 11 * of conditions and the following disclaimer in the documentation and/or other materials 12 * provided with the distribution. 13 * 14 * 3. Neither the name of the copyright holder nor the names of its contributors may be used 15 * to endorse or promote products derived from this software without specific prior written 16 * permission. 17 * 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, 20 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 21 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR 22 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 23 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 24 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 25 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 26 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 27 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 28 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 */ 30 31OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm") 32OUTPUT_ARCH(arm) 33ENTRY(g_bootVectors) 34 35SVC_IRQ_STACK_SIZE = 4K; 36 37FLASH_START = 0x08000000; 38FLASH_SIZE = 1M; 39 40PS_RAM_START = 0x20000000; 41PS_RAM_SIZE = 128K; 42 43MEMORY 44{ 45 flash(rx) : ORIGIN = FLASH_START, LENGTH = FLASH_SIZE 46 ram(rwx) : ORIGIN = PS_RAM_START, LENGTH = PS_RAM_SIZE 47} 48 49SECTIONS 50{ 51 _stext = .; 52 .vector : { 53 KEEP (*(SORT_NONE(.reset))) 54 } > flash 55 56 .got : { 57 *(.got.plt) 58 *(.igot.plt) 59 *(.got) 60 *(.igot) 61 } > flash 62 63 .text : { 64 . = ALIGN(0x4); 65 __text_start = .; 66 *(.text.*) 67 . = ALIGN(0x4); 68 _etext = .; 69 *(.rodata .rodata.* .gnu.linkonce.r.*) 70 *(.rodata1) 71 } > flash 72 73 .zInit (.) : { 74 . = ALIGN(4); 75 __zinitcall_bsp_start = .; 76 KEEP (*(.zinitcall.bsp0.init)) 77 KEEP (*(.zinitcall.bsp1.init)) 78 KEEP (*(.zinitcall.bsp2.init)) 79 KEEP (*(.zinitcall.bsp3.init)) 80 KEEP (*(.zinitcall.bsp4.init)) 81 __zinitcall_bsp_end = .; 82 . = ALIGN(4); 83 __zinitcall_device_start = .; 84 KEEP (*(.zinitcall.device0.init)) 85 KEEP (*(.zinitcall.device1.init)) 86 KEEP (*(.zinitcall.device2.init)) 87 KEEP (*(.zinitcall.device3.init)) 88 KEEP (*(.zinitcall.device4.init)) 89 __zinitcall_device_end = .; 90 . = ALIGN(4); 91 __zinitcall_core_start = .; 92 KEEP (*(.zinitcall.core0.init)) 93 KEEP (*(.zinitcall.core1.init)) 94 KEEP (*(.zinitcall.core2.init)) 95 KEEP (*(.zinitcall.core3.init)) 96 KEEP (*(.zinitcall.core4.init)) 97 __zinitcall_core_end = .; 98 . = ALIGN(4); 99 __zinitcall_sys_service_start = .; 100 KEEP (*(.zinitcall.sys.service0.init)) 101 KEEP (*(.zinitcall.sys.service1.init)) 102 KEEP (*(.zinitcall.sys.service2.init)) 103 KEEP (*(.zinitcall.sys.service3.init)) 104 KEEP (*(.zinitcall.sys.service4.init)) 105 __zinitcall_sys_service_end = .; 106 . = ALIGN(4); 107 __zinitcall_sys_feature_start = .; 108 KEEP (*(.zinitcall.sys.feature0.init)) 109 KEEP (*(.zinitcall.sys.feature1.init)) 110 KEEP (*(.zinitcall.sys.feature2.init)) 111 KEEP (*(.zinitcall.sys.feature3.init)) 112 KEEP (*(.zinitcall.sys.feature4.init)) 113 __zinitcall_sys_feature_end = .; 114 . = ALIGN(4); 115 __zinitcall_run_start = .; 116 KEEP (*(.zinitcall.run0.init)) 117 KEEP (*(.zinitcall.run1.init)) 118 KEEP (*(.zinitcall.run2.init)) 119 KEEP (*(.zinitcall.run3.init)) 120 KEEP (*(.zinitcall.run4.init)) 121 __zinitcall_run_end = .; 122 . = ALIGN(4); 123 __zinitcall_app_service_start = .; 124 KEEP (*(.zinitcall.app.service0.init)) 125 KEEP (*(.zinitcall.app.service1.init)) 126 KEEP (*(.zinitcall.app.service2.init)) 127 KEEP (*(.zinitcall.app.service3.init)) 128 KEEP (*(.zinitcall.app.service4.init)) 129 __zinitcall_app_service_end = .; 130 . = ALIGN(4); 131 __zinitcall_app_feature_start = .; 132 KEEP (*(.zinitcall.app.feature0.init)) 133 KEEP (*(.zinitcall.app.feature1.init)) 134 KEEP (*(.zinitcall.app.feature2.init)) 135 KEEP (*(.zinitcall.app.feature3.init)) 136 KEEP (*(.zinitcall.app.feature4.init)) 137 __zinitcall_app_feature_end = .; 138 . = ALIGN(4); 139 __zinitcall_test_start = .; 140 KEEP (*(.zinitcall.test0.init)) 141 KEEP (*(.zinitcall.test1.init)) 142 KEEP (*(.zinitcall.test2.init)) 143 KEEP (*(.zinitcall.test3.init)) 144 KEEP (*(.zinitcall.test4.init)) 145 __zinitcall_test_end = .; 146 . = ALIGN(4); 147 __zinitcall_exit_start = .; 148 KEEP (*(.zinitcall.exit0.init)) 149 KEEP (*(.zinitcall.exit1.init)) 150 KEEP (*(.zinitcall.exit2.init)) 151 KEEP (*(.zinitcall.exit3.init)) 152 KEEP (*(.zinitcall.exit4.init)) 153 __zinitcall_exit_end = .; 154 . = ALIGN(4); 155 } > flash 156 157 .data : { 158 __data_start = . ; 159 g_data_start = . ; 160 KEEP (*(SORT_NONE(VECTOR))) 161 162 *(.data .data.* .gnu.linkonce.d.*) 163 164 . = ALIGN(0x4); 165 _hdf_drivers_start = .; 166 KEEP(*(.hdf.driver)) 167 _hdf_drivers_end = .; /* define a section for hdf driver */ 168 169 __data_end = . ; 170 g_data_end = . ; 171 } > ram AT > flash 172 173 data_load_start = LOADADDR(.data); 174 175 .bss : ALIGN(0x4) { 176 __bss_start = .; 177 g_bssStart = .; 178 *(.dynbss) 179 *(.bss .bss.* .gnu.linkonce.b.*) 180 *(COMMON) 181 . = ALIGN(0x4); 182 __bss_end = .; 183 g_bssEnd = .; 184 } > ram 185 186 _sstack = .; 187 .stack : ALIGN(0x8) { 188 _stack = .; 189 g_stackStart = .; 190 __irq_stack_bootom = .; 191 . += SVC_IRQ_STACK_SIZE; 192 __irq_stack_top = .; 193 g_stackEnd = .; 194 _estack = .; 195 } > ram 196 197 .heap (NOLOAD): ALIGN(0x40) { 198 __heap_start = .; 199 } > ram 200 201 __heap_size = PS_RAM_SIZE - (__heap_start - __data_start); 202 end = .; 203 /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } 204} 205