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