Ticket #6308: x86_64_ldscripts.txt

File x86_64_ldscripts.txt, 5.7 KB (added by nmentley, 9 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+}