aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/blackfin/kernel/init_task.c2
-rw-r--r--arch/blackfin/kernel/setup.c8
-rw-r--r--arch/blackfin/kernel/vmlinux.lds.S47
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 */
59union thread_union init_thread_union 59union thread_union init_thread_union
60 __attribute__ ((__section__(".data.init_task"))) = { 60 __attribute__ ((__section__(".init_task.data"))) = {
61INIT_THREAD_INFO(init_task)}; 61INIT_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;
41SECTIONS 41SECTIONS
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