support autoload but only clear bss.

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/twl_wrapsdk/trunk@79 4ee2a332-4b2b-5046-8439-1ba90f034370
This commit is contained in:
nakasima 2007-05-24 00:59:15 +00:00
parent af7ab065d2
commit 938bfc08d0
6 changed files with 37 additions and 19 deletions

View File

@ -59,6 +59,7 @@ SDK_WEAK_SYMBOL asm void _start( void )
str r12, [r12, #REG_IME_OFFSET] str r12, [r12, #REG_IME_OFFSET]
//---- clear memory //---- clear memory
#if 0
// private-WRAM (except program area) // private-WRAM (except program area)
ldr r1, =SDK_STATIC_BSS_END // r1= max(__bss_end__, #HW_PRV_WRAM) ldr r1, =SDK_STATIC_BSS_END // r1= max(__bss_end__, #HW_PRV_WRAM)
mov r0, #HW_PRV_WRAM mov r0, #HW_PRV_WRAM
@ -71,6 +72,7 @@ SDK_WEAK_SYMBOL asm void _start( void )
cmp r1, r2 cmp r1, r2
stmltia r1!, {r0} stmltia r1!, {r0}
blt @1 blt @1
#endif
//---- initialize stack pointer //---- initialize stack pointer
// SVC mode // SVC mode
@ -109,7 +111,7 @@ SDK_WEAK_SYMBOL asm void _start( void )
bmi @1_2 bmi @1_2
//---- load autoload block and initialize bss //---- load autoload block and initialize bss
// bl do_autoload bl do_autoload
//---- fill static static bss with 0 //---- fill static static bss with 0
ldr r0, =_start_ModuleParams ldr r0, =_start_ModuleParams
@ -184,11 +186,15 @@ static asm void do_autoload( void )
ldr dest, [infop], #4 // dest ldr dest, [infop], #4 // dest
ldr dest_size, [infop], #4 // size ldr dest_size, [infop], #4 // size
add dest_end, dest, dest_size // dest_end add dest_end, dest, dest_size // dest_end
#if 1
mov dest, dest_end
#else
@1: @1:
cmp dest, dest_end cmp dest, dest_end
ldrmi tmp, [src], #4 // [dest++] <- [src++] ldrmi tmp, [src], #4 // [dest++] <- [src++]
strmi tmp, [dest], #4 strmi tmp, [dest], #4
bmi @1 bmi @1
#endif
//---- fill bss with 0 //---- fill bss with 0
ldr dest_size, [infop], #4 // size ldr dest_size, [infop], #4 // size

View File

@ -123,7 +123,7 @@ SDK_WEAK_SYMBOL asm void _start( void )
ldr r1, =_start_ModuleParams ldr r1, =_start_ModuleParams
ldr r0, [r1, #20] // r0 = bottom of compressed data ldr r0, [r1, #20] // r0 = bottom of compressed data
bl MIi_UncompressBackward bl MIi_UncompressBackward
// bl do_autoload bl do_autoload
//---- fill static static bss with 0 //---- fill static static bss with 0
ldr r0, =_start_ModuleParams ldr r0, =_start_ModuleParams
@ -352,11 +352,15 @@ static asm void do_autoload( void )
ldr tmp, [infop], #4 // size ldr tmp, [infop], #4 // size
add dest_end, dest_begin, tmp // dest_end add dest_end, dest_begin, tmp // dest_end
mov dest, dest_begin // dest working pointer mov dest, dest_begin // dest working pointer
#if 1
mov dest, dest_end
#else
@1: @1:
cmp dest, dest_end cmp dest, dest_end
ldrmi tmp, [src], #4 // [dest++] <- [src++] ldrmi tmp, [src], #4 // [dest++] <- [src++]
strmi tmp, [dest], #4 strmi tmp, [dest], #4
bmi @1 bmi @1
#endif
//---- fill bss with 0 //---- fill bss with 0
ldr tmp, [infop], #4 // size ldr tmp, [infop], #4 // size

View File

@ -19,7 +19,7 @@ MEMORY
<FOREACH.AUTOLOADS> <FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX> <AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS> <END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX> # binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX> <PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX> <PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
@ -311,15 +311,17 @@ SECTIONS
############################ AUTOLOAD_INFO ########################## ############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO: .binary.AUTOLOAD_INFO:
{ {
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS> <FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>); WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE; WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS> <END.AUTOLOADS>
} > binary.AUTOLOAD_INFO SDK_AUTOLOAD_LIST_END = .;
} >> <STATIC.NAME> # > binary.AUTOLOAD_INFO
SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; # SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); # SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
############################ OVERLAYS ############################### ############################ OVERLAYS ###############################

View File

@ -19,7 +19,7 @@ MEMORY
<FOREACH.AUTOLOADS> <FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX> <AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS> <END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX> # binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX> <PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX> <PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
@ -311,15 +311,17 @@ SECTIONS
############################ AUTOLOAD_INFO ########################## ############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO: .binary.AUTOLOAD_INFO:
{ {
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS> <FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>); WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE; WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS> <END.AUTOLOADS>
SDK_AUTOLOAD_LIST_END = .;
} > binary.AUTOLOAD_INFO } > binary.AUTOLOAD_INFO
SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; # SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); # SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
############################ OVERLAYS ############################### ############################ OVERLAYS ###############################

View File

@ -19,8 +19,8 @@ MEMORY
<FOREACH.AUTOLOADS> <FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX> <AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS> <END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX> # binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX> # binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX> <PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX> <PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
@ -348,15 +348,17 @@ SECTIONS
############################ AUTOLOAD_INFO ########################## ############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO: .binary.AUTOLOAD_INFO:
{ {
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS> <FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>); WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE; WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS> <END.AUTOLOADS>
} > binary.AUTOLOAD_INFO SDK_AUTOLOAD_LIST_END = .;
} >> <STATIC.NAME> # > binary.AUTOLOAD_INFO
SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; # SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); # SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
############################ STATIC_FOOTER ########################## ############################ STATIC_FOOTER ##########################
@ -365,7 +367,7 @@ SECTIONS
WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE
WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>); WRITEW _start_ModuleParams - ADDR(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST WRITEW 0; # NO DIGEST
} > binary.STATIC_FOOTER } >> <STATIC.NAME> # > binary.STATIC_FOOTER
############################ OVERLAYS ############################### ############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>; SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;

View File

@ -19,8 +19,8 @@ MEMORY
<FOREACH.AUTOLOADS> <FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX> <AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # >> <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS> <END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX> # binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX> # binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX> <PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX> <PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
@ -348,15 +348,17 @@ SECTIONS
############################ AUTOLOAD_INFO ########################## ############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO: .binary.AUTOLOAD_INFO:
{ {
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS> <FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>); WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE; WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE; WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS> <END.AUTOLOADS>
SDK_AUTOLOAD_LIST_END = .;
} > binary.AUTOLOAD_INFO } > binary.AUTOLOAD_INFO
SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; # SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE;
SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); # SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO);
############################ STATIC_FOOTER ########################## ############################ STATIC_FOOTER ##########################