blob: 4bfbeffb73208545989429ea020903dd918ab864 [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 Ravnborgbcbe40e2007-09-17 19:02:30 -07004#include <asm/page.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -07005
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -08006#ifdef CONFIG_SPARC32
7#define INITIAL_ADDRESS 0x10000 + SIZEOF_HEADERS
8#define TEXTSTART 0xf0004000
9
10#define SMP_CACHE_BYTES_SHIFT 5
11
12#else
13#define SMP_CACHE_BYTES_SHIFT 6
14#define INITIAL_ADDRESS 0x4000
15#define TEXTSTART 0x0000000000404000
16
17#endif
18
19#define SMP_CACHE_BYTES (1 << SMP_CACHE_BYTES_SHIFT)
20
21#ifdef CONFIG_SPARC32
Linus Torvalds1da177e2005-04-16 15:20:36 -070022OUTPUT_FORMAT("elf32-sparc", "elf32-sparc", "elf32-sparc")
23OUTPUT_ARCH(sparc)
24ENTRY(_start)
25jiffies = jiffies_64 + 4;
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080026#else
27/* sparc64 */
28OUTPUT_FORMAT("elf64-sparc", "elf64-sparc", "elf64-sparc")
29OUTPUT_ARCH(sparc:v9a)
30ENTRY(_start)
31jiffies = jiffies_64;
32#endif
33
Linus Torvalds1da177e2005-04-16 15:20:36 -070034SECTIONS
35{
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080036 /* swapper_low_pmd_dir is sparc64 only */
37 swapper_low_pmd_dir = 0x0000000000402000;
38 . = INITIAL_ADDRESS;
39 .text TEXTSTART :
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070040 {
41 _text = .;
Al Viro5bac2872008-11-22 17:36:04 +000042 *(.text.head)
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070043 TEXT_TEXT
44 SCHED_TEXT
45 LOCK_TEXT
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080046 KPROBES_TEXT
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070047 *(.gnu.warning)
48 } = 0
49 _etext = .;
50 PROVIDE (etext = .);
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080051
52 RO_DATA(PAGE_SIZE)
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070053 .data : {
54 DATA_DATA
55 CONSTRUCTORS
56 }
57 .data1 : {
58 *(.data1)
59 }
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080060 . = ALIGN(SMP_CACHE_BYTES);
61 .data.cacheline_aligned : {
62 *(.data.cacheline_aligned)
63 }
64 . = ALIGN(SMP_CACHE_BYTES);
65 .data.read_mostly : {
66 *(.data.read_mostly)
67 }
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070068 _edata = .;
69 PROVIDE (edata = .);
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070070 .fixup : {
71 __start___fixup = .;
72 *(.fixup)
73 __stop___fixup = .;
74 }
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080075 . = ALIGN(16);
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070076 __ex_table : {
77 __start___ex_table = .;
78 *(__ex_table)
79 __stop___ex_table = .;
80 }
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070081 NOTES
82
83 . = ALIGN(PAGE_SIZE);
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070084 .init.text : {
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -080085 __init_begin = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070086 _sinittext = .;
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010087 INIT_TEXT
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070088 _einittext = .;
89 }
90 __init_text_end = .;
91 .init.data : {
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +010092 INIT_DATA
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -070093 }
94 . = ALIGN(16);
95 .init.setup : {
96 __setup_start = .;
97 *(.init.setup)
98 __setup_end = .;
99 }
100 .initcall.init : {
101 __initcall_start = .;
102 INITCALLS
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800103 __initcall_end = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700104 }
105 .con_initcall.init : {
106 __con_initcall_start = .;
107 *(.con_initcall.init)
108 __con_initcall_end = .;
109 }
110 SECURITY_INIT
Jean-Paul Saman67d38222007-02-10 01:44:44 -0800111
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800112 . = ALIGN(4);
113 .tsb_ldquad_phys_patch : {
114 __tsb_ldquad_phys_patch = .;
115 *(.tsb_ldquad_phys_patch)
116 __tsb_ldquad_phys_patch_end = .;
117 }
118
119 .tsb_phys_patch : {
120 __tsb_phys_patch = .;
121 *(.tsb_phys_patch)
122 __tsb_phys_patch_end = .;
123 }
124
125 .cpuid_patch : {
126 __cpuid_patch = .;
127 *(.cpuid_patch)
128 __cpuid_patch_end = .;
129 }
130
131 .sun4v_1insn_patch : {
132 __sun4v_1insn_patch = .;
133 *(.sun4v_1insn_patch)
134 __sun4v_1insn_patch_end = .;
135 }
136 .sun4v_2insn_patch : {
137 __sun4v_2insn_patch = .;
138 *(.sun4v_2insn_patch)
139 __sun4v_2insn_patch_end = .;
140 }
141
Jean-Paul Saman67d38222007-02-10 01:44:44 -0800142#ifdef CONFIG_BLK_DEV_INITRD
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700143 . = ALIGN(PAGE_SIZE);
144 .init.ramfs : {
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800145 __initramfs_start = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700146 *(.init.ramfs)
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800147 __initramfs_end = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700148 }
Jean-Paul Saman67d38222007-02-10 01:44:44 -0800149#endif
150
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700151 PERCPU(PAGE_SIZE)
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800152
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700153 . = ALIGN(PAGE_SIZE);
154 __init_end = .;
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700155 __bss_start = .;
156 .sbss : {
157 *(.sbss)
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800158 *(.scommon)
159 }
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700160 .bss : {
161 *(.dynbss)
162 *(.bss)
163 *(COMMON)
164 }
165 _end = . ;
166 PROVIDE (end = .);
Sam Ravnborg1b1fbbc2008-11-29 21:44:32 -0800167
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700168 /DISCARD/ : {
Sam Ravnborg01ba2bd2008-01-20 14:15:03 +0100169 EXIT_TEXT
170 EXIT_DATA
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700171 *(.exitcall.exit)
172 }
David S. Millerd5784b52005-12-28 13:22:54 -0800173
Sam Ravnborgbcbe40e2007-09-17 19:02:30 -0700174 STABS_DEBUG
175 DWARF_DEBUG
Linus Torvalds1da177e2005-04-16 15:20:36 -0700176}