From e0bb10420d4beab02c7ea3f757e9c57b040c6bf4 Mon Sep 17 00:00:00 2001 From: Tomasz Malesinski Date: Tue, 24 Jan 2006 23:32:53 +0000 Subject: added .vectors section for ARM git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8442 a1c6a512-1295-4272-9138-f99709370657 --- firmware/app.lds | 37 +++++++++++++++++++++++++++++++------ firmware/crt0.S | 17 ++++++++++------- 2 files changed, 41 insertions(+), 13 deletions(-) (limited to 'firmware') diff --git a/firmware/app.lds b/firmware/app.lds index feff264d39..d49949930d 100644 --- a/firmware/app.lds +++ b/firmware/app.lds @@ -128,8 +128,8 @@ _pluginbuf = 0; #define IRAMSIZE 0xc000 #elif CONFIG_CPU==PNX0101 #define DRAMORIG 0x24000000 + STUBOFFSET -#define IRAMORIG 0x400100 -#define IRAMSIZE 0x7f00 +#define IRAMORIG 0x400000 +#define IRAMSIZE 0x8000 #else #define DRAMORIG 0x09000000 + STUBOFFSET #define IRAMORIG 0x0f000000 @@ -150,6 +150,7 @@ MEMORY SECTIONS { +#ifndef CPU_ARM .vectors : { loadaddress = .; @@ -162,6 +163,12 @@ SECTIONS .text : { +#else + .text : + { + loadaddress = .; + _loadaddress = .; +#endif . = ALIGN(0x200); *(.init.text) *(.text*) @@ -193,7 +200,6 @@ SECTIONS *(.data*) . = ALIGN(0x4); _dataend = .; - _iramcopy = .; } > DRAM /DISCARD/ : @@ -201,14 +207,31 @@ SECTIONS *(.eh_frame) } - .iram IRAMORIG : AT ( _iramcopy) +#ifdef CPU_ARM + .vectors 0x0 : + { + _vectorsstart = .; + *(.vectors); + _vectorsend = .; + } AT> DRAM + + _vectorscopy = LOADADDR(.vectors); +#endif + +#if CONFIG_CPU==PNX0101 + .iram IRAMORIG + SIZEOF(.vectors) : +#else + .iram IRAMORIG : +#endif { _iramstart = .; *(.icode) *(.irodata) *(.idata) _iramend = .; - } > IRAM + } > IRAM AT> DRAM + + _iramcopy = LOADADDR(.iram); .ibss (NOLOAD) : { @@ -238,8 +261,10 @@ SECTIONS } > DRAM #endif -#if defined(CPU_COLDFIRE) || defined(CPU_ARM) +#if defined(CPU_COLDFIRE) .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram): +#elif defined(CPU_ARM) + .bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors): #else .bss : #endif diff --git a/firmware/crt0.S b/firmware/crt0.S index 54432c9731..ba478f804c 100644 --- a/firmware/crt0.S +++ b/firmware/crt0.S @@ -84,13 +84,13 @@ remap_end: #endif /* PP specific */ /* Copy exception handler code to address 0 */ - ldr r2, =ecode - ldr r3, =ecodeend - mov r4, #0 + ldr r2, =_vectorsstart + ldr r3, =_vectorsend + ldr r4, =_vectorscopy 1: cmp r3, r2 - ldrhi r5, [r2], #4 - strhi r5, [r4], #4 + ldrhi r5, [r4], #4 + strhi r5, [r2], #4 bhi 1b /* Zero out IBSS */ @@ -259,7 +259,7 @@ boot_table: /* main() should never return */ /* Exception handlers. Will be copied to address 0 after memory remapping */ -ecode: + .section .vectors,"aw" ldr pc, [pc, #24] ldr pc, [pc, #24] ldr pc, [pc, #24] @@ -270,6 +270,8 @@ ecode: ldr pc, [pc, #24] /* Exception vectors */ + .global vectors +vectors: .word start .word undef_instr_handler .word software_int_handler @@ -278,7 +280,8 @@ ecode: .word reserved_handler .word irq_handler .word fiq_handler -ecodeend: + + .text .global irq .global UIE -- cgit v1.2.3