blob: 59c8d090920c8befa49339cdfcc654d561c6e564 [file] [log] [blame]
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -08001/* ld script for sparc32/sparc64 kernel */
Linus Torvalds1da177e2005-04-16 15:20:36 -07002
3#include <asm-generic/vmlinux.lds.h>
Sam Ravnborgb74e34d2008-12-27 00:34:41 -08004
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -07005#include <asm/page.h>
Sam Ravnborgb74e34d2008-12-27 00:34:41 -08006#include <asm/thread_info.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07007
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -08008#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
Linus Torvalds1da177e2005-04-16 15:20:36 -070024OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
25OUTPUT_ARCH(sparc)
26ENTRY(_start)
27jiffies = jiffies_64 + 4;
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080028#else
29/* sparc64 */
30OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
31OUTPUT_ARCH(sparc:v9a)
32ENTRY(_start)
33jiffies = jiffies_64;
34#endif
35
Linus Torvalds1da177e2005-04-16 15:20:36 -070036SECTIONS
37{
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080038 /* swapper_low_pmd_dir is sparc64 only */
39 swapper_low_pmd_dir = 0x0000000000402000;
40 . = INITIAL_ADDRESS;
41 .text TEXTSTART :
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070042 {
43 _text = .;
Al Viro5bac2872008-11-22 17:36:04 +000044 *(.text.head)
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070045 TEXT_TEXT
46 SCHED_TEXT
47 LOCK_TEXT
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080048 KPROBES_TEXT
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070049 *(.gnu.warning)
50 } = 0
51 _etext = .;
52 PROVIDE (etext = .);
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080053
54 RO_DATA(PAGE_SIZE)
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070055 .data : {
56 DATA_DATA
57 CONSTRUCTORS
58 }
59 .data1 : {
60 *(.data1)
61 }
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080062 . = ALIGN(SMP_CACHE_BYTES);
63 .data.cacheline_aligned : {
64 *(.data.cacheline_aligned)
65 }
66 . = ALIGN(SMP_CACHE_BYTES);
67 .data.read_mostly : {
68 *(.data.read_mostly)
69 }
Sam Ravnborgb74e34d2008-12-27 00:34:41 -080070 /* End of data section */
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070071 _edata = .;
72 PROVIDE (edata = .);
Sam Ravnborgb74e34d2008-12-27 00:34:41 -080073
74 /* init_task */
75 . = ALIGN(THREAD_SIZE);
76 .data.init_task : {
77 *(.data.init_task)
78 }
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070079 .fixup : {
80 __start___fixup = .;
81 *(.fixup)
82 __stop___fixup = .;
83 }
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080084 . = ALIGN(16);
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070085 __ex_table : {
86 __start___ex_table = .;
87 *(__ex_table)
88 __stop___ex_table = .;
89 }
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070090 NOTES
91
92 . = ALIGN(PAGE_SIZE);
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070093 .init.text : {
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080094 __init_begin = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070095 _sinittext = .;
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010096 INIT_TEXT
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070097 _einittext = .;
98 }
99 __init_text_end = .;
100 .init.data : {
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +0100101 INIT_DATA
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700102 }
103 . = ALIGN(16);
104 .init.setup : {
105 __setup_start = .;
106 *(.init.setup)
107 __setup_end = .;
108 }
109 .initcall.init : {
110 __initcall_start = .;
111 INITCALLS
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800112 __initcall_end = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700113 }
114 .con_initcall.init : {
115 __con_initcall_start = .;
116 *(.con_initcall.init)
117 __con_initcall_end = .;
118 }
119 SECURITY_INIT
Jean-Paul Saman67d38222007-02-10 01:44:44 -0800120
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800121 . = ALIGN(4);
122 .tsb_ldquad_phys_patch : {
123 __tsb_ldquad_phys_patch = .;
124 *(.tsb_ldquad_phys_patch)
125 __tsb_ldquad_phys_patch_end = .;
126 }
127
128 .tsb_phys_patch : {
129 __tsb_phys_patch = .;
130 *(.tsb_phys_patch)
131 __tsb_phys_patch_end = .;
132 }
133
134 .cpuid_patch : {
135 __cpuid_patch = .;
136 *(.cpuid_patch)
137 __cpuid_patch_end = .;
138 }
139
140 .sun4v_1insn_patch : {
141 __sun4v_1insn_patch = .;
142 *(.sun4v_1insn_patch)
143 __sun4v_1insn_patch_end = .;
144 }
145 .sun4v_2insn_patch : {
146 __sun4v_2insn_patch = .;
147 *(.sun4v_2insn_patch)
148 __sun4v_2insn_patch_end = .;
149 }
150
Jean-Paul Saman67d38222007-02-10 01:44:44 -0800151#ifdef CONFIG_BLK_DEV_INITRD
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700152 . = ALIGN(PAGE_SIZE);
153 .init.ramfs : {
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800154 __initramfs_start = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700155 *(.init.ramfs)
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800156 __initramfs_end = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700157 }
Jean-Paul Saman67d38222007-02-10 01:44:44 -0800158#endif
159
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700160 PERCPU(PAGE_SIZE)
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800161
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700162 . = ALIGN(PAGE_SIZE);
163 __init_end = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700164 __bss_start = .;
165 .sbss : {
166 *(.sbss)
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800167 *(.scommon)
168 }
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700169 .bss : {
170 *(.dynbss)
171 *(.bss)
172 *(COMMON)
173 }
174 _end = . ;
175 PROVIDE (end = .);
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800176
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700177 /DISCARD/ : {
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +0100178 EXIT_TEXT
179 EXIT_DATA
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700180 *(.exitcall.exit)
181 }
David S. Millerd5784b52005-12-28 13:22:54 -0800182
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700183 STABS_DEBUG
184 DWARF_DEBUG
Linus Torvalds1da177e2005-04-16 15:20:36 -0700185}