Merge commit 'gcl/merge' into merge
[linux-2.6] / arch / sparc / kernel / vmlinux.lds.S
1 /* ld script for sparc32/sparc64 kernel */
2
3 #include <asm-generic/vmlinux.lds.h>
4
5 #include <asm/page.h>
6 #include <asm/thread_info.h>
7
8 #ifdef CONFIG_SPARC32
9 #define INITIAL_ADDRESS  0x10000 + SIZEOF_HEADERS
10 #define TEXTSTART       0xf0004000
11
12 #define SMP_CACHE_BYTES_SHIFT 5
13
14 #else
15 #define SMP_CACHE_BYTES_SHIFT 6
16 #define INITIAL_ADDRESS 0x4000
17 #define TEXTSTART      0x0000000000404000
18
19 #endif
20
21 #define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
22
23 #ifdef CONFIG_SPARC32
24 OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
25 OUTPUT_ARCH(sparc)
26 ENTRY(_start)
27 jiffies = jiffies_64 + 4;
28 #else
29 /* sparc64 */
30 OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
31 OUTPUT_ARCH(sparc:v9a)
32 ENTRY(_start)
33 jiffies = jiffies_64;
34 #endif
35
36 SECTIONS
37 {
38         /* swapper_low_pmd_dir is sparc64 only */
39         swapper_low_pmd_dir = 0x0000000000402000;
40         . = INITIAL_ADDRESS;
41         .text TEXTSTART :
42         {
43                 _text = .;
44                 *(.text.head)
45                 TEXT_TEXT
46                 SCHED_TEXT
47                 LOCK_TEXT
48                 KPROBES_TEXT
49                 *(.gnu.warning)
50         } = 0
51         _etext = .;
52
53         RO_DATA(PAGE_SIZE)
54         .data : {
55                 DATA_DATA
56                 CONSTRUCTORS
57         }
58         .data1 : {
59                 *(.data1)
60         }
61         . = ALIGN(SMP_CACHE_BYTES);
62         .data.cacheline_aligned : {
63                 *(.data.cacheline_aligned)
64         }
65         . = ALIGN(SMP_CACHE_BYTES);
66         .data.read_mostly : {
67                 *(.data.read_mostly)
68         }
69         /* End of data section */
70         _edata = .;
71
72         /* init_task */
73         . = ALIGN(THREAD_SIZE);
74         .data.init_task : {
75                 *(.data.init_task)
76         }
77         .fixup : {
78                 __start___fixup = .;
79                 *(.fixup)
80                 __stop___fixup = .;
81         }
82         . = ALIGN(16);
83         __ex_table : {
84                 __start___ex_table = .;
85                 *(__ex_table)
86                 __stop___ex_table = .;
87         }
88         NOTES
89
90         . = ALIGN(PAGE_SIZE);
91         .init.text : {
92                 __init_begin = .;
93                 _sinittext = .;
94                 INIT_TEXT
95                 _einittext = .;
96         }
97         __init_text_end = .;
98         .init.data : {
99                 INIT_DATA
100         }
101         . = ALIGN(16);
102         .init.setup : {
103                 __setup_start = .;
104                 *(.init.setup)
105                 __setup_end = .;
106         }
107         .initcall.init : {
108                 __initcall_start = .;
109                 INITCALLS
110                 __initcall_end = .;
111         }
112         .con_initcall.init : {
113                 __con_initcall_start = .;
114                 *(.con_initcall.init)
115                 __con_initcall_end = .;
116         }
117         SECURITY_INIT
118
119         . = ALIGN(4);
120         .tsb_ldquad_phys_patch : {
121                 __tsb_ldquad_phys_patch = .;
122                 *(.tsb_ldquad_phys_patch)
123                 __tsb_ldquad_phys_patch_end = .;
124         }
125
126         .tsb_phys_patch : {
127                 __tsb_phys_patch = .;
128                 *(.tsb_phys_patch)
129                 __tsb_phys_patch_end = .;
130         }
131
132         .cpuid_patch : {
133                 __cpuid_patch = .;
134                 *(.cpuid_patch)
135                 __cpuid_patch_end = .;
136         }
137
138         .sun4v_1insn_patch : {
139                 __sun4v_1insn_patch = .;
140                 *(.sun4v_1insn_patch)
141                 __sun4v_1insn_patch_end = .;
142         }
143         .sun4v_2insn_patch : {
144                 __sun4v_2insn_patch = .;
145                 *(.sun4v_2insn_patch)
146                 __sun4v_2insn_patch_end = .;
147         }
148
149 #ifdef CONFIG_BLK_DEV_INITRD
150         . = ALIGN(PAGE_SIZE);
151         .init.ramfs : {
152                 __initramfs_start = .;
153                 *(.init.ramfs)
154                 __initramfs_end = .;
155         }
156 #endif
157
158         PERCPU(PAGE_SIZE)
159
160         . = ALIGN(PAGE_SIZE);
161         __init_end = .;
162         __bss_start = .;
163         .sbss : {
164                 *(.sbss)
165                 *(.scommon)
166         }
167         .bss : {
168                 *(.dynbss)
169                 *(.bss)
170                 *(COMMON)
171         }
172         _end = . ;
173
174         /DISCARD/ : {
175                 EXIT_TEXT
176                 EXIT_DATA
177                 *(.exitcall.exit)
178         }
179
180         STABS_DEBUG
181         DWARF_DEBUG
182 }