• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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