summaryrefslogtreecommitdiff
path: root/arch/arm/lpc17xx/ldscript
diff options
context:
space:
mode:
authorNicolas "Pixel" Noble <pixel@nobis-crew.org>2011-01-26 23:54:35 +0100
committerNicolas "Pixel" Noble <pixel@nobis-crew.org>2011-01-26 23:54:35 +0100
commite39faba05eb205b964704115a1de89989e9638a9 (patch)
treeceecca98bba79323d4035cda15406103329ee99e /arch/arm/lpc17xx/ldscript
parent52cb89c3853f42d4cab77814e6e35c1f60f20250 (diff)
Merging the two ldscripts into one, creating better bss support, and cleaning the bss section in the boot phase.
Diffstat (limited to 'arch/arm/lpc17xx/ldscript')
-rw-r--r--arch/arm/lpc17xx/ldscript45
1 files changed, 38 insertions, 7 deletions
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):