Index: c/src/lib/libbsp/arm/csb336/ChangeLog
===================================================================
--- c/src/lib/libbsp/arm/csb336/ChangeLog	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/csb336/ChangeLog	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,2 +1,7 @@
+2010-12-03	Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+	* bsp_specs, start/start.S, startup/linkcmds: Use linker command base
+	file.
+
 2010-04-30	Sebastian Huber <sebastian.huber@embedded-brains.de>
 
Index: c/src/lib/libbsp/arm/csb336/bsp_specs
===================================================================
--- c/src/lib/libbsp/arm/csb336/bsp_specs	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/csb336/bsp_specs	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -8,7 +8,6 @@
 
 *link:
-%{!qrtems: %(old_link)} %{qrtems: -dp -Bstatic -N}
+%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N}
 
 *endfile:
 %{!qrtems: *(old_endfiles)} %{qrtems: crtend.o%s crtn.o%s }
-
Index: c/src/lib/libbsp/arm/csb336/start/start.S
===================================================================
--- c/src/lib/libbsp/arm/csb336/start/start.S	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/csb336/start/start.S	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -12,4 +12,6 @@
  * $Id$
  */
+
+#include <bsp/linker-symbols.h>
 
 /* Some standard definitions...*/
@@ -40,6 +42,6 @@
 
         /* zero the bss */
-        ldr     r1, =_bss_end_
-        ldr     r0, =_bss_start_
+        ldr     r1, =bsp_section_bss_end
+        ldr     r0, =bsp_section_bss_begin
 
 _bss_init:
@@ -54,6 +56,6 @@
         mov     r0, #(PSR_MODE_IRQ | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_irq_stack_size
-        ldr     sp, =_irq_stack
+        ldr     r1, =bsp_stack_irq_size
+        ldr     sp, =bsp_stack_irq_begin
         add     sp, sp, r1
 
@@ -61,6 +63,6 @@
         mov     r0, #(PSR_MODE_FIQ | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_fiq_stack_size
-        ldr     sp, =_fiq_stack
+        ldr     r1, =bsp_stack_fiq_size
+        ldr     sp, =bsp_stack_fiq_begin
         add     sp, sp, r1
 
@@ -68,6 +70,6 @@
         mov     r0, #(PSR_MODE_ABT | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_abt_stack_size
-        ldr     sp, =_abt_stack
+        ldr     r1, =bsp_stack_abt_size
+        ldr     sp, =bsp_stack_abt_begin
         add     sp, sp, r1
 
@@ -75,6 +77,6 @@
         mov     r0, #(PSR_MODE_UNDEF | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_undef_stack_size
-        ldr     sp, =_undef_stack
+        ldr     r1, =bsp_stack_und_size
+        ldr     sp, =bsp_stack_und_begin
         add     sp, sp, r1
 
@@ -82,6 +84,6 @@
         mov     r0, #(PSR_MODE_SVC | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_svc_stack_size
-        ldr     sp, =_svc_stack
+        ldr     r1, =bsp_stack_svc_size
+        ldr     sp, =bsp_stack_svc_begin
         add     sp, sp, r1
         sub     sp, sp, #0x64
Index: c/src/lib/libbsp/arm/csb336/startup/linkcmds
===================================================================
--- c/src/lib/libbsp/arm/csb336/startup/linkcmds	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/csb336/startup/linkcmds	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,247 +1,25 @@
-/*
- *  Cogent CSB336 Linker script
- *
- *  Copyright (c) 2004 by Cogent Computer Systems
- *  Written by Jay Monkman <jtm@lopingdog.com>
- *
- *  The license and distribution terms for this file may be
- *  found in the file LICENSE in this distribution or at
- *
- *  http://www.rtems.com/license/LICENSE.
- *
- *  $Id$
- */
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
-	      "elf32-littlearm")
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-/* SEARCH_DIR(/usr/local/rtems-arm-dev-tools/arm-rtems/lib); */
-
-
 MEMORY {
-	sdram : ORIGIN = 0x08200000, LENGTH = 30M
+	SDRAM_MMU : ORIGIN = 0x08200000, LENGTH = 16k
+	SDRAM : ORIGIN = 0x08204000, LENGTH = 30M - 16k
+	NIRVANA : ORIGIN = 0, LENGTH = 0
 }
 
-/*
- * Declare some sizes.
- */
+REGION_ALIAS ("REGION_START", SDRAM);
+REGION_ALIAS ("REGION_VECTOR", SDRAM);
+REGION_ALIAS ("REGION_TEXT", SDRAM);
+REGION_ALIAS ("REGION_TEXT_LOAD", SDRAM);
+REGION_ALIAS ("REGION_RODATA", SDRAM);
+REGION_ALIAS ("REGION_RODATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_DATA", SDRAM);
+REGION_ALIAS ("REGION_DATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_FAST_TEXT", SDRAM);
+REGION_ALIAS ("REGION_FAST_TEXT_LOAD", SDRAM);
+REGION_ALIAS ("REGION_FAST_DATA", SDRAM);
+REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_BSS", SDRAM);
+REGION_ALIAS ("REGION_WORK", SDRAM);
+REGION_ALIAS ("REGION_STACK", SDRAM);
 
-/* The base for SDRAM is set to umon's APPRAMBASE */
-_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0x08200000;
-_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 30M;
+_ttbl_base = ORIGIN (SDRAM_MMU);
 
-RamBase = _sdram_base;
-RamSize = _sdram_size;
-HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
-
-_irq_stack_size = DEFINED(_irq_stack_size) ? _irq_stack_size : 0x1000;
-_fiq_stack_size = DEFINED(_fiq_stack_size) ? _fiq_stack_size : 0x400;
-_abt_stack_size = DEFINED(_abt_stack_size) ? _abt_stack_size : 0x400;
-_undef_stack_size = DEFINED(_undef_stack_size) ? _undef_stack_size : 0x400;
-_svc_stack_size = DEFINED(_svc_stack_size) ? _svc_stack_size : 0x1000;
-
-
-
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-
-SECTIONS
-{
-  .base :
-  {
-    arm_exception_table = .;    
-
-    arm_reset_vect    = .;     /* 0x00 */
-    . += 4;
-
-    arm_undef_vect    = .;     /* 0x04 */
-    . += 4;
-
-    arm_swi_vect      = .;     /* 0x08 */
-    . += 4;
-
-    arm_iabrt_vect    = .;     /* 0x0c */
-    . += 4;
-
-    arm_dabrt_vect    = .;     /* 0x10 */
-    . += 4;
-
-    /* no vector here */
-    . += 4;
-
-    arm_irq_vect      = .;     /* 0x18 */
-    . += 4;
-
-    arm_fiq_vect      = .;     /* 0x1c */
-    . += 4;
-			      /* FIXME: */
-
-    rtems_vector_table = .;
-    . += (8 * 4);                     /* 8 ARM interrupts */
-	
-    . = ALIGN (0x100);
-
-
-  } > sdram
-
-  .init          : 
-  { 
-    KEEP (*(.init))
-  } > sdram   /*=0*/
-
-  .text      :
-  {
-	_text_start = .;
-	 CREATE_OBJECT_SYMBOLS
-	*(.text) 
-	*(.text.*)
-
-        /*
-         * Special FreeBSD sysctl sections.
-         */
-        . = ALIGN (16);
-        __start_set_sysctl_set = .;
-        *(set_sysctl_*);
-        __stop_set_sysctl_set = ABSOLUTE(.);
-        *(set_domain_*);
-        *(set_pseudo_*);
-
-	/* .gnu.warning sections are handled specially by elf32.em.  */
-	*(.gnu.warning)
-	*(.gnu.linkonce.t*)
-	*(.glue_7)
-	*(.glue_7t)
-
-	/* I think these come from the ld docs: */	
-	___CTOR_LIST__ = .;
-	LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)
-	*(.ctors)
-	LONG(0)
-	___CTOR_END__ = .;
-	___DTOR_LIST__ = .;
-	LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2)
-	*(.dtors)
-	LONG(0)
-	___DTOR_END__ = .;
-
-	_etext = .;
-	PROVIDE (etext = .);
-  } > sdram  
-
-  .fini      :
-  {
-    KEEP (*(.fini))
-  } > sdram  /*=0*/
-
-  .data :
-  { 
-    *(.data)
-    *(.data.*)
-    *(.gnu.linkonce.d*)
-    *(.jcr)
-    SORT(CONSTRUCTORS)
-    _edata = .;
-  } > sdram 
-
-  .eh_frame : { *(.eh_frame) } > sdram
-  .data1   : { *(.data1) } > sdram
-  .eh_frame : { *(.eh_frame) } > sdram
-  .gcc_except_table : { *(.gcc_except_table*) } > sdram
-
-  .rodata :
-  {
-    *(.rodata)
-    *(.rodata.*)
-    *(.gnu.linkonce.r*)
-  } > sdram
-
-  .bss       :
-  {
-	_bss_start_ = .;
-	_clear_start = .;
-	*(.bss)
-	*(.bss.*)
-	*(.gnu.linkonce.b.*)
-	*(COMMON)
-	. = ALIGN(64);
-	_clear_end = .;
-
-	. = ALIGN (256);
-	_abt_stack = .;
-	. += _abt_stack_size;
-
-	. = ALIGN (256);
-	_undef_stack = .;
-	. += _undef_stack_size;
-
-	. = ALIGN (256);
-	_irq_stack = .;
-	. += _irq_stack_size;
-
-	. = ALIGN (256);
-	_fiq_stack = .;
-	. += _fiq_stack_size;
-
-	. = ALIGN (256);
-	_svc_stack = .;
-	. += _svc_stack_size;
-
-	_bss_end_ = .;
-	_end = .;
-	__end = .;
-
-/* 
- * Ideally, the MMU's translation table would be in SRAM. But we
- * don't have any. If we don't use more regions than TLB entries (64),
- * the lookup will only happen once for each region.
- */
-	. = ALIGN (16 * 1024);
-	_ttbl_base = .;
-	. += (16 * 1024);
-
-	. = ALIGN (1024);
-	_bss_free_start = .;
-	WorkAreaBase = .;
-
-  } > sdram
-
-
-/* Debugging stuff follows? */
-
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) } 
-  .stabstr 0 : { *(.stabstr) } 
-  .stab.excl 0 : { *(.stab.excl) } 
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) } 
-  .stab.indexstr 0 : { *(.stab.indexstr) } 
-  .comment 0 : { *(.comment) }
-  /* DWARF debug sections.
-     Symbols in the DWARF debugging sections are relative to the beginning
-     of the section so we begin them at 0.  */
-  /* DWARF 1 */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) } 
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) } 
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) } 
-  /*.stack 0x80000 : { _stack = .; *(.stack) }*/
-  /* These must appear regardless of  .  */
-}
-
+INCLUDE linkcmds.armv4
Index: c/src/lib/libbsp/arm/edb7312/ChangeLog
===================================================================
--- c/src/lib/libbsp/arm/edb7312/ChangeLog	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/edb7312/ChangeLog	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,2 +1,7 @@
+2010-12-03	Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+	* bsp_specs, start/start.S, startup/linkcmds: Use linker command base
+	file.
+
 2010-04-30	Sebastian Huber <sebastian.huber@embedded-brains.de>
 
Index: c/src/lib/libbsp/arm/edb7312/bsp_specs
===================================================================
--- c/src/lib/libbsp/arm/edb7312/bsp_specs	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/edb7312/bsp_specs	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -8,5 +8,5 @@
 
 *link:
-%{!qrtems: %(old_link)} %{qrtems: -dp -Bstatic -N}
+%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N}
 
 *endfile:
Index: c/src/lib/libbsp/arm/edb7312/start/start.S
===================================================================
--- c/src/lib/libbsp/arm/edb7312/start/start.S	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/edb7312/start/start.S	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,4 +1,6 @@
 /*
  * Cirrus EP7312 Startup code
+ *
+ * Copyright (c) 2010 embedded brains GmbH.
  *
  * Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
@@ -14,4 +16,6 @@
  *  $Id$
 */
+
+#include <bsp/linker-symbols.h>
 
 /* Some standard definitions...*/
@@ -29,48 +33,6 @@
 .equ F_Bit,           	     0x40
 
-	.text
-	.globl	_start
-
-_start:
-	/* store the sp */
-	mov	r12, sp
-/*
- * Here is the code to initialize the low-level BSP environment
- * (Chip Select, PLL, ....?)
- */
-
-/* zero the bss */
-        LDR     r1, =_bss_end_       /* get end of ZI region */
-        LDR     r0, =_bss_start_     /* load base address of ZI region */
-
-zi_init:
-        MOV     r2, #0
-        CMP     r0, r1		       /* loop whilst r0 < r1 */
-        STRLOT   r2, [r0], #4
-        BLO     zi_init
-
-/* Load basic ARM7 interrupt table */
-VectorInit:
-	MOV	R0, #0
-	ADR	R1, Vector_Init_Block
-	LDMIA	R1!, {R2, r3}	/* Copy the Vectors (8 words) */
-	STMIA	R0!, {r2, r3}
-	LDMIA	R1!, {R2, r3}	/* Copy the Vectors (8 words) */
-	STMIA	R0!, {r2, r3}
-	LDMIA	R1!, {R2, r3}	/* Copy the Vectors (8 words) */
-	STMIA	R0!, {r2, r3}
-	LDMIA	R1!, {R2, r3}	/* Copy the Vectors (8 words) */
-	STMIA	R0!, {r2, r3}
-
-	LDMIA	R1!, {R2, r3}	/* Copy the .long'ed addresses (8 words) */
-	STMIA	R0!, {r2, r3}
-	LDMIA	R1!, {R2, r3}	/* Copy the .long'ed addresses (8 words) */
-	STMIA	R0!, {r2, r3}
-	LDMIA	R1!, {R2, r3}	/* Copy the .long'ed addresses (8 words) */
-	STMIA	R0!, {r2, r3}
-	LDMIA	R1!, {R2, r3}	/* Copy the .long'ed addresses (8 words) */
-	STMIA	R0!, {r2, r3}
-
-	B	init2
+.section ".bsp_start_text", "ax"
+.arm
 
 /*******************************************************
@@ -119,5 +81,23 @@
         B       FIQ_Handler
 
-init2 :
+	.globl	_start
+_start:
+	/* store the sp */
+	mov	r12, sp
+/*
+ * Here is the code to initialize the low-level BSP environment
+ * (Chip Select, PLL, ....?)
+ */
+
+/* zero the bss */
+        LDR     r1, =bsp_section_bss_end   /* get end of ZI region */
+        LDR     r0, =bsp_section_bss_begin /* load base address of ZI region */
+
+zi_init:
+        MOV     r2, #0
+        CMP     r0, r1		       /* loop whilst r0 < r1 */
+        STRLOT   r2, [r0], #4
+        BLO     zi_init
+
 /* --- Initialise stack pointer registers */
 
@@ -125,6 +105,6 @@
     MOV     r0, #Mode_IRQ | I_Bit | F_Bit     /* No interrupts */
     MSR     cpsr, r0
-    ldr	    r1, =_irq_stack_size
-    LDR     sp, =_irq_stack
+    ldr	    r1, =bsp_stack_irq_size
+    LDR     sp, =bsp_stack_irq_begin
     add	    sp, sp, r1
     sub     sp, sp, #0x64
@@ -133,6 +113,6 @@
     MOV     r0, #Mode_FIQ | I_Bit | F_Bit     /* No interrupts */
     MSR     cpsr, r0
-    ldr	    r1, =_fiq_stack_size
-    LDR     sp, =_fiq_stack
+    ldr	    r1, =bsp_stack_fiq_size
+    LDR     sp, =bsp_stack_fiq_begin
     add	    sp, sp, r1
     sub     sp, sp, #0x64
@@ -141,6 +121,6 @@
     MOV     r0, #Mode_ABT | I_Bit | F_Bit     /* No interrupts */
     MSR     cpsr, r0
-    ldr	    r1, =_abt_stack_size
-    LDR     sp, =_abt_stack
+    ldr	    r1, =bsp_stack_abt_size
+    LDR     sp, =bsp_stack_abt_begin
     add	    sp, sp, r1
     sub     sp, sp, #0x64
@@ -149,6 +129,6 @@
     MOV     r0, #Mode_SVC | I_Bit | F_Bit     /* No interrupts */
     MSR     cpsr, r0
-    ldr	    r1, =_svc_stack_size
-    LDR     sp, =_svc_stack
+    ldr	    r1, =bsp_stack_svc_size
+    LDR     sp, =bsp_stack_svc_begin
     add	    sp, sp, r1
     sub     sp, sp, #0x64
Index: c/src/lib/libbsp/arm/edb7312/startup/linkcmds
===================================================================
--- c/src/lib/libbsp/arm/edb7312/startup/linkcmds	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/edb7312/startup/linkcmds	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,243 +1,24 @@
-/*
- * Cirrus EP7312 linker script
- *
- * Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
- *	
- *  The license and distribution terms for this file may be
- *  found in the file LICENSE in this distribution or at
- *
- *  http://www.rtems.com/license/LICENSE.
- *
- *
- *  $Id$
-*/
-
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
-	      "elf32-littlearm")
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-
-
 MEMORY {
-	sdram : ORIGIN = 0x00000000, LENGTH = 16M
-	regs  : ORIGIN = 0x80000000, LENGTH = 1M
+	SDRAM : ORIGIN = 0x00000000, LENGTH = 16M
+	NIRVANA : ORIGIN = 0, LENGTH = 0
 }
 
-/*
- * Declare some sizes.
- */
+REGION_ALIAS ("REGION_START", SDRAM);
+REGION_ALIAS ("REGION_VECTOR", SDRAM);
+REGION_ALIAS ("REGION_TEXT", SDRAM);
+REGION_ALIAS ("REGION_TEXT_LOAD", SDRAM);
+REGION_ALIAS ("REGION_RODATA", SDRAM);
+REGION_ALIAS ("REGION_RODATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_DATA", SDRAM);
+REGION_ALIAS ("REGION_DATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_FAST_TEXT", SDRAM);
+REGION_ALIAS ("REGION_FAST_TEXT_LOAD", SDRAM);
+REGION_ALIAS ("REGION_FAST_DATA", SDRAM);
+REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_BSS", SDRAM);
+REGION_ALIAS ("REGION_WORK", SDRAM);
+REGION_ALIAS ("REGION_STACK", SDRAM);
 
-_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0x00000000;
-_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 16M;
+bsp_vector_table_in_start_section = 1;
 
-RamBase = _sdram_base;
-RamSize = _sdram_size;
-HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
-
-_irq_stack_size = DEFINED(_irq_stack_size) ? _irq_stack_size : 0x1000;
-_fiq_stack_size = DEFINED(_fiq_stack_size) ? _fiq_stack_size : 0x400;
-_abt_stack_size = DEFINED(_abt_stack_size) ? _abt_stack_size : 0;
-_svc_stack_size = DEFINED(_svc_stack_size) ? _svc_stack_size : 0x1000;
-
-
-
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-
-SECTIONS
-{
-  .base :
-  {
-    _sram_base = .;
-    arm_exception_table = .;    
-
-    arm_reset_vect    = .;     /* 0x00 */
-    . += 4;
-
-    arm_undef_vect    = .;     /* 0x04 */
-    . += 4;
-
-    arm_swi_vect      = .;     /* 0x08 */
-    . += 4;
-
-    arm_iabrt_vect    = .;     /* 0x0c */
-    . += 4;
-
-    arm_dabrt_vect    = .;     /* 0x10 */
-    . += 4;
-
-    /* no vector here */
-    . += 4;
-
-    arm_irq_vect      = .;     /* 0x18 */
-    . += 4;
-
-    arm_fiq_vect      = .;     /* 0x1c */
-    . += 4;
-			      /* FIXME: */
-    fiq_vect_table    = .;    /* this and irq_vector_table should be swapped */
-    . += (32 * 4);
-
-    irq_vector_table = .;
-    . += (32 * 4);      
-
-  } > sdram
-
-  .init          : 
-  { 
-    KEEP (*(.init))
-  } > sdram   /*=0*/
-
-  .text      :
-  {
-	_text_start = .;
-	 CREATE_OBJECT_SYMBOLS
-	*(.text) 
-	*(.text.*)
-
-        /*
-         * Special FreeBSD sysctl sections.
-         */
-        . = ALIGN (16);
-        __start_set_sysctl_set = .;
-        *(set_sysctl_*);
-        __stop_set_sysctl_set = ABSOLUTE(.);
-        *(set_domain_*);
-        *(set_pseudo_*);
-
-	/* .gnu.warning sections are handled specially by elf32.em.  */
-	*(.gnu.warning)
-	*(.gnu.linkonce.t*)
-	*(.glue_7)
-	*(.glue_7t)
-
-	/* I think these come from the ld docs: */	
-	___CTOR_LIST__ = .;
-	LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)
-	*(.ctors)
-	LONG(0)
-	___CTOR_END__ = .;
-	___DTOR_LIST__ = .;
-	LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2)
-	*(.dtors)
-	LONG(0)
-	___DTOR_END__ = .;
-
-	_etext = .;
-	PROVIDE (etext = .);
-  } > sdram  
-
-  .fini      :
-  {
-    KEEP (*(.fini))
-  } > sdram  /*=0*/
-
-  .data :
-  { 
-    *(.data)
-    *(.data.*)
-    *(.gnu.linkonce.d*)
-    *(.jcr)
-    SORT(CONSTRUCTORS)
-    _edata = .;
-  } > sdram 
-
-  .eh_frame : { *(.eh_frame) } > sdram
-  .data1   : { *(.data1) } > sdram
-  .eh_frame : { *(.eh_frame) } > sdram
-  .gcc_except_table : { *(.gcc_except_table*) } > sdram
-
-  .rodata :
-  {
-    *(.rodata)
-    *(.rodata.*)
-    *(.gnu.linkonce.r*)
-  } > sdram
-
-  .bss       :
-  {
-	_bss_start_ = .;
-	_clear_start = .;
-	*(.bss)
-	*(.bss.*)
-	*(.gnu.linkonce.b.*)
-	*(COMMON)
-	. = ALIGN(64);
-	_clear_end = .;
-
-	. = ALIGN (256);
-	_abt_stack = .;
-	. += _abt_stack_size;
-
-	. = ALIGN (256);
-	_irq_stack = .;
-	. += _irq_stack_size;
-
-	. = ALIGN (256);
-	_fiq_stack = .;
-	. += _fiq_stack_size;
-
-	. = ALIGN (256);
-	_svc_stack = .;
-	. += _svc_stack_size;
-
-	_bss_end_ = .;
-	_end = .;
-	__end = .;
-
-
-	. = ALIGN (1024);
-	_bss_free_start = .;
-	WorkAreaBase = .;
-
-  } > sdram
-
-/*
-  .regs	:
-  {
-	ep7312_regs_base = .;
-	ep7312_regs = .;
-	. += 8192;
-  } > regs
-*/
-
-
-/* Debugging stuff follows? */
-
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) } 
-  .stabstr 0 : { *(.stabstr) } 
-  .stab.excl 0 : { *(.stab.excl) } 
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) } 
-  .stab.indexstr 0 : { *(.stab.indexstr) } 
-  .comment 0 : { *(.comment) }
-  /* DWARF debug sections.
-     Symbols in the DWARF debugging sections are relative to the beginning
-     of the section so we begin them at 0.  */
-  /* DWARF 1 */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) } 
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) } 
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) } 
-  /*.stack 0x80000 : { _stack = .; *(.stack) }*/
-  /* These must appear regardless of  .  */
-}
-
+INCLUDE linkcmds.armv4
Index: c/src/lib/libbsp/arm/gdbarmsim/ChangeLog
===================================================================
--- c/src/lib/libbsp/arm/gdbarmsim/ChangeLog	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/gdbarmsim/ChangeLog	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,2 +1,7 @@
+2010-12-03	Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+	* bsp_specs, start/start.S, startup/linkcmds: Use linker command base
+	file.
+
 2010-08-15	Joel Sherrill <joel.sherrilL@OARcorp.com>
 
Index: c/src/lib/libbsp/arm/gdbarmsim/bsp_specs
===================================================================
--- c/src/lib/libbsp/arm/gdbarmsim/bsp_specs	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/gdbarmsim/bsp_specs	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -8,7 +8,6 @@
 
 *link:
-%{!qrtems: %(old_link)} %{qrtems: -dp -Bstatic -N}
+%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N}
 
 *endfile:
 %{!qrtems: *(old_endfiles)} %{qrtems: crtend.o%s crtn.o%s }
-
Index: c/src/lib/libbsp/arm/gdbarmsim/start/start.S
===================================================================
--- c/src/lib/libbsp/arm/gdbarmsim/start/start.S	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/gdbarmsim/start/start.S	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -8,4 +8,5 @@
 #include <newlib.h>
 #include <bsp/swi.h>
+#include <bsp/linker-symbols.h>
 
 /* ANSI concatenation macros.  */
@@ -376,7 +377,7 @@
 #endif
 .LC1:
-	.word	__bss_start__
+	.word	bsp_section_bss_begin
 .LC2:
-	.word	__clear_end__ /* __bss_end__ */
+	.word	bsp_section_bss_end
 #ifdef __USES_INITFINI__
 .Lfini:
Index: c/src/lib/libbsp/arm/gdbarmsim/startup/linkcmds
===================================================================
--- c/src/lib/libbsp/arm/gdbarmsim/startup/linkcmds	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/gdbarmsim/startup/linkcmds	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,252 +1,22 @@
-/*
- *  Cogent CSB336 Linker script
- *
- *  Copyright (c) 2004 by Cogent Computer Systems
- *  Written by Jay Monkman <jtm@lopingdog.com>
- *
- *  The license and distribution terms for this file may be
- *  found in the file LICENSE in this distribution or at
- *
- *  http://www.rtems.com/license/LICENSE.
- *
- *  $Id$
- */
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
-	      "elf32-littlearm")
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-/* SEARCH_DIR(/usr/local/rtems-arm-dev-tools/arm-rtems/lib); */
-
-
 MEMORY {
-	sdram : ORIGIN = 0x00000000, LENGTH = 4M
+	RAM : ORIGIN = 0x00000000, LENGTH = 4M
+	NIRVANA : ORIGIN = 0, LENGTH = 0
 }
 
-/*
- * Declare some sizes.
- */
+REGION_ALIAS ("REGION_START", RAM);
+REGION_ALIAS ("REGION_VECTOR", RAM);
+REGION_ALIAS ("REGION_TEXT", RAM);
+REGION_ALIAS ("REGION_TEXT_LOAD", RAM);
+REGION_ALIAS ("REGION_RODATA", RAM);
+REGION_ALIAS ("REGION_RODATA_LOAD", RAM);
+REGION_ALIAS ("REGION_DATA", RAM);
+REGION_ALIAS ("REGION_DATA_LOAD", RAM);
+REGION_ALIAS ("REGION_FAST_TEXT", RAM);
+REGION_ALIAS ("REGION_FAST_TEXT_LOAD", RAM);
+REGION_ALIAS ("REGION_FAST_DATA", RAM);
+REGION_ALIAS ("REGION_FAST_DATA_LOAD", RAM);
+REGION_ALIAS ("REGION_BSS", RAM);
+REGION_ALIAS ("REGION_WORK", RAM);
+REGION_ALIAS ("REGION_STACK", RAM);
 
-/* The base for SDRAM is set to umon's APPRAMBASE */
-_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0x0;
-_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 4M;
-
-RamBase = _sdram_base;
-RamSize = _sdram_size;
-HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
-
-_irq_stack_size = DEFINED(_irq_stack_size) ? _irq_stack_size : 0x1000;
-_fiq_stack_size = DEFINED(_fiq_stack_size) ? _fiq_stack_size : 0x400;
-_abt_stack_size = DEFINED(_abt_stack_size) ? _abt_stack_size : 0x400;
-_undef_stack_size = DEFINED(_undef_stack_size) ? _undef_stack_size : 0x400;
-_svc_stack_size = DEFINED(_svc_stack_size) ? _svc_stack_size : 0x1000;
-
-
-
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-
-SECTIONS
-{
-  .base :
-  {
-    arm_exception_table = .;    
-
-    arm_reset_vect    = .;     /* 0x00 */
-    . += 4;
-
-    arm_undef_vect    = .;     /* 0x04 */
-    . += 4;
-
-    arm_swi_vect      = .;     /* 0x08 */
-    . += 4;
-
-    arm_iabrt_vect    = .;     /* 0x0c */
-    . += 4;
-
-    arm_dabrt_vect    = .;     /* 0x10 */
-    . += 4;
-
-    /* no vector here */
-    . += 4;
-
-    arm_irq_vect      = .;     /* 0x18 */
-    . += 4;
-
-    arm_fiq_vect      = .;     /* 0x1c */
-    . += 4;
-			      /* FIXME: */
-
-    rtems_vector_table = .;
-    . += (8 * 4);                     /* 8 ARM interrupts */
-	
-    . = ALIGN (0x100);
-
-
-  } > sdram
-
-  .text      :
-  {
-	. = 0x8000;
-	_text_start = .;
-	 CREATE_OBJECT_SYMBOLS
-	*(.text) 
-	*(.text.*)
-
-        /*
-         * Special FreeBSD sysctl sections.
-         */
-        . = ALIGN (16);
-        __start_set_sysctl_set = .;
-        *(set_sysctl_*);
-        __stop_set_sysctl_set = ABSOLUTE(.);
-        *(set_domain_*);
-        *(set_pseudo_*);
-
-	/* .gnu.warning sections are handled specially by elf32.em.  */
-	*(.gnu.warning)
-	*(.gnu.linkonce.t*)
-	*(.glue_7)
-	*(.glue_7t)
-
-	/* I think these come from the ld docs: */	
-	___CTOR_LIST__ = .;
-	LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)
-	*(.ctors)
-	LONG(0)
-	___CTOR_END__ = .;
-	___DTOR_LIST__ = .;
-	LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2)
-	*(.dtors)
-	LONG(0)
-	___DTOR_END__ = .;
-
-	_etext = .;
-	PROVIDE (etext = .);
-  } > sdram  
-
-  .init          : 
-  { 
-    KEEP (*(.init))
-  } > sdram   /*=0*/
-
-  .fini      :
-  {
-    KEEP (*(.fini))
-  } > sdram  /*=0*/
-
-  .data :
-  { 
-    *(.data)
-    *(.data.*)
-    *(.gnu.linkonce.d*)
-    *(.jcr)
-    SORT(CONSTRUCTORS)
-    _edata = .;
-  } > sdram 
-
-  .eh_frame : { *(.eh_frame) } > sdram
-  .data1   : { *(.data1) } > sdram
-  .eh_frame : { *(.eh_frame) } > sdram
-  .gcc_except_table : { *(.gcc_except_table*) } > sdram
-
-  .rodata :
-  {
-    *(.rodata)
-    *(.rodata.*)
-    *(.gnu.linkonce.r*)
-  } > sdram
-
-  .bss       :
-  {
-	__bss_start__ = .;
-	_bss_start_ = .;
-	_clear_start = .;
-	*(.bss)
-	*(.bss.*)
-	*(.gnu.linkonce.b.*)
-	*(COMMON)
-	. = ALIGN(64);
-	_clear_end = .;
-
-	. = ALIGN (256);
-	_abt_stack = .;
-	. += _abt_stack_size;
-
-	. = ALIGN (256);
-	_undef_stack = .;
-	. += _undef_stack_size;
-
-	. = ALIGN (256);
-	_irq_stack = .;
-	. += _irq_stack_size;
-
-	. = ALIGN (256);
-	_fiq_stack = .;
-	. += _fiq_stack_size;
-
-	. = ALIGN (256);
-	_svc_stack = .;
-	. += _svc_stack_size;
-
-/* 
- * Ideally, the MMU's translation table would be in SRAM. But we
- * don't have any. If we don't use more regions than TLB entries (64),
- * the lookup will only happen once for each region.
- */
-	. = ALIGN (16 * 1024);
-	_ttbl_base = .;
-	. += (16 * 1024);
-
-	. = ALIGN (1024);
-	_bss_free_start = .;
-	WorkAreaBase = .;
-
-        . = RamSize + RamBase - 1;
-	__clear_end__ = .;
-	__bss_end__ = .;
-	_bss_end_ = .;
-	_end = .;
-	__end = .;
-
-  } > sdram
-
-
-/* Debugging stuff follows? */
-
-  /* Stabs debugging sections.  */
-  .stab 0 : { *(.stab) } 
-  .stabstr 0 : { *(.stabstr) } 
-  .stab.excl 0 : { *(.stab.excl) } 
-  .stab.exclstr 0 : { *(.stab.exclstr) }
-  .stab.index 0 : { *(.stab.index) } 
-  .stab.indexstr 0 : { *(.stab.indexstr) } 
-  .comment 0 : { *(.comment) }
-  /* DWARF debug sections.
-     Symbols in the DWARF debugging sections are relative to the beginning
-     of the section so we begin them at 0.  */
-  /* DWARF 1 */
-  .debug          0 : { *(.debug) }
-  .line           0 : { *(.line) }
-  /* GNU DWARF 1 extensions */
-  .debug_srcinfo  0 : { *(.debug_srcinfo) }
-  .debug_sfnames  0 : { *(.debug_sfnames) }
-  /* DWARF 1.1 and DWARF 2 */
-  .debug_aranges  0 : { *(.debug_aranges) }
-  .debug_pubnames 0 : { *(.debug_pubnames) }
-  /* DWARF 2 */
-  .debug_info     0 : { *(.debug_info) }
-  .debug_abbrev   0 : { *(.debug_abbrev) }
-  .debug_line     0 : { *(.debug_line) }
-  .debug_frame    0 : { *(.debug_frame) }
-  .debug_str      0 : { *(.debug_str) } 
-  .debug_loc      0 : { *(.debug_loc) }
-  .debug_macinfo  0 : { *(.debug_macinfo) } 
-  /* SGI/MIPS DWARF 2 extensions */
-  .debug_weaknames 0 : { *(.debug_weaknames) }
-  .debug_funcnames 0 : { *(.debug_funcnames) }
-  .debug_typenames 0 : { *(.debug_typenames) }
-  .debug_varnames  0 : { *(.debug_varnames) } 
-  /*.stack 0x80000 : { _stack = .; *(.stack) }*/
-  /* These must appear regardless of  .  */
-}
-
+INCLUDE linkcmds.armv4
Index: c/src/lib/libbsp/arm/gumstix/ChangeLog
===================================================================
--- c/src/lib/libbsp/arm/gumstix/ChangeLog	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/gumstix/ChangeLog	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,2 +1,7 @@
+2010-12-03	Sebastian Huber <sebastian.huber@embedded-brains.de>
+
+	* bsp_specs, start/start.S, startup/linkcmds: Use linker command base
+	file.
+
 2010-05-14	Joel Sherrill <joel.sherrilL@OARcorp.com>
 
Index: c/src/lib/libbsp/arm/gumstix/bsp_specs
===================================================================
--- c/src/lib/libbsp/arm/gumstix/bsp_specs	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/gumstix/bsp_specs	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -8,5 +8,5 @@
 
 *link:
-%{!qrtems: %(old_link)} %{qrtems: -dp -Bstatic -N}
+%{!qrtems: %(old_link)} %{qrtems: -dc -dp -N}
 
 *endfile:
Index: c/src/lib/libbsp/arm/gumstix/start/start.S
===================================================================
--- c/src/lib/libbsp/arm/gumstix/start/start.S	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/gumstix/start/start.S	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -10,4 +10,5 @@
  */
 
+#include <bsp/linker-symbols.h>
 
 /* Some standard definitions...*/
@@ -39,6 +40,6 @@
 
         /* zero the bss */
-        ldr     r1, =_bss_end_
-        ldr     r0, =_bss_start_
+        ldr     r1, =bsp_section_bss_end
+        ldr     r0, =bsp_section_bss_begin
 
 _bss_init:
@@ -52,6 +53,6 @@
         mov     r0, #(PSR_MODE_IRQ | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_irq_stack_size
-        ldr     sp, =_irq_stack
+        ldr     r1, =bsp_stack_irq_size
+        ldr     sp, =bsp_stack_irq_begin
         add     sp, sp, r1
 
@@ -59,6 +60,6 @@
         mov     r0, #(PSR_MODE_FIQ | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_fiq_stack_size
-        ldr     sp, =_fiq_stack
+        ldr     r1, =bsp_stack_fiq_size
+        ldr     sp, =bsp_stack_fiq_begin
         add     sp, sp, r1
 
@@ -66,6 +67,6 @@
         mov     r0, #(PSR_MODE_ABT | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_abt_stack_size
-        ldr     sp, =_abt_stack
+        ldr     r1, =bsp_stack_abt_size
+        ldr     sp, =bsp_stack_abt_begin
         add     sp, sp, r1
 
@@ -73,6 +74,6 @@
         mov     r0, #(PSR_MODE_SVC | PSR_I | PSR_F)     /* No interrupts */
         msr     cpsr, r0
-        ldr     r1, =_svc_stack_size
-        ldr     sp, =_svc_stack
+        ldr     r1, =bsp_stack_und_size
+        ldr     sp, =bsp_stack_und_begin
         add     sp, sp, r1
         sub     sp, sp, #0x64
Index: c/src/lib/libbsp/arm/gumstix/startup/linkcmds
===================================================================
--- c/src/lib/libbsp/arm/gumstix/startup/linkcmds	(revision dda95953274d1992182f1f8e05f81080d1be8bc0)
+++ c/src/lib/libbsp/arm/gumstix/startup/linkcmds	(revision 8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9)
@@ -1,217 +1,26 @@
-/*
- * GUMSTIX linkcmd by Yang Xi <hiyangxi@gmail.com>. Borrow form CSB337 linkcmd.
- *
- *  The license and distribution terms for this file may be
- *  found in the file LICENSE in this distribution or at
- *  http://www.rtems.com/license/LICENSE.
- *
- *  $Id$
- */
-
-OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
-	      "elf32-littlearm")
-OUTPUT_ARCH(arm)
-ENTRY(_start)
-
-MEMORY
-{
-	sdram : ORIGIN = 0xA0000000, LENGTH = 64M
-	sram  : ORIGIN = 0x00000000, LENGTH = 16K
+MEMORY {
+	SDRAM_MMU : ORIGIN = 0xa0000000, LENGTH = 16k
+	SDRAM : ORIGIN = 0xa0004000, LENGTH = 64M - 16k
+	SRAM : ORIGIN = 0x00000000, LENGTH = 16k
+	NIRVANA : ORIGIN = 0, LENGTH = 0
 }
 
-/*
- * Declare some sizes.
- */
-_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0xA0000000;
-_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 64M;
+REGION_ALIAS ("REGION_START", SDRAM);
+REGION_ALIAS ("REGION_VECTOR", SDRAM);
+REGION_ALIAS ("REGION_TEXT", SDRAM);
+REGION_ALIAS ("REGION_TEXT_LOAD", SDRAM);
+REGION_ALIAS ("REGION_RODATA", SDRAM);
+REGION_ALIAS ("REGION_RODATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_DATA", SDRAM);
+REGION_ALIAS ("REGION_DATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_FAST_TEXT", SDRAM);
+REGION_ALIAS ("REGION_FAST_TEXT_LOAD", SDRAM);
+REGION_ALIAS ("REGION_FAST_DATA", SDRAM);
+REGION_ALIAS ("REGION_FAST_DATA_LOAD", SDRAM);
+REGION_ALIAS ("REGION_BSS", SDRAM);
+REGION_ALIAS ("REGION_WORK", SDRAM);
+REGION_ALIAS ("REGION_STACK", SDRAM);
 
-RamBase = _sdram_base;
-RamSize = _sdram_size;
-HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
+_ttbl_base = ORIGIN (SDRAM_MMU);
 
-_sram_base = DEFINED(_sram_base) ? _sram_base : 0x00000000;
-_sram_size = DEFINED(_sram_size) ? _sram_size : 16K;
-
-
-
-_irq_stack_size = DEFINED(_irq_stack_size) ? _irq_stack_size : 0x1000;
-_fiq_stack_size = DEFINED(_fiq_stack_size) ? _fiq_stack_size : 0x400;
-_abt_stack_size = DEFINED(_abt_stack_size) ? _abt_stack_size : 0x100;
-_svc_stack_size = DEFINED(_svc_stack_size) ? _svc_stack_size : 0x1000;
-
-
-
-/* Do we need any of these for elf?
-   __DYNAMIC = 0;    */
-
-SECTIONS
-{
-    .base :
-    {
-	
-	arm_exception_table = .;    
-	. += 64;
-    } > sdram
-   
-/*    } > sram*/
-
-	
-    .init          : 
-    { 
-        KEEP (*(.init))
-    } > sdram   /*=0*/
-
-    .text      :
-    {
-	_text_start = .;
-	 CREATE_OBJECT_SYMBOLS
-	*(.text) 
-	*(.text.*)
-
-        /*
-         * Special FreeBSD sysctl sections.
-         */
-        . = ALIGN (16);
-        __start_set_sysctl_set = .;
-        *(set_sysctl_*);
-        __stop_set_sysctl_set = ABSOLUTE(.);
-        *(set_domain_*);
-        *(set_pseudo_*);
-
-	/* .gnu.warning sections are handled specially by elf32.em.  */
-	*(.gnu.warning)
-	*(.gnu.linkonce.t*)
-	*(.glue_7)
-	*(.glue_7t)
-
-	/* I think these come from the ld docs: */	
-	___CTOR_LIST__ = .;
-	LONG((___CTOR_END__ - ___CTOR_LIST__) / 4 - 2)
-	*(.ctors)
-	LONG(0)
-	___CTOR_END__ = .;
-	___DTOR_LIST__ = .;
-	LONG((___DTOR_END__ - ___DTOR_LIST__) / 4 - 2)
-	*(.dtors)
-	LONG(0)
-	___DTOR_END__ = .;
-
-	_etext = .;
-	PROVIDE (etext = .);
-    } > sdram  
-
-    .fini      :
-    {
-        KEEP (*(.fini))
-    } > sdram  /*=0*/
-
-    .data :
-    { 
-        *(.data)
-        *(.data.*)
-        *(.gnu.linkonce.d*)
-        *(.jcr)
-        SORT(CONSTRUCTORS)
-        _edata = .;
-    } > sdram 
-
-    .eh_frame : { *(.eh_frame) } > sdram
-    .data1   : { *(.data1) } > sdram
-    .eh_frame : { *(.eh_frame) } > sdram
-    .gcc_except_table : { *(.gcc_except_table) } > sdram
-
-    .rodata :
-    {
-      *(.rodata)
-      *(.rodata.*)
-      *(.gnu.linkonce.r*)
-    } > sdram
-
-    .bss       :
-    {
-	_bss_start_ = .;
-	_clear_start = .;
-	*(.bss)
-	*(.bss.*)
-	*(.gnu.linkonce.b.*)
-	*(COMMON)
-	. = ALIGN(64);
-	_clear_end = .;
-
-	. = ALIGN (256);
-	_abt_stack = .;
-	. += _abt_stack_size;
-
-	. = ALIGN (256);
-	_irq_stack = .;
-	. += _irq_stack_size;
-
-	. = ALIGN (256);
-	_fiq_stack = .;
-	. += _fiq_stack_size;
-
-	. = ALIGN (256);
-	_svc_stack = .;
-	. += _svc_stack_size;
-
-	_bss_end_ = .;
-	_end = .;
-	__end = .;
-
-/* 
- * Ideally, the MMU's translation table would be in SRAM. But we need
- * 16K which is the size of SRAM. If we do the mapping right, the TLB
- * should be big enough that to hold all the translations that matter,
- * so keeping the table in SDRAM won't be a problem.
- */
-	. = ALIGN (16 * 1024);
-	  _ttbl_base = .;
-	  . += (16 * 1024);
-
-
-	. = ALIGN (1024);
-	_bss_free_start = .;
-	WorkAreaBase = .;
-
-    } > sdram
-
-
-/* Debugging stuff follows? */
-
-    /* Stabs debugging sections.  */
-    .stab 0 : { *(.stab) } 
-    .stabstr 0 : { *(.stabstr) } 
-    .stab.excl 0 : { *(.stab.excl) } 
-    .stab.exclstr 0 : { *(.stab.exclstr) }
-    .stab.index 0 : { *(.stab.index) } 
-    .stab.indexstr 0 : { *(.stab.indexstr) } 
-    .comment 0 : { *(.comment) }
-    /* DWARF debug sections.
-       Symbols in the DWARF debugging sections are relative to the beginning
-       of the section so we begin them at 0.  */
-    /* DWARF 1 */
-    .debug          0 : { *(.debug) }
-    .line           0 : { *(.line) }
-    /* GNU DWARF 1 extensions */
-    .debug_srcinfo  0 : { *(.debug_srcinfo) }
-    .debug_sfnames  0 : { *(.debug_sfnames) }
-    /* DWARF 1.1 and DWARF 2 */
-    .debug_aranges  0 : { *(.debug_aranges) }
-    .debug_pubnames 0 : { *(.debug_pubnames) }
-    /* DWARF 2 */
-    .debug_info     0 : { *(.debug_info) }
-    .debug_abbrev   0 : { *(.debug_abbrev) }
-    .debug_line     0 : { *(.debug_line) }
-    .debug_frame    0 : { *(.debug_frame) }
-    .debug_str      0 : { *(.debug_str) } 
-    .debug_loc      0 : { *(.debug_loc) }
-    .debug_macinfo  0 : { *(.debug_macinfo) } 
-    /* SGI/MIPS DWARF 2 extensions */
-    .debug_weaknames 0 : { *(.debug_weaknames) }
-    .debug_funcnames 0 : { *(.debug_funcnames) }
-    .debug_typenames 0 : { *(.debug_typenames) }
-    .debug_varnames  0 : { *(.debug_varnames) } 
-/*    .stack 0x80000 : { _stack = .; *(.stack) }*/
-  /* These must appear regardless of  .  */
-}
-
+INCLUDE linkcmds.armv4
