blob: 0f73ac2d7b8c9418b9738f304657d7c3c9a99e2b [file] [log] [blame]
rjw1f884582022-01-06 17:20:42 +08001/*
2 * Copyright (c) 2009 Corey Tabaka
3 * Copyright (c) 2013 Travis Geiselbrecht
4 * Copyright (c) 2015 Intel Corporation
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining
7 * a copy of this software and associated documentation files
8 * (the "Software"), to deal in the Software without restriction,
9 * including without limitation the rights to use, copy, modify, merge,
10 * publish, distribute, sublicense, and/or sell copies of the Software,
11 * and to permit persons to whom the Software is furnished to do so,
12 * subject to the following conditions:
13 *
14 * The above copyright notice and this permission notice shall be
15 * included in all copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
20 * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
21 * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
22 * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
23 * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
24 */
25
26ENTRY(_start)
27SECTIONS
28{
29 . = 0x0200000;
30
31 .text : {
32 __code_start = .;
33 KEEP(*(.text.boot))
34 *(.text* .sram.text)
35 *(.gnu.linkonce.t.*)
36 __code_end = .;
37 } =0x9090
38
39 .rodata : ALIGN(4096) {
40 __rodata_start = .;
41 *(.rodata*)
42 *(.gnu.linkonce.r.*)
43 . = ALIGN(8);
44 }
45
46 /*
47 * extra linker scripts tend to insert sections just after .rodata,
48 * so we want to make sure this symbol comes after anything inserted above,
49 * but not aligned to the next section necessarily.
50 */
51 .dummy_post_rodata : {
52 __rodata_end = .;
53 }
54
55 .data : ALIGN(4096) {
56 __data_start = .;
57 *(.data .data.* .gnu.linkonce.d.*)
58 }
59
60 .ctors : ALIGN(4) {
61 __ctor_list = .;
62 KEEP(*(.ctors .init_array))
63 __ctor_end = .;
64 }
65 .dtors : ALIGN(4) {
66 __dtor_list = .;
67 KEEP(*(.dtors .fini_array))
68 __dtor_end = .;
69 }
70
71 .stab : { *(.stab) }
72 .stabst : { *(.stabstr) }
73
74 /*
75 * extra linker scripts tend to insert sections just after .data,
76 * so we want to make sure this symbol comes after anything inserted above,
77 * but not aligned to the next section necessarily.
78 */
79 .dummy_post_data : {
80 __data_end = .;
81 }
82
83 .bss : ALIGN(4096) {
84 __bss_start = .;
85 *(.bss*)
86 *(.gnu.linkonce.b.*)
87 *(COMMON)
88 . = ALIGN(8);
89 __bss_end = .;
90 }
91
92 _end = .;
93
94 /* put a symbol arbitrarily 4MB past the end of the kernel */
95 /* used by the heap and other early boot time allocators */
96 _end_of_ram = . + (4*1024*1024);
97
98 /DISCARD/ : { *(.comment .note .eh_frame) }
99}