summaryrefslogtreecommitdiffstats
path: root/c
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2010-12-03 10:52:07 +0000
committerSebastian Huber <sebastian.huber@embedded-brains.de>2010-12-03 10:52:07 +0000
commit8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9 (patch)
tree71142b1fe56c2ff37a16962ef89809741bf568e5 /c
parent2010-12-03 Sebastian Huber <sebastian.huber@embedded-brains.de> (diff)
downloadrtems-8d992be9c13b1dd4f9aafd5e2ea81ed87ecd7ce9.tar.bz2
2010-12-03 Sebastian Huber <sebastian.huber@embedded-brains.de>
* bsp_specs, start/start.S, startup/linkcmds: Use linker command base file.
Diffstat (limited to 'c')
-rw-r--r--c/src/lib/libbsp/arm/csb336/ChangeLog5
-rw-r--r--c/src/lib/libbsp/arm/csb336/bsp_specs3
-rw-r--r--c/src/lib/libbsp/arm/csb336/start/start.S26
-rw-r--r--c/src/lib/libbsp/arm/csb336/startup/linkcmds266
-rw-r--r--c/src/lib/libbsp/arm/edb7312/ChangeLog5
-rw-r--r--c/src/lib/libbsp/arm/edb7312/bsp_specs2
-rw-r--r--c/src/lib/libbsp/arm/edb7312/start/start.S86
-rw-r--r--c/src/lib/libbsp/arm/edb7312/startup/linkcmds261
-rw-r--r--c/src/lib/libbsp/arm/gdbarmsim/ChangeLog5
-rw-r--r--c/src/lib/libbsp/arm/gdbarmsim/bsp_specs3
-rw-r--r--c/src/lib/libbsp/arm/gdbarmsim/start/start.S5
-rw-r--r--c/src/lib/libbsp/arm/gdbarmsim/startup/linkcmds268
-rw-r--r--c/src/lib/libbsp/arm/gumstix/ChangeLog5
-rwxr-xr-xc/src/lib/libbsp/arm/gumstix/bsp_specs2
-rwxr-xr-xc/src/lib/libbsp/arm/gumstix/start/start.S21
-rwxr-xr-xc/src/lib/libbsp/arm/gumstix/startup/linkcmds239
16 files changed, 171 insertions, 1031 deletions
diff --git a/c/src/lib/libbsp/arm/csb336/ChangeLog b/c/src/lib/libbsp/arm/csb336/ChangeLog
index cc1ee0ad8b..1dec0ae9b0 100644
--- a/c/src/lib/libbsp/arm/csb336/ChangeLog
+++ b/c/src/lib/libbsp/arm/csb336/ChangeLog
@@ -1,3 +1,8 @@
+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>
* Makefile.am, preinstall.am: Added generic interrupt support modules.
diff --git a/c/src/lib/libbsp/arm/csb336/bsp_specs b/c/src/lib/libbsp/arm/csb336/bsp_specs
index eb3b69e60d..082653ad22 100644
--- a/c/src/lib/libbsp/arm/csb336/bsp_specs
+++ b/c/src/lib/libbsp/arm/csb336/bsp_specs
@@ -7,8 +7,7 @@
%{!nostdlib: %{qrtems: start.o%s crti.o%s crtbegin.o%s -e _start}}
*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 }
-
diff --git a/c/src/lib/libbsp/arm/csb336/start/start.S b/c/src/lib/libbsp/arm/csb336/start/start.S
index 9c3c4c8e37..544b1ca581 100644
--- a/c/src/lib/libbsp/arm/csb336/start/start.S
+++ b/c/src/lib/libbsp/arm/csb336/start/start.S
@@ -12,6 +12,8 @@
* $Id$
*/
+#include <bsp/linker-symbols.h>
+
/* Some standard definitions...*/
.equ PSR_MODE_USR, 0x10
.equ PSR_MODE_FIQ, 0x11
@@ -39,8 +41,8 @@ _start:
msr cpsr, r0
/* 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:
mov r2, #0
@@ -53,36 +55,36 @@ _bss_init:
/* Enter IRQ mode and set up the IRQ stack pointer */
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
/* Enter FIQ mode and set up the FIQ stack pointer */
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
/* Enter ABT mode and set up the ABT stack pointer */
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
/* Enter UNDEF mode and set up the UNDEF stack pointer */
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
/* Set up the SVC stack pointer last and stay in SVC mode */
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
diff --git a/c/src/lib/libbsp/arm/csb336/startup/linkcmds b/c/src/lib/libbsp/arm/csb336/startup/linkcmds
index 4c7b6fedfb..5619fedf04 100644
--- a/c/src/lib/libbsp/arm/csb336/startup/linkcmds
+++ b/c/src/lib/libbsp/arm/csb336/startup/linkcmds
@@ -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
-}
-
-/*
- * Declare some sizes.
- */
-
-/* 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;
-
-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 . */
+ SDRAM_MMU : ORIGIN = 0x08200000, LENGTH = 16k
+ SDRAM : ORIGIN = 0x08204000, LENGTH = 30M - 16k
+ NIRVANA : ORIGIN = 0, LENGTH = 0
}
+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);
+
+_ttbl_base = ORIGIN (SDRAM_MMU);
+
+INCLUDE linkcmds.armv4
diff --git a/c/src/lib/libbsp/arm/edb7312/ChangeLog b/c/src/lib/libbsp/arm/edb7312/ChangeLog
index 6bbd54379a..6978baefb0 100644
--- a/c/src/lib/libbsp/arm/edb7312/ChangeLog
+++ b/c/src/lib/libbsp/arm/edb7312/ChangeLog
@@ -1,3 +1,8 @@
+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>
* irq/bsp_irq_init.c: Removed file.
diff --git a/c/src/lib/libbsp/arm/edb7312/bsp_specs b/c/src/lib/libbsp/arm/edb7312/bsp_specs
index f079604d28..082653ad22 100644
--- a/c/src/lib/libbsp/arm/edb7312/bsp_specs
+++ b/c/src/lib/libbsp/arm/edb7312/bsp_specs
@@ -7,7 +7,7 @@
%{!nostdlib: %{qrtems: start.o%s crti.o%s crtbegin.o%s -e _start}}
*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 }
diff --git a/c/src/lib/libbsp/arm/edb7312/start/start.S b/c/src/lib/libbsp/arm/edb7312/start/start.S
index 11ffd80a9f..51c5b81a5c 100644
--- a/c/src/lib/libbsp/arm/edb7312/start/start.S
+++ b/c/src/lib/libbsp/arm/edb7312/start/start.S
@@ -1,6 +1,8 @@
/*
* Cirrus EP7312 Startup code
*
+ * Copyright (c) 2010 embedded brains GmbH.
+ *
* Copyright (c) 2002 by Jay Monkman <jtm@smoothsmoothie.com>
*
* Copyright (c) 2002 by Charlie Steader <charlies@poliac.com>
@@ -14,6 +16,8 @@
* $Id$
*/
+#include <bsp/linker-symbols.h>
+
/* Some standard definitions...*/
.equ Mode_USR, 0x10
@@ -28,50 +32,8 @@
.equ I_Bit, 0x80
.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
/*******************************************************
standard exception vectors table
@@ -118,38 +80,56 @@ IRQ_Handler:
FIQ_Handler:
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 */
/* Enter IRQ mode and set up the IRQ stack pointer */
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
/* Enter FIQ mode and set up the FIQ stack pointer */
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
/* Enter ABT mode and set up the ABT stack pointer */
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
/* Set up the SVC stack pointer last and stay in SVC mode */
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
diff --git a/c/src/lib/libbsp/arm/edb7312/startup/linkcmds b/c/src/lib/libbsp/arm/edb7312/startup/linkcmds
index 0f7ec01bbe..7b5a0b8553 100644
--- a/c/src/lib/libbsp/arm/edb7312/startup/linkcmds
+++ b/c/src/lib/libbsp/arm/edb7312/startup/linkcmds
@@ -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
-}
-
-/*
- * Declare some sizes.
- */
-
-_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0x00000000;
-_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 16M;
-
-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 . */
+ SDRAM : ORIGIN = 0x00000000, LENGTH = 16M
+ NIRVANA : ORIGIN = 0, LENGTH = 0
}
+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);
+
+bsp_vector_table_in_start_section = 1;
+
+INCLUDE linkcmds.armv4
diff --git a/c/src/lib/libbsp/arm/gdbarmsim/ChangeLog b/c/src/lib/libbsp/arm/gdbarmsim/ChangeLog
index 9b8ff71664..079f8108b6 100644
--- a/c/src/lib/libbsp/arm/gdbarmsim/ChangeLog
+++ b/c/src/lib/libbsp/arm/gdbarmsim/ChangeLog
@@ -1,3 +1,8 @@
+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>
* startup/syscalls.c: ifdef out _times since it conflicts with
diff --git a/c/src/lib/libbsp/arm/gdbarmsim/bsp_specs b/c/src/lib/libbsp/arm/gdbarmsim/bsp_specs
index eb3b69e60d..082653ad22 100644
--- a/c/src/lib/libbsp/arm/gdbarmsim/bsp_specs
+++ b/c/src/lib/libbsp/arm/gdbarmsim/bsp_specs
@@ -7,8 +7,7 @@
%{!nostdlib: %{qrtems: start.o%s crti.o%s crtbegin.o%s -e _start}}
*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 }
-
diff --git a/c/src/lib/libbsp/arm/gdbarmsim/start/start.S b/c/src/lib/libbsp/arm/gdbarmsim/start/start.S
index b2cf39b14d..544d9a3fdf 100644
--- a/c/src/lib/libbsp/arm/gdbarmsim/start/start.S
+++ b/c/src/lib/libbsp/arm/gdbarmsim/start/start.S
@@ -7,6 +7,7 @@
#include <newlib.h>
#include <bsp/swi.h>
+#include <bsp/linker-symbols.h>
/* ANSI concatenation macros. */
#define CONCAT(a, b) CONCAT2(a, b)
@@ -375,9 +376,9 @@ change_back:
.fnend
#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:
.word FUNCTION(_fini)
diff --git a/c/src/lib/libbsp/arm/gdbarmsim/startup/linkcmds b/c/src/lib/libbsp/arm/gdbarmsim/startup/linkcmds
index 1a20ec26aa..2b8e2153a2 100644
--- a/c/src/lib/libbsp/arm/gdbarmsim/startup/linkcmds
+++ b/c/src/lib/libbsp/arm/gdbarmsim/startup/linkcmds
@@ -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
-}
-
-/*
- * Declare some sizes.
- */
-
-/* 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 . */
+ RAM : ORIGIN = 0x00000000, LENGTH = 4M
+ NIRVANA : ORIGIN = 0, LENGTH = 0
}
+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);
+
+INCLUDE linkcmds.armv4
diff --git a/c/src/lib/libbsp/arm/gumstix/ChangeLog b/c/src/lib/libbsp/arm/gumstix/ChangeLog
index 5118fd4419..30077c5e5c 100644
--- a/c/src/lib/libbsp/arm/gumstix/ChangeLog
+++ b/c/src/lib/libbsp/arm/gumstix/ChangeLog
@@ -1,3 +1,8 @@
+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>
* rtl8019/rtl8019.c: Fix typo.
diff --git a/c/src/lib/libbsp/arm/gumstix/bsp_specs b/c/src/lib/libbsp/arm/gumstix/bsp_specs
index f079604d28..082653ad22 100755
--- a/c/src/lib/libbsp/arm/gumstix/bsp_specs
+++ b/c/src/lib/libbsp/arm/gumstix/bsp_specs
@@ -7,7 +7,7 @@
%{!nostdlib: %{qrtems: start.o%s crti.o%s crtbegin.o%s -e _start}}
*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 }
diff --git a/c/src/lib/libbsp/arm/gumstix/start/start.S b/c/src/lib/libbsp/arm/gumstix/start/start.S
index 7f2437a0f7..a60207de46 100755
--- a/c/src/lib/libbsp/arm/gumstix/start/start.S
+++ b/c/src/lib/libbsp/arm/gumstix/start/start.S
@@ -9,6 +9,7 @@
* $Id$
*/
+#include <bsp/linker-symbols.h>
/* Some standard definitions...*/
.equ PSR_MODE_USR, 0x10
@@ -38,8 +39,8 @@ _start:
/* 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:
mov r2, #0
@@ -51,29 +52,29 @@ _bss_init:
/* Enter IRQ mode and set up the IRQ stack pointer */
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
/* Enter FIQ mode and set up the FIQ stack pointer */
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
/* Enter ABT mode and set up the ABT stack pointer */
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
/* Set up the SVC stack pointer last and stay in SVC mode */
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
diff --git a/c/src/lib/libbsp/arm/gumstix/startup/linkcmds b/c/src/lib/libbsp/arm/gumstix/startup/linkcmds
index 5e9ea6a763..37a5318aa1 100755
--- a/c/src/lib/libbsp/arm/gumstix/startup/linkcmds
+++ b/c/src/lib/libbsp/arm/gumstix/startup/linkcmds
@@ -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
-}
-
-/*
- * Declare some sizes.
- */
-_sdram_base = DEFINED(_sdram_base) ? _sdram_base : 0xA0000000;
-_sdram_size = DEFINED(_sdram_size) ? _sdram_size : 64M;
-
-RamBase = _sdram_base;
-RamSize = _sdram_size;
-HeapSize = DEFINED(HeapSize) ? HeapSize : 0x0;
-
-_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 . */
+MEMORY {
+ SDRAM_MMU : ORIGIN = 0xa0000000, LENGTH = 16k
+ SDRAM : ORIGIN = 0xa0004000, LENGTH = 64M - 16k
+ SRAM : ORIGIN = 0x00000000, LENGTH = 16k
+ NIRVANA : ORIGIN = 0, LENGTH = 0
}
+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);
+
+_ttbl_base = ORIGIN (SDRAM_MMU);
+
+INCLUDE linkcmds.armv4