vm: allow split of mem_anon_contig region
[minix3.git] / minix / servers / vm / arch / earm / vm.lds
blob0339c73efc0ba7e492ad527358615feb21d62173
1 /* Script for -z combreloc: combine and sort reloc sections */
2 OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
3               "elf32-littlearm")
4 OUTPUT_ARCH(arm)
5 ENTRY(_start)
6 SEARCH_DIR("=/usr/local/lib"); SEARCH_DIR("=/lib"); SEARCH_DIR("=/usr/lib");
7 SECTIONS
9   /* Read-only sections, merged into text segment: */
10   PROVIDE (__executable_start = SEGMENT_START("text-segment", 0x8000)); . = SEGMENT_START("text-segment", 0x8000);
11   .interp         : { *(.interp) }
12   .note.gnu.build-id : { *(.note.gnu.build-id) }
13   .hash           : { *(.hash) }
14   .gnu.hash       : { *(.gnu.hash) }
15   .dynsym         : { *(.dynsym) }
16   .dynstr         : { *(.dynstr) }
17   .gnu.version    : { *(.gnu.version) }
18   .gnu.version_d  : { *(.gnu.version_d) }
19   .gnu.version_r  : { *(.gnu.version_r) }
20   .rel.dyn        :
21     {
22       *(.rel.init)
23       *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*)
24       *(.rel.fini)
25       *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*)
26       *(.rel.data.rel.ro* .rel.gnu.linkonce.d.rel.ro.*)
27       *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*)
28       *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*)
29       *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*)
30       *(.rel.ctors)
31       *(.rel.dtors)
32       *(.rel.got)
33       *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*)
34       PROVIDE_HIDDEN (__rel_iplt_start = .);
35       *(.rel.iplt)
36       PROVIDE_HIDDEN (__rel_iplt_end = .);
37       PROVIDE_HIDDEN (__rela_iplt_start = .);
38       PROVIDE_HIDDEN (__rela_iplt_end = .);
39     }
40   .rela.dyn       :
41     {
42       *(.rela.init)
43       *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*)
44       *(.rela.fini)
45       *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*)
46       *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*)
47       *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*)
48       *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*)
49       *(.rela.ctors)
50       *(.rela.dtors)
51       *(.rela.got)
52       *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*)
53       PROVIDE_HIDDEN (__rel_iplt_start = .);
54       PROVIDE_HIDDEN (__rel_iplt_end = .);
55       PROVIDE_HIDDEN (__rela_iplt_start = .);
56       *(.rela.iplt)
57       PROVIDE_HIDDEN (__rela_iplt_end = .);
58     }
59   .rel.plt        :
60     {
61       *(.rel.plt)
62     }
63   .rela.plt       :
64     {
65       *(.rela.plt)
66     }
67   .init           :
68   {
69     KEEP (*(.init))
70   } =0
71   .plt            : { *(.plt) }
72   .iplt           : { *(.iplt) }
73   .text           :
74   {
75     *(.text.unlikely .text.*_unlikely)
76     *(.text.exit .text.exit.*)
77     *(.text.startup .text.startup.*)
78     *(.text.hot .text.hot.*)
79     *(.text .stub .text.* .gnu.linkonce.t.*)
80     /* .gnu.warning sections are handled specially by elf32.em.  */
81     *(.gnu.warning)
82     *(.glue_7t) *(.glue_7) *(.vfp11_veneer) *(.v4_bx)
83   } =0
84   .fini           :
85   {
86     KEEP (*(.fini))
87   } =0
88   PROVIDE (__etext = .);  
89   PROVIDE (_etext = .);   
90   PROVIDE (etext = .);
91   .rodata         : { *(.rodata .rodata.* .gnu.linkonce.r.*) }
92   .rodata1        : { *(.rodata1) }
93   .ARM.extab   : { *(.ARM.extab* .gnu.linkonce.armextab.*) }
94    PROVIDE_HIDDEN (__exidx_start = .);
95   .ARM.exidx   : { *(.ARM.exidx* .gnu.linkonce.armexidx.*) }
96    PROVIDE_HIDDEN (__exidx_end = .);
97   .eh_frame_hdr : { *(.eh_frame_hdr) }
98   .eh_frame       : ONLY_IF_RO { KEEP (*(.eh_frame)) }
99   .gcc_except_table   : ONLY_IF_RO { *(.gcc_except_table
100   .gcc_except_table.*) }  
101   /* These sections are generated by the Sun/Oracle C++ compiler.  */
102   .exception_ranges   : ONLY_IF_RO { *(.exception_ranges
103   .exception_ranges*) }   
104   /* Adjust the address for the data segment.  We want to adjust up to
105      the same address within the page on the next page up.  */
106 /* XXX: align on page boundary */
107 /*  . = ALIGN(CONSTANT (MAXPAGESIZE)) + (. & (CONSTANT (MAXPAGESIZE) - 1));*/
108   . = ALIGN(4096);
109   /* Exception handling  */
110   .eh_frame       : ONLY_IF_RW { KEEP (*(.eh_frame)) }                          
111   .gcc_except_table   : ONLY_IF_RW { *(.gcc_except_table .gcc_except_table.*) }
112   .exception_ranges   : ONLY_IF_RW { *(.exception_ranges .exception_ranges*) }
113   /* Thread Local Storage sections  */
114   .tdata          : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
115   .tbss           : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
116   .preinit_array     :
117   {
118     PROVIDE_HIDDEN (__preinit_array_start = .);
119     KEEP (*(.preinit_array))
120     PROVIDE_HIDDEN (__preinit_array_end = .);
121   }
122   .init_array     :
123   {
124     PROVIDE_HIDDEN (__init_array_start = .); 
125     KEEP (*(SORT(.init_array.*)))
126     KEEP (*(.init_array))
127     PROVIDE_HIDDEN (__init_array_end = .);   
128   }
129   .fini_array     :
130   {
131     PROVIDE_HIDDEN (__fini_array_start = .); 
132     KEEP (*(SORT(.fini_array.*)))
133     KEEP (*(.fini_array))
134     PROVIDE_HIDDEN (__fini_array_end = .);   
135   }
136   .ctors          :
137   {
138     /* gcc uses crtbegin.o to find the start of
139        the constructors, so we make sure it is
140        first.  Because this is a wildcard, it
141        doesn't matter if the user does not   
142        actually link against crtbegin.o; the 
143        linker won't look for a file to match a
144        wildcard.  The wildcard also means that it
145        doesn't matter which directory crtbegin.o
146        is in.  */
147     KEEP (*crtbegin.o(.ctors))
148     KEEP (*crtbegin?.o(.ctors))
149     /* We don't want to include the .ctor section from
150        the crtend.o file until after the sorted ctors.
151        The .ctor section from the crtend file contains the
152        end of ctors marker and it must be last */
153     KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors))
154     KEEP (*(SORT(.ctors.*)))
155     KEEP (*(.ctors))
156   }
157   .dtors          :
158   {
159     KEEP (*crtbegin.o(.dtors))
160     KEEP (*crtbegin?.o(.dtors))
161     KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors))
162     KEEP (*(SORT(.dtors.*)))
163     KEEP (*(.dtors))
164   }
165 /* XXX: no jcr, got, etc.
167   .jcr            : { KEEP (*(.jcr)) }
168   .data.rel.ro : { *(.data.rel.ro.local* .gnu.linkonce.d.rel.ro.local.*) *(.data.rel.ro* .gnu.linkonce.d.rel.ro.*) }
169   .dynamic        : { *(.dynamic) }
170   .got            : { *(.got.plt) *(.igot.plt) *(.got) *(.igot) }
172   .data           :
173   {
174     __data_start = . ;
175   /* XXX: put pagetable data at beginning */
176    pagetable.o(.data)
177     *(.data .data.* .gnu.linkonce.d.*)
178     SORT(CONSTRUCTORS)
179     /* XXX: 16KB align */
180  . = ALIGN(16384);
181   }
182   .data1          : { *(.data1) }
183   _edata = .; PROVIDE (edata = .);
184    __bss_start = .;
185   __bss_start__ = .;
186   .bss            :
187   {
188   /* XXX: put pagetable bss at beginning */
189    pagetable.o(.bss)
190    *(.dynbss)
191    *(.bss .bss.* .gnu.linkonce.b.*)
192    *(COMMON)
193    /* Align here to ensure that the .bss section occupies space up to
194       _end.  Align after .bss to ensure correct alignment even if the
195       .bss section disappears because there are no input sections.
196       FIXME: Why do we need it? When there is no .bss section, we don't
197       pad the .data section.  */
198    . = ALIGN(. != 0 ? 32 / 8 : 1);
199   }
200   _bss_end__ = . ; __bss_end__ = . ;
201   . = ALIGN(32 / 8);
202   . = ALIGN(32 / 8);
203   __end__ = . ;
204   _end = .; PROVIDE (end = .);
205   /* Stabs debugging sections.  */
206   .stab          0 : { *(.stab) }
207   .stabstr       0 : { *(.stabstr) }
208   .stab.excl     0 : { *(.stab.excl) }
209   .stab.exclstr  0 : { *(.stab.exclstr) }
210   .stab.index    0 : { *(.stab.index) }
211   .stab.indexstr 0 : { *(.stab.indexstr) }   
212   .comment       0 : { *(.comment) }
213   /* DWARF debug sections.
214      Symbols in the DWARF debugging sections are relative to the beginning
215      of the section so we begin them at 0.  */
216   /* DWARF 1 */
217   .debug          0 : { *(.debug) }
218   .line           0 : { *(.line) }
219   /* GNU DWARF 1 extensions */
220   .debug_srcinfo  0 : { *(.debug_srcinfo) }  
221   .debug_sfnames  0 : { *(.debug_sfnames) }  
222   /* DWARF 1.1 and DWARF 2 */
223   .debug_aranges  0 : { *(.debug_aranges) }  
224   .debug_pubnames 0 : { *(.debug_pubnames) } 
225   /* DWARF 2 */
226   .debug_info     0 : { *(.debug_info .gnu.linkonce.wi.*) }
227   .debug_abbrev   0 : { *(.debug_abbrev) }   
228   .debug_line     0 : { *(.debug_line) }
229   .debug_frame    0 : { *(.debug_frame) }
230   .debug_str      0 : { *(.debug_str) }
231   .debug_loc      0 : { *(.debug_loc) }
232   .debug_macinfo  0 : { *(.debug_macinfo) }  
233   /* SGI/MIPS DWARF 2 extensions */
234   .debug_weaknames 0 : { *(.debug_weaknames) }
235   .debug_funcnames 0 : { *(.debug_funcnames) }
236   .debug_typenames 0 : { *(.debug_typenames) }
237   .debug_varnames  0 : { *(.debug_varnames) }
238   /* DWARF 3 */
239   .debug_pubtypes 0 : { *(.debug_pubtypes) } 
240   .debug_ranges   0 : { *(.debug_ranges) }   
241     .stack         0x80000 :
242   {
243     _stack = .;
244     *(.stack)
245   }
246   .ARM.attributes 0 : { KEEP (*(.ARM.attributes)) KEEP (*(.gnu.attributes)) }
247   .note.gnu.arm.ident 0 : { KEEP (*(.note.gnu.arm.ident)) }
248   /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) }