1
0
Fork 0
forked from len0rd/rockbox

added .vectors section for ARM

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8442 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Tomasz Malesinski 2006-01-24 23:32:53 +00:00
parent 27c616fd46
commit e0bb10420d
2 changed files with 41 additions and 13 deletions

View file

@ -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

View file

@ -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