Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jmorris...
[linux-2.6] / arch / s390 / kernel / vmlinux.lds.S
1 /* ld script to make s390 Linux kernel
2  * Written by Martin Schwidefsky (schwidefsky@de.ibm.com)
3  */
4
5 #include <asm/page.h>
6 #include <asm-generic/vmlinux.lds.h>
7
8 #ifndef CONFIG_64BIT
9 OUTPUT_FORMAT("elf32-s390", "elf32-s390", "elf32-s390")
10 OUTPUT_ARCH(s390)
11 ENTRY(_start)
12 jiffies = jiffies_64 + 4;
13 #else
14 OUTPUT_FORMAT("elf64-s390", "elf64-s390", "elf64-s390")
15 OUTPUT_ARCH(s390:64-bit)
16 ENTRY(_start)
17 jiffies = jiffies_64;
18 #endif
19
20 SECTIONS
21 {
22         . = 0x00000000;
23         .text : {
24         _text = .;              /* Text and read-only data */
25                 *(.text.head)
26         TEXT_TEXT
27                 SCHED_TEXT
28                 LOCK_TEXT
29                 KPROBES_TEXT
30                 *(.fixup)
31                 *(.gnu.warning)
32         } = 0x0700
33
34         _etext = .;             /* End of text section */
35
36         RODATA
37
38 #ifdef CONFIG_SHARED_KERNEL
39         . = ALIGN(0x100000);    /* VM shared segments are 1MB aligned */
40 #endif
41
42         . = ALIGN(PAGE_SIZE);
43         _eshared = .;           /* End of shareable data */
44
45         . = ALIGN(16);          /* Exception table */
46         __ex_table : {
47                 __start___ex_table = .;
48                 *(__ex_table)
49                 __stop___ex_table = .;
50         }
51
52         NOTES
53         BUG_TABLE
54
55         .data : {               /* Data */
56                 DATA_DATA
57                 CONSTRUCTORS
58         }
59
60         . = ALIGN(PAGE_SIZE);
61         .data_nosave : {
62         __nosave_begin = .;
63                 *(.data.nosave)
64         }
65         . = ALIGN(PAGE_SIZE);
66         __nosave_end = .;
67
68         . = ALIGN(PAGE_SIZE);
69         .data.page_aligned : {
70                 *(.data.idt)
71         }
72
73         . = ALIGN(0x100);
74         .data.cacheline_aligned : {
75                 *(.data.cacheline_aligned)
76         }
77
78         . = ALIGN(0x100);
79         .data.read_mostly : {
80                 *(.data.read_mostly)
81         }
82         _edata = .;             /* End of data section */
83
84         . = ALIGN(2 * PAGE_SIZE);       /* init_task */
85         .data.init_task : {
86                 *(.data.init_task)
87         }
88
89         /* will be freed after init */
90         . = ALIGN(PAGE_SIZE);   /* Init code and data */
91         __init_begin = .;
92         .init.text : {
93                 _sinittext = .;
94                 *(.init.text)
95                 _einittext = .;
96         }
97         /*
98          * .exit.text is discarded at runtime, not link time,
99          * to deal with references from __bug_table
100         */
101         .exit.text : {
102                 *(.exit.text)
103         }
104
105         .init.data : {
106                 *(.init.data)
107         }
108         . = ALIGN(0x100);
109         .init.setup : {
110                 __setup_start = .;
111                 *(.init.setup)
112                 __setup_end = .;
113         }
114         .initcall.init : {
115                 __initcall_start = .;
116                 INITCALLS
117                 __initcall_end = .;
118         }
119
120         .con_initcall.init : {
121                 __con_initcall_start = .;
122                 *(.con_initcall.init)
123                 __con_initcall_end = .;
124         }
125         SECURITY_INIT
126
127 #ifdef CONFIG_BLK_DEV_INITRD
128         . = ALIGN(0x100);
129         .init.ramfs : {
130                 __initramfs_start = .;
131                 *(.init.ramfs)
132                 . = ALIGN(2);
133                 __initramfs_end = .;
134         }
135 #endif
136
137         PERCPU(PAGE_SIZE)
138         . = ALIGN(PAGE_SIZE);
139         __init_end = .;         /* freed after init ends here */
140
141         /* BSS */
142         .bss : {
143                 __bss_start = .;
144                 *(.bss)
145                 . = ALIGN(2);
146                 __bss_stop = .;
147         }
148
149         _end = . ;
150
151         /* Sections to be discarded */
152         /DISCARD/ : {
153                 *(.exit.data)
154                 *(.exitcall.exit)
155         }
156
157         /* Debugging sections.  */
158         STABS_DEBUG
159         DWARF_DEBUG
160 }