]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/bootstrap_custom/server/src/ARCH-x86/bootstrap.ld.in
l4: bootstrap_custom: Fix unsupported paging mode error, which was caused by the...
[l4.git] / l4 / pkg / bootstrap_custom / server / src / ARCH-x86 / bootstrap.ld.in
1
2 #include "ldscript.inc"
3
4 ENTRY(_start)
5
6 /*PHDRS {
7   data PT_LOAD;
8 #ifdef IMAGE_MODE
9   mods PT_LOAD;
10 #endif
11 }*/
12
13 SECTIONS
14 {
15 #define LOAD_OFFSET (0x0)
16 #ifdef JAILHOUSE
17   #define LOAD_OFFSET (0xf0000)
18   . = 0;
19
20   /* 16-bit sections */
21   .jh-startup :  { *(.jh.startup) }
22
23   . = 0xfff0;
24   .jh-boot    : {
25       *(.jh.boot)
26     . = ALIGN(16);
27   }
28 #endif
29
30 #ifdef ARCH_amd64
31   . = LINKADDR + SIZEOF_HEADERS;
32 #else
33   . = LINKADDR; 
34 #endif
35   PROVIDE (ImageBase = LINKADDR);
36   /*.hash : AT (ADDR(.hash) - LOAD_OFFSET) { *(.hash) } : data */   /* this MUST come first! */
37   /* Merge .text, .rodata, and .data in one segment to save space */
38
39   /* provide at least 1K space for PE header in case of EFI */
40   /* NOTE: the .hash section is not used for EFI, so we declare
41    *       this as free space for PE too
42    */
43   /* FXIME: should make this depending on EFI */
44   /*. = (. < (0x400 + LINKADDR)) ? (LINKADDR + 0x400) : .;*/
45
46   .text : AT (ADDR(.text) - LOAD_OFFSET) 
47   {
48     *(.init)
49     *(.text .text.* .gnu.linkonce.t*)
50
51     *(.rodata*)
52   } /*: data*/
53
54   .dynsym   : AT (ADDR(.dynsym) - LOAD_OFFSET) { *(.dynsym) }  /*: data*/
55   .dynstr   : AT (ADDR(.dynstr) - LOAD_OFFSET) { *(.dynstr) }  /*: data*/
56   .reloc    : AT (ADDR(.reloc) - LOAD_OFFSET) { *(.reloc) }  /*: data*/
57   .rel.dyn : AT (ADDR(.rel.dyn) - LOAD_OFFSET)
58   {
59     *(.rel.*) *(.rel.module_info)
60   }  /*: data*/
61
62
63   .data : AT (ADDR(.data) - LOAD_OFFSET)
64   {
65     . = ALIGN(8);
66     *(.data)
67     *(.data.*)
68     *(.plt)
69     *(.got.plt)
70     *(.got)
71
72     CTORS
73     PLATFORMS
74
75   }  /*: data*/
76
77
78   .data.module_info : AT (ADDR(.data.module_info) - LOAD_OFFSET)
79   {
80     . = ALIGN(16);
81     _module_info_start = .;
82     *(.module_info .module_info.*)
83     _module_info_end = .;
84   }  /*: data*/
85
86
87   .dynamic  : AT (ADDR(.dynamic) - LOAD_OFFSET)  { *(.dynamic) } /*: data*/
88   .rela.dyn : AT (ADDR(.rela.dyn) - LOAD_OFFSET)
89   {
90     *(.rela.init)
91     *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
92     *(.rela.fini)
93     *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
94     *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
95     *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
96     *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
97     *(.rela.ctors)
98     *(.rela.dtors)
99     *(.rela.got)
100     *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
101     *(.rela.ldata .rela.ldata.* .rela.gnu.linkonce.l.*)
102     *(.rela.lbss .rela.lbss.* .rela.gnu.linkonce.lb.*)
103     *(.rela.lrodata .rela.lrodata.* .rela.gnu.linkonce.lr.*)
104     *(.rela.ifunc)
105     *(.rela.module*)
106     *(.rela.init_array)
107   }  /*: data*/
108
109   .rela.plt : AT (ADDR(.rela.plt) - LOAD_OFFSET)
110   {
111     *(.rela.plt)
112     *(.rela.iplt)
113   } /*: data*/
114
115
116   _edata  =  .;
117   PROVIDE (edata = .);
118   . = ALIGN(4096);
119   __bss_start = .;
120   .bss : AT (ADDR(.bss) - LOAD_OFFSET)
121   {
122    *(.bss)
123    *(.bss.*)
124    *(COMMON)
125    *(.dynbss)
126    *(.bss_memmap)
127   }  /*: data*/
128
129   _end = . ;
130   PROVIDE (end = .);
131   . = ALIGN(4096);
132
133 /* Only move modules to modaddr if bootstrap is being loaded by an elf
134  * loader, and we do not need to copy images around at runtime (e.g. with
135  * compression) */
136 #ifdef IMAGE_MODE
137 #if defined(PLACE_MODULES_AT_MODADDR) && !defined(SINGLE_SECTION)
138   . = RAM_BASE + MODADDR;
139 #endif
140   _module_data_start = .;
141   .module_data : AT (ADDR(.module_data) - LOAD_OFFSET) {
142     *(EXCLUDE_FILE (*mod00.bin *mod01.bin *mod02.bin) .module_data)
143     *(.module_data)
144   }  /*: mods*/
145
146   _module_data_end = .;
147 #endif
148
149   /DISCARD/ : {
150     *(.rela.reloc)
151     *(.note.GNU-stack)
152     *(.jcr)
153     *(.interp)
154     *(.comment)
155     *(.note)
156     *(.eh_frame)
157     *(.stab)
158     *(.stabstr)
159     *(.fini)
160   }
161 }