Ticket #6308: x86_64_ldscripts.txt

File x86_64_ldscripts.txt, 5.7 KB (added by nmentley, 14 years ago)

x86_64 kernel and bootloader ldscripts

Line 
1Index: src/system/ldscripts/x86_64/boot_loader_bios_x86_64.ld
2===================================================================
3--- src/system/ldscripts/x86_64/boot_loader_bios_x86_64.ld (revision 0)
4+++ src/system/ldscripts/x86_64/boot_loader_bios_x86_64.ld (revision 0)
5@@ -0,0 +1,33 @@
6+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
7+OUTPUT_ARCH(i386)
8+
9+ENTRY(_start)
10+SECTIONS
11+{
12+ . = 0x10000;
13+
14+ /* text/read-only data */
15+ .text : { *(.text .gnu.linkonce.t.*) }
16+
17+ . = ALIGN(0x4);
18+ __ctor_list = .;
19+ .ctors : { *(.ctors) }
20+ __ctor_end = .;
21+
22+ .rodata : { *(.rodata .rodata.*) }
23+
24+ /* writable data */
25+ . = ALIGN(0x1000);
26+ __data_start = .;
27+ .data : { *(.data .gnu.linkonce.d.*) }
28+
29+ /* uninitialized data (in same segment as writable data) */
30+ __bss_start = .;
31+ .bss : { *(.bss) }
32+
33+ . = ALIGN(0x1000);
34+ _end = . ;
35+
36+ /* Strip unnecessary stuff */
37+ /DISCARD/ : { *(.comment .note .eh_frame .dtors .stab .stabstr .debug*) }
38+}
39Index: src/system/ldscripts/x86_64/stage2.ld
40===================================================================
41--- src/system/ldscripts/x86_64/stage2.ld (revision 0)
42+++ src/system/ldscripts/x86_64/stage2.ld (revision 0)
43@@ -0,0 +1,28 @@
44+OUTPUT_FORMAT("elf32-i386", "elf32-i386", "elf32-i386")
45+OUTPUT_ARCH(i386)
46+
47+ENTRY(_start)
48+SECTIONS
49+{
50+ . = 0x101000 + SIZEOF_HEADERS;
51+
52+ /* text/read-only data */
53+ .text : { *(.text .gnu.linkonce.t.*) }
54+
55+ __ctor_list = .;
56+ .ctors : { *(.ctors) }
57+ __ctor_end = .;
58+
59+ .rodata : { *(.rodata .rodata.*) }
60+
61+ /* writable data */
62+ . = ALIGN(0x1000);
63+ __data_start = .;
64+ .data : { *(.data .gnu.linkonce.d.* .bss) }
65+
66+ . = ALIGN(0x1000);
67+ _end = . ;
68+
69+ /* Strip unnecessary stuff */
70+ /DISCARD/ : { *(.comment .note .eh_frame .dtors .stab .stabstr .debug*) }
71+}
72Index: src/system/ldscripts/x86_64/runtime_loader.ld
73===================================================================
74--- src/system/ldscripts/x86_64/runtime_loader.ld (revision 0)
75+++ src/system/ldscripts/x86_64/runtime_loader.ld (revision 0)
76@@ -0,0 +1,63 @@
77+OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
78+OUTPUT_ARCH(i386:x86-64)
79+
80+ENTRY(runtime_loader)
81+SEARCH_DIR("libgcc");
82+SECTIONS
83+{
84+ . = 0x00100000 + SIZEOF_HEADERS;
85+
86+ .interp : { *(.interp) }
87+ .hash : { *(.hash) }
88+ .dynsym : { *(.dynsym) }
89+ .dynstr : { *(.dynstr) }
90+ .rel.text : { *(.rel.text) *(.rel.gnu.linkonce.t*) }
91+ .rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) }
92+ .rel.data : { *(.rel.data) *(.rel.gnu.linkonce.d*) }
93+ .rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) }
94+ .rel.rodata : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
95+ .rela.rodata : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
96+ .rel.got : { *(.rel.got) }
97+ .rela.got : { *(.rela.got) }
98+ .rel.ctors : { *(.rel.ctors) }
99+ .rela.ctors : { *(.rela.ctors) }
100+ .rel.dtors : { *(.rel.dtors) }
101+ .rela.dtors : { *(.rela.dtors) }
102+ .rel.init : { *(.rel.init) }
103+ .rela.init : { *(.rela.init) }
104+ .rel.fini : { *(.rel.fini) }
105+ .rela.fini : { *(.rela.fini) }
106+ .rel.bss : { *(.rel.bss) }
107+ .rela.bss : { *(.rela.bss) }
108+ .rel.plt : { *(.rel.plt) }
109+ .rela.plt : { *(.rela.plt) }
110+ .init : { *(.init) } =0x9090
111+ .plt : { *(.plt) }
112+
113+ /* text/read-only data */
114+ .text : { *(.text .gnu.linkonce.t.*) }
115+
116+ .rodata : { *(.rodata) }
117+
118+ /* writable data */
119+ . = ALIGN(0x1000) + (. & (0x1000 - 1));
120+ __data_start = .;
121+ PROVIDE(_data_start = .);
122+ .data : { *(.data .gnu.linkonce.d.*) }
123+
124+ __ctor_list = .;
125+ PROVIDE (_ctor_list = .);
126+ .ctors : { *(.ctors) }
127+ PROVIDE (__ctor_end = .);
128+
129+
130+ /* uninitialized data (in same segment as writable data) */
131+ PROVIDE (__bss_start = .);
132+ .bss : { *(.bss) }
133+
134+ . = ALIGN(0x1000);
135+ PROVIDE (_end = .);
136+
137+ /* Strip unnecessary stuff */
138+ /DISCARD/ : { *(.comment .note .eh_frame .dtors) }
139+}
140Index: src/system/ldscripts/x86_64/kernel.ld
141===================================================================
142--- src/system/ldscripts/x86_64/kernel.ld (revision 0)
143+++ src/system/ldscripts/x86_64/kernel.ld (revision 0)
144@@ -0,0 +1,66 @@
145+OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64")
146+OUTPUT_ARCH(i386:x86-64)
147+
148+ENTRY(_start)
149+SEARCH_DIR("libgcc");
150+SECTIONS
151+{
152+ . = 0x80000000 + SIZEOF_HEADERS;
153+
154+ .interp : { *(.interp) }
155+ .hash : { *(.hash) }
156+ .dynsym : { *(.dynsym) }
157+ .dynstr : { *(.dynstr) }
158+ .rel.text : { *(.rel.text) *(.rel.gnu.linkonce.t*) }
159+ .rela.text : { *(.rela.text) *(.rela.gnu.linkonce.t*) }
160+ .rel.data : { *(.rel.data) *(.rel.gnu.linkonce.d*) }
161+ .rela.data : { *(.rela.data) *(.rela.gnu.linkonce.d*) }
162+ .rel.rodata : { *(.rel.rodata) *(.rel.gnu.linkonce.r*) }
163+ .rela.rodata : { *(.rela.rodata) *(.rela.gnu.linkonce.r*) }
164+ .rel.got : { *(.rel.got) }
165+ .rela.got : { *(.rela.got) }
166+ .rel.ctors : { *(.rel.ctors) }
167+ .rela.ctors : { *(.rela.ctors) }
168+ .rel.dtors : { *(.rel.dtors) }
169+ .rela.dtors : { *(.rela.dtors) }
170+ .rel.init : { *(.rel.init) }
171+ .rela.init : { *(.rela.init) }
172+ .rel.fini : { *(.rel.fini) }
173+ .rela.fini : { *(.rela.fini) }
174+ .rel.bss : { *(.rel.bss) }
175+ .rela.bss : { *(.rela.bss) }
176+ .rel.plt : { *(.rel.plt) }
177+ .rela.plt : { *(.rela.plt) }
178+ .init : { *(.init) } =0x9090
179+ .plt : { *(.plt) }
180+
181+ /* text/read-only data */
182+ .text : { *(.text .gnu.linkonce.t.*) } =0x9090
183+
184+ .rodata : { *(.rodata) }
185+
186+ /* writable data */
187+ . = ALIGN(0x1000);
188+ __data_start = .;
189+ .data : { *(.data .gnu.linkonce.d.*) }
190+
191+ . = ALIGN(0x4);
192+ __ctor_list = .;
193+ .ctors : { *(.ctors) }
194+ __ctor_end = .;
195+ __dtor_list = .;
196+ .dtors : { *(.dtors) }
197+ __dtor_end = .;
198+ .got : { *(.got.plt) *(.got) }
199+ .dynamic : { *(.dynamic) }
200+
201+ /* uninitialized data (in same segment as writable data) */
202+ __bss_start = .;
203+ .bss : { *(.bss) }
204+
205+ . = ALIGN(0x1000);
206+ _end = . ;
207+
208+ /* Strip unnecessary stuff */
209+ /DISCARD/ : { *(.comment .note .eh_frame) }
210+}