aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/coldfire/patches/049-mcfv4e_linker_bss_cleanup.patch
blob: 06a68aa58438d5970c86eaa046a9c6e0646144b3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
From 4e16f08c800d57b986217e0d39d4a06b5bdf641d Mon Sep 17 00:00:00 2001
From: Kurt Mahan <kmahan@freescale.com>
Date: Wed, 19 Mar 2008 17:37:44 -0600
Subject: [PATCH] Move BSS section in linker script and zero it on boot.

To work with the latest round of toolchains the bss section
in the linker script needed to be moved to the end (due to
the linker thinking there were overlapping sections).

The BSS section needs to be manually zeroed.

LTIBName: mcfv4e-linker-bss-cleanup
Signed-off-by: Kurt Mahan <kmahan@freescale.com>
---
 arch/m68k/coldfire/head.S         |   11 +++++++++++
 arch/m68k/coldfire/vmlinux-cf.lds |   11 ++++++++---
 2 files changed, 19 insertions(+), 3 deletions(-)

--- a/arch/m68k/coldfire/head.S
+++ b/arch/m68k/coldfire/head.S
@@ -321,6 +321,17 @@ ENTRY(__start)
 	movec   %d0, %acr3
 	nop
 
+#ifdef CONFIG_COLDFIRE
+/* zero bss */
+	lea	_sbss,%a0
+	lea	_ebss,%a1
+	clrl	%d0
+_loop_bss:
+	movel	%d0,(%a0)+
+	cmpl	%a0,%a1
+	bne	_loop_bss
+#endif
+
 	/* If you change the memory size to another value make a matching 
 	   change in paging_init(cf-mmu.c) to zones_size[]. */
 
--- a/arch/m68k/coldfire/vmlinux-cf.lds
+++ b/arch/m68k/coldfire/vmlinux-cf.lds
@@ -51,9 +51,6 @@ SECTIONS
 	CONSTRUCTORS
   } :data
 
-  .bss : AT(ADDR(.bss) - LOAD_OFFSET) {		/* BSS */
-	*(.bss)
-  }
 
   . = ALIGN(16);
   .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET ) {
@@ -62,6 +59,8 @@ SECTIONS
 
   _edata = .;			/* End of data section */
 
+  NOTES				/* support ld --build-id */
+
   . = ALIGN(8192);		/* Initrd */
   .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
   	__init_begin = .;
@@ -111,6 +110,12 @@ SECTIONS
 	*(.data.init_task)	/* The initial task and kernel stack */
   }
 
+  _sbss = .;
+  .bss : AT(ADDR(.bss) - LOAD_OFFSET) {		/* BSS */
+	*(.bss)
+  }
+  _ebss = .;
+
   _end = . ;
 
   /* Sections to be discarded */