linker script: unify usage of discard definition
[linux-2.6.git] / arch / um / kernel / dyn.lds.S
1 #include <asm-generic/vmlinux.lds.h>
2 #include <asm/page.h>
3
4 OUTPUT_FORMAT(ELF_FORMAT)
5 OUTPUT_ARCH(ELF_ARCH)
6 ENTRY(_start)
7 jiffies = jiffies_64;
8
9 SECTIONS
10 {
11   PROVIDE (__executable_start = START);
12   . = START + SIZEOF_HEADERS;
13   .interp         : { *(.interp) }
14   __binary_start = .;
15   . = ALIGN(4096);              /* Init code and data */
16   _text = .;
17   _stext = .;
18   __init_begin = .;
19   .init.text : {
20         _sinittext = .;
21         INIT_TEXT
22         _einittext = .;
23   }
24
25   . = ALIGN(PAGE_SIZE);
26
27   /* Read-only sections, merged into text segment: */
28   .hash           : { *(.hash) }
29   .gnu.hash       : { *(.gnu.hash) }
30   .dynsym         : { *(.dynsym) }
31   .dynstr         : { *(.dynstr) }
32   .gnu.version    : { *(.gnu.version) }
33   .gnu.version_d  : { *(.gnu.version_d) }
34   .gnu.version_r  : { *(.gnu.version_r) }
35   .rel.init       : { *(.rel.init) }
36   .rela.init      : { *(.rela.init) }
37   .rel.text       : { *(.rel.text .rel.text.* .rel.gnu.linkonce.t.*) }
38   .rela.text      : { *(.rela.text .rela.text.* .rela.gnu.linkonce.t.*) }
39   .rel.fini       : { *(.rel.fini) }
40   .rela.fini      : { *(.rela.fini) }
41   .rel.rodata     : { *(.rel.rodata .rel.rodata.* .rel.gnu.linkonce.r.*) }
42   .rela.rodata    : { *(.rela.rodata .rela.rodata.* .rela.gnu.linkonce.r.*) }
43   .rel.data       : { *(.rel.data .rel.data.* .rel.gnu.linkonce.d.*) }
44   .rela.data      : { *(.rela.data .rela.data.* .rela.gnu.linkonce.d.*) }
45   .rel.tdata      : { *(.rel.tdata .rel.tdata.* .rel.gnu.linkonce.td.*) }
46   .rela.tdata     : { *(.rela.tdata .rela.tdata.* .rela.gnu.linkonce.td.*) }
47   .rel.tbss       : { *(.rel.tbss .rel.tbss.* .rel.gnu.linkonce.tb.*) }
48   .rela.tbss      : { *(.rela.tbss .rela.tbss.* .rela.gnu.linkonce.tb.*) }
49   .rel.ctors      : { *(.rel.ctors) }
50   .rela.ctors     : { *(.rela.ctors) }
51   .rel.dtors      : { *(.rel.dtors) }
52   .rela.dtors     : { *(.rela.dtors) }
53   .rel.got        : { *(.rel.got) }
54   .rela.got       : { *(.rela.got) }
55   .rel.bss        : { *(.rel.bss .rel.bss.* .rel.gnu.linkonce.b.*) }
56   .rela.bss       : { *(.rela.bss .rela.bss.* .rela.gnu.linkonce.b.*) }
57   .rel.plt        : { *(.rel.plt) }
58   .rela.plt       : { *(.rela.plt) }
59   .init           : {
60     KEEP (*(.init))
61   } =0x90909090
62   .plt            : { *(.plt) }
63   .text           : {
64     TEXT_TEXT
65     SCHED_TEXT
66     LOCK_TEXT
67     *(.fixup)
68     *(.stub .text.* .gnu.linkonce.t.*)
69     /* .gnu.warning sections are handled specially by elf32.em.  */
70     *(.gnu.warning)
71
72     . = ALIGN(PAGE_SIZE);
73   } =0x90909090
74   . = ALIGN(PAGE_SIZE);
75   .syscall_stub : {
76         __syscall_stub_start = .;
77         *(.__syscall_stub*)
78         __syscall_stub_end = .;
79   }
80   .fini           : {
81     KEEP (*(.fini))
82   } =0x90909090
83
84   .kstrtab : { *(.kstrtab) }
85
86   #include "asm/common.lds.S"
87
88   init.data : { INIT_DATA }
89
90   /* Ensure the __preinit_array_start label is properly aligned.  We
91      could instead move the label definition inside the section, but
92      the linker would then create the section even if it turns out to
93      be empty, which isn't pretty.  */
94   . = ALIGN(32 / 8);
95   .preinit_array     : { *(.preinit_array) }
96   .init_array     : { *(.init_array) }
97   .fini_array     : { *(.fini_array) }
98   .data           : {
99     . = ALIGN(KERNEL_STACK_SIZE);               /* init_task */
100     *(.data.init_task)
101     . = ALIGN(KERNEL_STACK_SIZE);
102     *(.data.init_irqstack)
103     DATA_DATA
104     *(.data.* .gnu.linkonce.d.*)
105     SORT(CONSTRUCTORS)
106   }
107   .data1          : { *(.data1) }
108   .tdata          : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
109   .tbss           : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
110   .eh_frame       : { KEEP (*(.eh_frame)) }
111   .gcc_except_table   : { *(.gcc_except_table) }
112   .dynamic        : { *(.dynamic) }
113   .ctors          : {
114     /* gcc uses crtbegin.o to find the start of
115        the constructors, so we make sure it is
116        first.  Because this is a wildcard, it
117        doesn't matter if the user does not
118        actually link against crtbegin.o; the
119        linker won't look for a file to match a
120        wildcard.  The wildcard also means that it
121        doesn't matter which directory crtbegin.o
122        is in.  */
123     KEEP (*crtbegin.o(.ctors))
124     /* We don't want to include the .ctor section from
125        from the crtend.o file until after the sorted ctors.
126        The .ctor section from the crtend file contains the
127        end of ctors marker and it must be last */
128     KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
129     KEEP (*(SORT(.ctors.*)))
130     KEEP (*(.ctors))
131   }
132   .dtors          : {
133     KEEP (*crtbegin.o(.dtors))
134     KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
135     KEEP (*(SORT(.dtors.*)))
136     KEEP (*(.dtors))
137   }
138   .jcr            : { KEEP (*(.jcr)) }
139   .got            : { *(.got.plt) *(.got) }
140   _edata = .;
141   PROVIDE (edata = .);
142   .bss            : {
143    __bss_start = .;
144    *(.dynbss)
145    *(.bss .bss.* .gnu.linkonce.b.*)
146    *(COMMON)
147    /* Align here to ensure that the .bss section occupies space up to
148       _end.  Align after .bss to ensure correct alignment even if the
149       .bss section disappears because there are no input sections.  */
150    . = ALIGN(32 / 8);
151   . = ALIGN(32 / 8);
152   }
153   _end = .;
154   PROVIDE (end = .);
155
156   STABS_DEBUG
157
158   DWARF_DEBUG
159
160   DISCARDS
161 }