mirror of
https://github.com/rvtr/twl_wrapsdk.git
synced 2025-10-31 06:11:10 -04:00
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:
parent
af7ab065d2
commit
938bfc08d0
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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 ###############################
|
||||||
|
|||||||
@ -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 ###############################
|
||||||
|
|||||||
@ -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>;
|
||||||
|
|||||||
@ -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 ##########################
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user