Commit | Line | Data |
---|---|---|
dce97c8c PM |
1 | /* |
2 | * ld script to make SuperH Linux kernel | |
3 | * Written by Niibe Yutaka and Paul Mundt | |
4 | */ | |
5 | #ifdef CONFIG_SUPERH64 | |
6 | #define LOAD_OFFSET CONFIG_PAGE_OFFSET | |
7 | OUTPUT_ARCH(sh:sh5) | |
1da177e4 | 8 | #else |
7b022d07 | 9 | #define LOAD_OFFSET 0 |
dce97c8c | 10 | OUTPUT_ARCH(sh) |
dce97c8c PM |
11 | #endif |
12 | ||
13 | #include <asm/thread_info.h> | |
14 | #include <asm/cache.h> | |
15 | #include <asm-generic/vmlinux.lds.h> | |
16 | ||
17 | ENTRY(_start) | |
18 | SECTIONS | |
19 | { | |
20 | #ifdef CONFIG_PMB_FIXED | |
21 | . = CONFIG_PAGE_OFFSET + (CONFIG_MEMORY_START & 0x1fffffff) + | |
22 | CONFIG_ZERO_PAGE_OFFSET; | |
23 | #elif defined(CONFIG_32BIT) | |
24 | . = CONFIG_PAGE_OFFSET + CONFIG_ZERO_PAGE_OFFSET; | |
25 | #else | |
26 | . = CONFIG_PAGE_OFFSET + CONFIG_MEMORY_START + CONFIG_ZERO_PAGE_OFFSET; | |
27 | #endif | |
28 | ||
53c0054c MD |
29 | _text = .; /* Text and read-only data */ |
30 | ||
dce97c8c PM |
31 | .empty_zero_page : AT(ADDR(.empty_zero_page) - LOAD_OFFSET) { |
32 | *(.empty_zero_page) | |
33 | } = 0 | |
34 | ||
35 | .text : AT(ADDR(.text) - LOAD_OFFSET) { | |
dce97c8c PM |
36 | HEAD_TEXT |
37 | TEXT_TEXT | |
38 | ||
39 | #ifdef CONFIG_SUPERH64 | |
40 | *(.text64) | |
41 | *(.text..SHmedia32) | |
42 | #endif | |
43 | ||
44 | SCHED_TEXT | |
45 | LOCK_TEXT | |
46 | KPROBES_TEXT | |
47 | IRQENTRY_TEXT | |
48 | *(.fixup) | |
49 | *(.gnu.warning) | |
50 | _etext = .; /* End of text section */ | |
51 | } = 0x0009 | |
52 | ||
2802e345 | 53 | EXCEPTION_TABLE(16) |
dce97c8c PM |
54 | |
55 | NOTES | |
56 | RO_DATA(PAGE_SIZE) | |
57 | ||
58 | /* | |
59 | * Code which must be executed uncached and the associated data | |
60 | */ | |
61 | . = ALIGN(PAGE_SIZE); | |
62 | .uncached : AT(ADDR(.uncached) - LOAD_OFFSET) { | |
63 | __uncached_start = .; | |
64 | *(.uncached.text) | |
65 | *(.uncached.data) | |
66 | __uncached_end = .; | |
67 | } | |
68 | ||
2802e345 | 69 | RW_DATA_SECTION(L1_CACHE_BYTES, PAGE_SIZE, THREAD_SIZE) |
dce97c8c PM |
70 | |
71 | _edata = .; /* End of data section */ | |
72 | ||
73 | . = ALIGN(PAGE_SIZE); /* Init code and data */ | |
2802e345 TA |
74 | __init_begin = .; |
75 | INIT_TEXT_SECTION(PAGE_SIZE) | |
76 | INIT_DATA_SECTION(16) | |
dce97c8c PM |
77 | |
78 | . = ALIGN(4); | |
79 | .machvec.init : AT(ADDR(.machvec.init) - LOAD_OFFSET) { | |
80 | __machvec_start = .; | |
81 | *(.machvec.init) | |
82 | __machvec_end = .; | |
83 | } | |
84 | ||
85 | PERCPU(PAGE_SIZE) | |
86 | ||
87 | /* | |
88 | * .exit.text is discarded at runtime, not link time, to deal with | |
89 | * references from __bug_table | |
90 | */ | |
91 | .exit.text : AT(ADDR(.exit.text) - LOAD_OFFSET) { EXIT_TEXT } | |
92 | .exit.data : AT(ADDR(.exit.data) - LOAD_OFFSET) { EXIT_DATA } | |
93 | ||
94 | . = ALIGN(PAGE_SIZE); | |
2802e345 | 95 | __init_end = .; |
6bde607e | 96 | BSS_SECTION(0, PAGE_SIZE, 4) |
2802e345 TA |
97 | _ebss = .; /* uClinux MTD sucks */ |
98 | _end = . ; | |
dce97c8c PM |
99 | |
100 | /* | |
101 | * When something in the kernel is NOT compiled as a module, the | |
102 | * module cleanup code and data are put into these segments. Both | |
103 | * can then be thrown away, as cleanup code is never called unless | |
104 | * it's a module. | |
105 | */ | |
106 | /DISCARD/ : { | |
2802e345 | 107 | EXIT_CALL |
dce97c8c PM |
108 | } |
109 | ||
110 | STABS_DEBUG | |
111 | DWARF_DEBUG | |
112 | } |