diff options
author | Michal Simek <monstr@monstr.eu> | 2009-09-22 03:58:56 -0400 |
---|---|---|
committer | Michal Simek <monstr@monstr.eu> | 2009-09-22 04:10:35 -0400 |
commit | a061dd5258b2bad6c44c48d2a2d55f4fd5eb85d8 (patch) | |
tree | a06f92a01d4873d62b1f2eb79426ec06d1af1f40 /arch | |
parent | a1253977dff4a033d61a7a96608f5a0bbb36dbf6 (diff) |
microblaze: Use LOAD_OFFSET macro to get correct LMA for all sections
Currently, vmlinux has LMA==VMA for all sections, which is wrong for MMU
kernels. Previous patches in this series defined the LOAD_OFFSET constant,
now we make use of it in our link script.
Other minor changes in this patch:
* brace/indenting cleanup of some sections
* put __fdt_* symbols in their own section, and apply LOAD_OFFSET fixup
Signed-off-by: John Williams <john.williams@petalogix.com>
Signed-off-by: Michal Simek <monstr@monstr.eu>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/microblaze/kernel/vmlinux.lds.S | 34 |
1 files changed, 19 insertions, 15 deletions
diff --git a/arch/microblaze/kernel/vmlinux.lds.S b/arch/microblaze/kernel/vmlinux.lds.S index b76c17c9ae41..dbb98f830f3e 100644 --- a/arch/microblaze/kernel/vmlinux.lds.S +++ b/arch/microblaze/kernel/vmlinux.lds.S | |||
@@ -12,15 +12,15 @@ OUTPUT_FORMAT("elf32-microblaze", "elf32-microblaze", "elf32-microblaze") | |||
12 | OUTPUT_ARCH(microblaze) | 12 | OUTPUT_ARCH(microblaze) |
13 | ENTRY(_start) | 13 | ENTRY(_start) |
14 | 14 | ||
15 | #include <asm-generic/vmlinux.lds.h> | ||
16 | #include <asm/page.h> | 15 | #include <asm/page.h> |
16 | #include <asm-generic/vmlinux.lds.h> | ||
17 | #include <asm/thread_info.h> | 17 | #include <asm/thread_info.h> |
18 | 18 | ||
19 | jiffies = jiffies_64 + 4; | 19 | jiffies = jiffies_64 + 4; |
20 | 20 | ||
21 | SECTIONS { | 21 | SECTIONS { |
22 | . = CONFIG_KERNEL_START; | 22 | . = CONFIG_KERNEL_START; |
23 | .text : { | 23 | .text : AT(ADDR(.text) - LOAD_OFFSET) { |
24 | _text = . ; | 24 | _text = . ; |
25 | _stext = . ; | 25 | _stext = . ; |
26 | *(.text .text.*) | 26 | *(.text .text.*) |
@@ -35,9 +35,12 @@ SECTIONS { | |||
35 | } | 35 | } |
36 | 36 | ||
37 | . = ALIGN (4) ; | 37 | . = ALIGN (4) ; |
38 | _fdt_start = . ; /* place for fdt blob */ | 38 | __fdt_blob : AT(ADDR(__fdt_blob) - LOAD_OFFSET) { |
39 | . = . + 0x4000; | 39 | _fdt_start = . ; /* place for fdt blob */ |
40 | _fdt_end = . ; | 40 | *(__fdt_blob) ; /* Any link-placed DTB */ |
41 | . = _fdt_start + 0x4000; /* Pad up to 16kbyte */ | ||
42 | _fdt_end = . ; | ||
43 | } | ||
41 | 44 | ||
42 | . = ALIGN(16); | 45 | . = ALIGN(16); |
43 | RODATA | 46 | RODATA |
@@ -47,7 +50,7 @@ SECTIONS { | |||
47 | * sdata2 section can go anywhere, but must be word aligned | 50 | * sdata2 section can go anywhere, but must be word aligned |
48 | * and SDA2_BASE must point to the middle of it | 51 | * and SDA2_BASE must point to the middle of it |
49 | */ | 52 | */ |
50 | .sdata2 : { | 53 | .sdata2 : AT(ADDR(.sdata2) - LOAD_OFFSET) { |
51 | _ssrw = .; | 54 | _ssrw = .; |
52 | . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ | 55 | . = ALIGN(4096); /* page aligned when MMU used - origin 0x8 */ |
53 | *(.sdata2) | 56 | *(.sdata2) |
@@ -68,12 +71,12 @@ SECTIONS { | |||
68 | 71 | ||
69 | /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ | 72 | /* Under the microblaze ABI, .sdata and .sbss must be contiguous */ |
70 | . = ALIGN(8); | 73 | . = ALIGN(8); |
71 | .sdata : { | 74 | .sdata : AT(ADDR(.sdata) - LOAD_OFFSET) { |
72 | _ssro = .; | 75 | _ssro = .; |
73 | *(.sdata) | 76 | *(.sdata) |
74 | } | 77 | } |
75 | 78 | ||
76 | .sbss : { | 79 | .sbss : AT(ADDR(.sbss) - LOAD_OFFSET) { |
77 | _ssbss = .; | 80 | _ssbss = .; |
78 | *(.sbss) | 81 | *(.sbss) |
79 | _esbss = .; | 82 | _esbss = .; |
@@ -86,26 +89,26 @@ SECTIONS { | |||
86 | 89 | ||
87 | INIT_TEXT_SECTION(PAGE_SIZE) | 90 | INIT_TEXT_SECTION(PAGE_SIZE) |
88 | 91 | ||
89 | .init.data : { | 92 | .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) { |
90 | INIT_DATA | 93 | INIT_DATA |
91 | } | 94 | } |
92 | 95 | ||
93 | . = ALIGN(4); | 96 | . = ALIGN(4); |
94 | .init.ivt : { | 97 | .init.ivt : AT(ADDR(.init.ivt) - LOAD_OFFSET) { |
95 | __ivt_start = .; | 98 | __ivt_start = .; |
96 | *(.init.ivt) | 99 | *(.init.ivt) |
97 | __ivt_end = .; | 100 | __ivt_end = .; |
98 | } | 101 | } |
99 | 102 | ||
100 | .init.setup : { | 103 | .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) { |
101 | INIT_SETUP(0) | 104 | INIT_SETUP(0) |
102 | } | 105 | } |
103 | 106 | ||
104 | .initcall.init : { | 107 | .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET ) { |
105 | INIT_CALLS | 108 | INIT_CALLS |
106 | } | 109 | } |
107 | 110 | ||
108 | .con_initcall.init : { | 111 | .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) { |
109 | CON_INITCALL | 112 | CON_INITCALL |
110 | } | 113 | } |
111 | 114 | ||
@@ -113,7 +116,7 @@ SECTIONS { | |||
113 | 116 | ||
114 | __init_end_before_initramfs = .; | 117 | __init_end_before_initramfs = .; |
115 | 118 | ||
116 | .init.ramfs ALIGN(4096) : { | 119 | .init.ramfs ALIGN(4096) : AT(ADDR(.init.ramfs) - LOAD_OFFSET) { |
117 | __initramfs_start = .; | 120 | __initramfs_start = .; |
118 | *(.init.ramfs) | 121 | *(.init.ramfs) |
119 | __initramfs_end = .; | 122 | __initramfs_end = .; |
@@ -129,7 +132,8 @@ SECTIONS { | |||
129 | } | 132 | } |
130 | __init_end = .; | 133 | __init_end = .; |
131 | 134 | ||
132 | .bss ALIGN (4096) : { /* page aligned when MMU used */ | 135 | .bss ALIGN (4096) : AT(ADDR(.bss) - LOAD_OFFSET) { |
136 | /* page aligned when MMU used */ | ||
133 | __bss_start = . ; | 137 | __bss_start = . ; |
134 | *(.bss*) | 138 | *(.bss*) |
135 | *(COMMON) | 139 | *(COMMON) |