[PATCH] uml: make time data per-cpu
[linux-2.6] / 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)
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     __syscall_stub_start = .;
75     *(.__syscall_stub*)
76     __syscall_stub_end = .;
77     . = ALIGN(4096);
78   } =0x90909090
79   .fini           : {
80     KEEP (*(.fini))
81   } =0x90909090
82
83   .kstrtab : { *(.kstrtab) }
84
85   #include "asm/common.lds.S"
86
87   init.data : { *(.init.data) }
88
89   /* Ensure the __preinit_array_start label is properly aligned.  We
90      could instead move the label definition inside the section, but
91      the linker would then create the section even if it turns out to
92      be empty, which isn't pretty.  */
93   . = ALIGN(32 / 8);
94   .preinit_array     : { *(.preinit_array) }
95   .init_array     : { *(.init_array) }
96   .fini_array     : { *(.fini_array) }
97   .data           : {
98     . = ALIGN(KERNEL_STACK_SIZE);               /* init_task */
99     *(.data.init_task)
100     *(.data .data.* .gnu.linkonce.d.*)
101     SORT(CONSTRUCTORS)
102   }
103   .data1          : { *(.data1) }
104   .tdata          : { *(.tdata .tdata.* .gnu.linkonce.td.*) }
105   .tbss           : { *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) }
106   .eh_frame       : { KEEP (*(.eh_frame)) }
107   .gcc_except_table   : { *(.gcc_except_table) }
108   .dynamic        : { *(.dynamic) }
109   .ctors          : {
110     /* gcc uses crtbegin.o to find the start of
111        the constructors, so we make sure it is
112        first.  Because this is a wildcard, it
113        doesn't matter if the user does not
114        actually link against crtbegin.o; the
115        linker won't look for a file to match a
116        wildcard.  The wildcard also means that it
117        doesn't matter which directory crtbegin.o
118        is in.  */
119     KEEP (*crtbegin.o(.ctors))
120     /* We don't want to include the .ctor section from
121        from the crtend.o file until after the sorted ctors.
122        The .ctor section from the crtend file contains the
123        end of ctors marker and it must be last */
124     KEEP (*(EXCLUDE_FILE (*crtend.o ) .ctors))
125     KEEP (*(SORT(.ctors.*)))
126     KEEP (*(.ctors))
127   }
128   .dtors          : {
129     KEEP (*crtbegin.o(.dtors))
130     KEEP (*(EXCLUDE_FILE (*crtend.o ) .dtors))
131     KEEP (*(SORT(.dtors.*)))
132     KEEP (*(.dtors))
133   }
134   .jcr            : { KEEP (*(.jcr)) }
135   .got            : { *(.got.plt) *(.got) }
136   _edata = .;
137   PROVIDE (edata = .);
138   __bss_start = .;
139   .bss            : {
140    *(.dynbss)
141    *(.bss .bss.* .gnu.linkonce.b.*)
142    *(COMMON)
143    /* Align here to ensure that the .bss section occupies space up to
144       _end.  Align after .bss to ensure correct alignment even if the
145       .bss section disappears because there are no input sections.  */
146    . = ALIGN(32 / 8);
147   . = ALIGN(32 / 8);
148   }
149   _end = .;
150   PROVIDE (end = .);
151
152   STABS_DEBUG
153
154   DWARF_DEBUG
155 }