First version
[3rdparty/ote_partner/tlk.git] / lib / monitor / arm64 / monitor-onesegment.ld
1 OUTPUT_FORMAT("elf64-littleaarch64", "elf64-littleaarch64", "elf64-littleaarch64")
2 OUTPUT_ARCH(aarch64)
3
4 ENTRY(_start)
5 SECTIONS
6 {
7         . = %MEMBASE%;
8
9         /* text/read-only data */
10         .text.boot.vectab1 : { KEEP(*(.text.boot.vectab1)) }
11         .text.boot.vectab2 : { KEEP(*(.text.boot.vectab2)) }
12         .text.boot : { KEEP(*(.text.boot)) }
13         .text : { *(.text .text.* .glue_7* .gnu.linkonce.t.*) } =0x9090
14
15         .interp : { *(.interp) }
16         .hash : { *(.hash) }
17         .dynsym : { *(.dynsym) }
18         .dynstr : { *(.dynstr) }
19         .rel.text : { *(.rel.text) *(.rel.gnu.linkonce.t*) }
20         .rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) }
21         .rel.data : { *(.rel.data) *(.rel.gnu.linkonce.d*) }
22         .rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) }
23         .rel.rodata : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
24         .rela.rodata : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
25         .rel.got : { *(.rel.got) }
26         .rela.got : { *(.rela.got) }
27         .rel.ctors : { *(.rel.ctors) }
28         .rela.ctors : { *(.rela.ctors) }
29         .rel.dtors : { *(.rel.dtors) }
30         .rela.dtors : { *(.rela.dtors) }
31         .rel.init : { *(.rel.init) }
32         .rela.init : { *(.rela.init) }
33         .rel.fini : { *(.rel.fini) }
34         .rela.fini : { *(.rela.fini) }
35         .rel.bss : { *(.rel.bss) }
36         .rela.bss : { *(.rela.bss) }
37         .rel.plt : { *(.rel.plt) }
38         .rela.plt : { *(.rela.plt) }
39         .init : { *(.init) } =0x9090
40         .plt : { *(.plt) }
41
42         /* .ARM.exidx is sorted, so has to go in its own output section.  */
43         __exidx_start = .;
44         .ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
45         __exidx_end = .;
46
47         .rodata : {
48                 *(.rodata .rodata.* .gnu.linkonce.r.*)
49                 . = ALIGN(8);
50                 __rodata_end = . ;
51         }
52
53         /* writable data  */
54         __data_start_rom = .;
55         /* in one segment binaries, the rom data address is on top of the ram data address */
56         __data_start = .;
57         .data : SUBALIGN(8) {
58                 *(.data .data.* .gnu.linkonce.d.*)
59         }
60
61         __ctor_list = .;
62         .ctors : { *(.ctors) }
63         __ctor_end = .;
64         __dtor_list = .;
65         .dtors : { *(.dtors) }
66         __dtor_end = .;
67         .got : { *(.got.plt) *(.got) }
68         .dynamic : { *(.dynamic) }
69
70         __data_end = .;
71
72         /* unintialized data (in same segment as writable data) */
73         .prebss : SUBALIGN(8) { KEEP(*(.bss.prebss.*)) }
74         .bss.initial_stack : SUBALIGN(8) { KEEP(*(.bss.initial_stack)) }
75         __bss_start = .;
76         .bss : SUBALIGN(8) {
77                 *(.bss .bss.*)
78                 *(COMMON)
79         }
80         __bss_end = .;
81
82         .bss-filler : {
83                 /* This .bss-filler section serves two purposes.
84                    To execute the task in-place, the preceding .bss section needs to
85                    occupy real space in the image, so when loaded into LK, there's
86                    memory underneath it. Adding this section after .bss, forces space
87                    in the file to be allocated.
88                    This section also rounds .bss to be page-aligned, which is required,
89                    so when multiple tasks are concatenated together in loading the image,
90                    the end of the task (before the beginning of the next) has the needed
91                    page alignment */
92                 . += (__bss_end - __bss_start);
93                 BYTE(0);
94                 . += 1;
95                 . = ALIGN(0x1000);
96         } =0
97
98         _end = .;
99
100         /* Strip unnecessary stuff */
101         /DISCARD/ : { *(.comment .note .eh_frame) }
102 }