2.6.31 support (WiP)
[lede.git] / target / linux / coldfire / patches / 018-mcfv4e_linker_script_update.patch
1 From 3aa2c28ff4271e9232b6c98ba000804de3ed3f33 Mon Sep 17 00:00:00 2001
2 From: Kurt Mahan <kmahan@freescale.com>
3 Date: Mon, 26 Nov 2007 23:41:23 -0700
4 Subject: [PATCH] Rewrite coldfire linker script.
5
6 LTIBName: mcfv4e-linker-script-update
7 Signed-off-by: Kurt Mahan <kmahan@freescale.com>
8 ---
9  arch/m68k/coldfire/vmlinux-cf.lds |  107 ++++++++++++++++++++++++-------------
10  arch/m68k/kernel/vmlinux.lds.S    |    3 +-
11  2 files changed, 72 insertions(+), 38 deletions(-)
12
13 --- a/arch/m68k/coldfire/vmlinux-cf.lds
14 +++ b/arch/m68k/coldfire/vmlinux-cf.lds
15 @@ -1,76 +1,115 @@
16 -/* ld script to make m68k Coldfire Linux kernel */
17 +/* ld script to make m68k Coldfire Linux kernel
18 + *
19 + * Derived from arch/m68k/kernel/vmlinux-std.lds
20 + *
21 + * Updated 11/26/2007 for new CodeSourcery toolset
22 + *     by Kurt Mahan <kmahan@freescale.com>
23 + */
24 +
25 +#define        LOAD_OFFSET     0x00000000
26  
27  #include <asm-generic/vmlinux.lds.h>
28 +#include <asm/page_offset.h>
29 +
30 +#define        START_OFFSET    0x00020000
31 +#define        IMAGE_START     PAGE_OFFSET_RAW + START_OFFSET
32  
33  OUTPUT_FORMAT("elf32-m68k", "elf32-m68k", "elf32-m68k")
34  OUTPUT_ARCH(m68k)
35  ENTRY(_stext)
36  jiffies = jiffies_64 + 4;
37 +
38  SECTIONS
39  {
40 -  . = 0xC0020000;
41 -  _text = .;                   /* Text and read-only data */
42 -  .text : {
43 +  . = IMAGE_START;
44 +  .text.head : AT(ADDR(.text.head) - LOAD_OFFSET) {
45 +       _text = .;                      /* Text and read-only data */
46         *(.text.head)
47 +  } :text = 0x4e75
48 +
49 +  .text : AT(ADDR(.text) - LOAD_OFFSET) {
50         TEXT_TEXT
51         SCHED_TEXT
52         LOCK_TEXT
53         *(.fixup)
54         *(.gnu.warning)
55 -       } :text = 0x4e75
56 -
57 +  } :text = 0x4e75
58    _etext = .;                  /* End of text section */
59  
60    . = ALIGN(16);
61 -  __start___ex_table = .;
62 -  __ex_table : { *(__ex_table) }
63 -  __stop___ex_table = .;
64 +  __ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
65 +       __start___ex_table = .;
66 +       *(__ex_table)
67 +       __stop___ex_table = .;
68 +  }
69  
70    RODATA
71  
72 -  .data : {                    /* Data */
73 +  . = ALIGN(8192);
74 +  .data : AT(ADDR(.data) - LOAD_OFFSET) {      /* Data */
75         DATA_DATA
76         CONSTRUCTORS
77 -       }
78 +  } :data
79  
80 -  .bss : { *(.bss) }           /* BSS */
81 +  .bss : AT(ADDR(.bss) - LOAD_OFFSET) {                /* BSS */
82 +       *(.bss)
83 +  }
84  
85    . = ALIGN(16);
86 -  .data.cacheline_aligned : { *(.data.cacheline_aligned) } :data
87 +  .data.cacheline_aligned : AT(ADDR(.data.cacheline_aligned) - LOAD_OFFSET ) {
88 +       *(.data.cacheline_aligned)
89 +  } :data
90  
91    _edata = .;                  /* End of data section */
92  
93    . = ALIGN(8192);             /* Initrd */
94 -  __init_begin = .;
95 -  .init.text : {
96 +  .init.text : AT(ADDR(.init.text) - LOAD_OFFSET) {
97 +       __init_begin = .;
98         _sinittext = .;
99         *(.init.text)
100         _einittext = .;
101    }
102 -  .init.data : { *(.init.data) }
103 +
104 +  .init.data : AT(ADDR(.init.data) - LOAD_OFFSET) {
105 +       *(.init.data)
106 +  }
107 +
108    . = ALIGN(16);
109 -  __setup_start = .;
110 -  .init.setup : { *(.init.setup) }
111 -  __setup_end = .;
112 -  __initcall_start = .;
113 -  .initcall.init : {
114 +  .init.setup : AT(ADDR(.init.setup) - LOAD_OFFSET) {
115 +       __setup_start = .;
116 +       *(.init.setup)
117 +       __setup_end = .;
118 +  }
119 +
120 +  .initcall.init : AT(ADDR(.initcall.init) - LOAD_OFFSET) {
121 +       __initcall_start = .;
122         INITCALLS
123 +       __initcall_end = .;
124    }
125 -  __initcall_end = .;
126 -  __con_initcall_start = .;
127 -  .con_initcall.init : { *(.con_initcall.init) }
128 -  __con_initcall_end = .;
129 +
130 +  .con_initcall.init : AT(ADDR(.con_initcall.init) - LOAD_OFFSET) {
131 +       __con_initcall_start = .;
132 +       *(.con_initcall.init)
133 +       __con_initcall_end = .;
134 +  }
135 +
136    SECURITY_INIT
137 +
138  #ifdef CONFIG_BLK_DEV_INITRD
139    . = ALIGN(8192);
140 -  __initramfs_start = .;
141 -  .init.ramfs : { *(.init.ramfs) }
142 -  __initramfs_end = .;
143 +  .init.ramfs : AT(ADDR(.init.ramfs) - LOAD_OFFSET) {
144 +       __initramfs_start = .;
145 +       *(.init.ramfs)
146 +       __initramfs_end = .;
147 +  }
148  #endif
149 +
150    . = ALIGN(8192);
151    __init_end = .;
152  
153 -  .data.init_task : { *(.data.init_task) }     /* The initial task and kernel stack */
154 +  .data.init_task : AT(ADDR(.data.init_task) - LOAD_OFFSET) {
155 +       *(.data.init_task)      /* The initial task and kernel stack */
156 +  }
157  
158    _end = . ;
159  
160 @@ -79,14 +118,8 @@ SECTIONS
161         *(.exit.text)
162         *(.exit.data)
163         *(.exitcall.exit)
164 -       }
165 +  }
166  
167    /* Stabs debugging sections.  */
168 -  .stab 0 : { *(.stab) }
169 -  .stabstr 0 : { *(.stabstr) }
170 -  .stab.excl 0 : { *(.stab.excl) }
171 -  .stab.exclstr 0 : { *(.stab.exclstr) }
172 -  .stab.index 0 : { *(.stab.index) }
173 -  .stab.indexstr 0 : { *(.stab.indexstr) }
174 -  .comment 0 : { *(.comment) }
175 +  STABS_DEBUG
176  }
177 --- a/arch/m68k/kernel/vmlinux.lds.S
178 +++ b/arch/m68k/kernel/vmlinux.lds.S
179 @@ -1,6 +1,7 @@
180  PHDRS
181  {
182 -  text PT_LOAD FILEHDR PHDRS FLAGS (7);
183 +  headers PT_PHDR PHDRS ;
184 +  text PT_LOAD FILEHDR PHDRS FLAGS (5);
185    data PT_LOAD FLAGS (7);
186  }
187  #ifdef CONFIG_SUN3