diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/blackfin/kernel/init_task.c | 2 | ||||
-rw-r--r-- | arch/blackfin/kernel/setup.c | 8 | ||||
-rw-r--r-- | arch/blackfin/kernel/vmlinux.lds.S | 47 |
3 files changed, 33 insertions, 24 deletions
diff --git a/arch/blackfin/kernel/init_task.c b/arch/blackfin/kernel/init_task.c index 673c860ffc23..c640154030e2 100644 --- a/arch/blackfin/kernel/init_task.c +++ b/arch/blackfin/kernel/init_task.c | |||
@@ -57,5 +57,5 @@ EXPORT_SYMBOL(init_task); | |||
57 | * "init_task" linker map entry. | 57 | * "init_task" linker map entry. |
58 | */ | 58 | */ |
59 | union thread_union init_thread_union | 59 | union thread_union init_thread_union |
60 | __attribute__ ((__section__(".data.init_task"))) = { | 60 | __attribute__ ((__section__(".init_task.data"))) = { |
61 | INIT_THREAD_INFO(init_task)}; | 61 | INIT_THREAD_INFO(init_task)}; |
diff --git a/arch/blackfin/kernel/setup.c b/arch/blackfin/kernel/setup.c index 934234f43839..dfe06b09a9d4 100644 --- a/arch/blackfin/kernel/setup.c +++ b/arch/blackfin/kernel/setup.c | |||
@@ -236,7 +236,7 @@ void __init setup_arch(char **cmdline_p) | |||
236 | /* by now the stack is part of the init task */ | 236 | /* by now the stack is part of the init task */ |
237 | memory_end = _ramend - DMA_UNCACHED_REGION; | 237 | memory_end = _ramend - DMA_UNCACHED_REGION; |
238 | 238 | ||
239 | _ramstart = (unsigned long)__bss_stop; | 239 | _ramstart = (unsigned long)_end; |
240 | memory_start = PAGE_ALIGN(_ramstart); | 240 | memory_start = PAGE_ALIGN(_ramstart); |
241 | 241 | ||
242 | #if defined(CONFIG_MTD_UCLINUX) | 242 | #if defined(CONFIG_MTD_UCLINUX) |
@@ -285,7 +285,7 @@ void __init setup_arch(char **cmdline_p) | |||
285 | } | 285 | } |
286 | 286 | ||
287 | /* Relocate MTD image to the top of memory after the uncached memory area */ | 287 | /* Relocate MTD image to the top of memory after the uncached memory area */ |
288 | dma_memcpy((char *)memory_end, __bss_stop, mtd_size); | 288 | dma_memcpy((char *)memory_end, _end, mtd_size); |
289 | 289 | ||
290 | memory_mtd_start = memory_end; | 290 | memory_mtd_start = memory_end; |
291 | _ebss = memory_mtd_start; /* define _ebss for compatible */ | 291 | _ebss = memory_mtd_start; /* define _ebss for compatible */ |
@@ -357,10 +357,10 @@ void __init setup_arch(char **cmdline_p) | |||
357 | printk(KERN_INFO "Memory map:\n" | 357 | printk(KERN_INFO "Memory map:\n" |
358 | KERN_INFO " text = 0x%p-0x%p\n" | 358 | KERN_INFO " text = 0x%p-0x%p\n" |
359 | KERN_INFO " rodata = 0x%p-0x%p\n" | 359 | KERN_INFO " rodata = 0x%p-0x%p\n" |
360 | KERN_INFO " bss = 0x%p-0x%p\n" | ||
360 | KERN_INFO " data = 0x%p-0x%p\n" | 361 | KERN_INFO " data = 0x%p-0x%p\n" |
361 | KERN_INFO " stack = 0x%p-0x%p\n" | 362 | KERN_INFO " stack = 0x%p-0x%p\n" |
362 | KERN_INFO " init = 0x%p-0x%p\n" | 363 | KERN_INFO " init = 0x%p-0x%p\n" |
363 | KERN_INFO " bss = 0x%p-0x%p\n" | ||
364 | KERN_INFO " available = 0x%p-0x%p\n" | 364 | KERN_INFO " available = 0x%p-0x%p\n" |
365 | #ifdef CONFIG_MTD_UCLINUX | 365 | #ifdef CONFIG_MTD_UCLINUX |
366 | KERN_INFO " rootfs = 0x%p-0x%p\n" | 366 | KERN_INFO " rootfs = 0x%p-0x%p\n" |
@@ -370,10 +370,10 @@ void __init setup_arch(char **cmdline_p) | |||
370 | #endif | 370 | #endif |
371 | , _stext, _etext, | 371 | , _stext, _etext, |
372 | __start_rodata, __end_rodata, | 372 | __start_rodata, __end_rodata, |
373 | __bss_start, __bss_stop, | ||
373 | _sdata, _edata, | 374 | _sdata, _edata, |
374 | (void *)&init_thread_union, (void *)((int)(&init_thread_union) + 0x2000), | 375 | (void *)&init_thread_union, (void *)((int)(&init_thread_union) + 0x2000), |
375 | __init_begin, __init_end, | 376 | __init_begin, __init_end, |
376 | __bss_start, __bss_stop, | ||
377 | (void *)_ramstart, (void *)memory_end | 377 | (void *)_ramstart, (void *)memory_end |
378 | #ifdef CONFIG_MTD_UCLINUX | 378 | #ifdef CONFIG_MTD_UCLINUX |
379 | , (void *)memory_mtd_start, (void *)(memory_mtd_start + mtd_size) | 379 | , (void *)memory_mtd_start, (void *)(memory_mtd_start + mtd_size) |
diff --git a/arch/blackfin/kernel/vmlinux.lds.S b/arch/blackfin/kernel/vmlinux.lds.S index 9b75bc83c71f..5bdc0f79bb1a 100644 --- a/arch/blackfin/kernel/vmlinux.lds.S +++ b/arch/blackfin/kernel/vmlinux.lds.S | |||
@@ -41,6 +41,9 @@ _jiffies = _jiffies_64; | |||
41 | SECTIONS | 41 | SECTIONS |
42 | { | 42 | { |
43 | . = CONFIG_BOOT_LOAD; | 43 | . = CONFIG_BOOT_LOAD; |
44 | /* Neither the text, ro_data or bss section need to be aligned | ||
45 | * So pack them back to back | ||
46 | */ | ||
44 | .text : | 47 | .text : |
45 | { | 48 | { |
46 | __text = .; | 49 | __text = .; |
@@ -58,22 +61,25 @@ SECTIONS | |||
58 | *(__ex_table) | 61 | *(__ex_table) |
59 | ___stop___ex_table = .; | 62 | ___stop___ex_table = .; |
60 | 63 | ||
61 | . = ALIGN(4); | ||
62 | __etext = .; | 64 | __etext = .; |
63 | } | 65 | } |
64 | 66 | ||
65 | RO_DATA(PAGE_SIZE) | 67 | /* Just in case the first read only is a 32-bit access */ |
68 | RO_DATA(4) | ||
69 | |||
70 | .bss : | ||
71 | { | ||
72 | . = ALIGN(4); | ||
73 | ___bss_start = .; | ||
74 | *(.bss .bss.*) | ||
75 | *(COMMON) | ||
76 | ___bss_stop = .; | ||
77 | } | ||
66 | 78 | ||
67 | .data : | 79 | .data : |
68 | { | 80 | { |
69 | /* make sure the init_task is aligned to the | ||
70 | * kernel thread size so we can locate the kernel | ||
71 | * stack properly and quickly. | ||
72 | */ | ||
73 | __sdata = .; | 81 | __sdata = .; |
74 | . = ALIGN(THREAD_SIZE); | 82 | /* This gets done first, so the glob doesn't suck it in */ |
75 | *(.data.init_task) | ||
76 | |||
77 | . = ALIGN(32); | 83 | . = ALIGN(32); |
78 | *(.data.cacheline_aligned) | 84 | *(.data.cacheline_aligned) |
79 | 85 | ||
@@ -81,10 +87,22 @@ SECTIONS | |||
81 | *(.data.*) | 87 | *(.data.*) |
82 | CONSTRUCTORS | 88 | CONSTRUCTORS |
83 | 89 | ||
90 | /* make sure the init_task is aligned to the | ||
91 | * kernel thread size so we can locate the kernel | ||
92 | * stack properly and quickly. | ||
93 | */ | ||
84 | . = ALIGN(THREAD_SIZE); | 94 | . = ALIGN(THREAD_SIZE); |
95 | *(.init_task.data) | ||
96 | |||
85 | __edata = .; | 97 | __edata = .; |
86 | } | 98 | } |
87 | 99 | ||
100 | /* The init section should be last, so when we free it, it goes into | ||
101 | * the general memory pool, and (hopefully) will decrease fragmentation | ||
102 | * a tiny bit. The init section has a _requirement_ that it be | ||
103 | * PAGE_SIZE aligned | ||
104 | */ | ||
105 | . = ALIGN(PAGE_SIZE); | ||
88 | ___init_begin = .; | 106 | ___init_begin = .; |
89 | 107 | ||
90 | .init.text : | 108 | .init.text : |
@@ -179,16 +197,7 @@ SECTIONS | |||
179 | . = ALIGN(PAGE_SIZE); | 197 | . = ALIGN(PAGE_SIZE); |
180 | ___init_end = .; | 198 | ___init_end = .; |
181 | 199 | ||
182 | .bss : | 200 | __end =.; |
183 | { | ||
184 | . = ALIGN(4); | ||
185 | ___bss_start = .; | ||
186 | *(.bss .bss.*) | ||
187 | *(COMMON) | ||
188 | . = ALIGN(4); | ||
189 | ___bss_stop = .; | ||
190 | __end = .; | ||
191 | } | ||
192 | 201 | ||
193 | STABS_DEBUG | 202 | STABS_DEBUG |
194 | 203 | ||