From e39faba05eb205b964704115a1de89989e9638a9 Mon Sep 17 00:00:00 2001
From: "Nicolas \"Pixel\" Noble" <pixel@nobis-crew.org>
Date: Wed, 26 Jan 2011 23:54:35 +0100
Subject: Merging the two ldscripts into one, creating better bss support, and
 cleaning the bss section in the boot phase.

---
 arch/arm/lpc17xx/ldscript | 45 ++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 38 insertions(+), 7 deletions(-)

(limited to 'arch/arm/lpc17xx/ldscript')

diff --git a/arch/arm/lpc17xx/ldscript b/arch/arm/lpc17xx/ldscript
index fc283d4..2a1ce2b 100644
--- a/arch/arm/lpc17xx/ldscript
+++ b/arch/arm/lpc17xx/ldscript
@@ -48,12 +48,15 @@ PROVIDE(__rom_data_len = __rom_data_end - __rom_data_begin);
 PROVIDE(__heap_start = __cs3_heap_start);
 PROVIDE(__heap_end = __cs3_heap_end);
 
+PROVIDE(__bss_ram_len = __bss_ram_end - __bss_ram_begin);
+
 SECTIONS
 {
   .text :
   {
     CREATE_OBJECT_SYMBOLS
     __cs3_region_start_rom = .;
+    __privileged_code_start__ = . ;
     
     *(.cs3.region-head.rom)
     __cs3_interrupt_vector = __cs3_interrupt_vector_cortex_m;
@@ -67,6 +70,20 @@ SECTIONS
     *(.cs3.reset)
     /* Make sure we pulled in some reset code.  */
     ASSERT (. != __cs3_reset, "No reset code");
+    
+    *( .privileged_code )
+    *( privileged_functions )
+
+    __privileged_code_end___len = . - __privileged_code_start__ - 1 ;
+    __privileged_code_end___len |= __privileged_code_end___len >> 1 ;
+    __privileged_code_end___len |= __privileged_code_end___len >> 2 ;
+    __privileged_code_end___len |= __privileged_code_end___len >> 4 ;
+    __privileged_code_end___len |= __privileged_code_end___len >> 8 ;
+    __privileged_code_end___len |= __privileged_code_end___len >> 16 ;
+    . = ALIGN( MAX( __privileged_code_end___len + 1, 32 ) ) ;
+
+    __privileged_code_end__ = .;
+    __privileged_functions_end__ = .;
 
     *(.text .text.* .gnu.linkonce.t.*)
     *(.plt)
@@ -137,7 +154,7 @@ SECTIONS
   } >rom
   __cs3_region_size_rom = LENGTH(rom);
   __cs3_region_num = 1;
-
+  
   .data_begin :
   {
     . = ALIGN(8);
@@ -148,6 +165,17 @@ SECTIONS
   {
     __cs3_region_start_ram = .;
     __ram_data_begin = .;
+    __privileged_data_start__ = .;
+    *( privileged_data )
+    __privileged_data_end___len = . - __privileged_data_start__ - 1 ;
+    __privileged_data_end___len |= __privileged_data_end___len >> 1 ;
+    __privileged_data_end___len |= __privileged_data_end___len >> 2 ;
+    __privileged_data_end___len |= __privileged_data_end___len >> 4 ;
+    __privileged_data_end___len |= __privileged_data_end___len >> 8 ;
+    __privileged_data_end___len |= __privileged_data_end___len >> 16 ;
+    . = ALIGN( MAX( __privileged_data_end___len + 1, 32 ) ) ;
+
+    __privileged_data_end__ = .;
     *(.cs3.region-head.ram)
     KEEP(*(.jcr))
     *(.got.plt) *(.got)
@@ -157,21 +185,24 @@ SECTIONS
     . = ALIGN (8);
     _edata = .;
   } >ram AT>rom
+  .data_end :
+  {
+    . = ALIGN(8);
+    __rom_data_end = .;
+  } > rom
+
   .bss :
   {
+    __bss_ram_begin = .;
     *(.shbss)
     *(.bss .bss.* .gnu.linkonce.b.*)
     *(COMMON)
     *(.ram.b)
     . = ALIGN (8);
+    __bss_ram_end = .;
     _end = .;
     __end = .;
-  } >ram AT>rom
-  .data_end :
-  {
-    . = ALIGN(8);
-    __rom_data_end = .;
-  } > rom
+  } >ram
 
   /* This used for USB RAM section */
 	.usb_ram (NOLOAD):
-- 
cgit v1.2.3