diff --git a/Makefile.arm9 b/Makefile.arm9 index e4e7d83..aef99b6 100644 --- a/Makefile.arm9 +++ b/Makefile.arm9 @@ -36,7 +36,7 @@ -Wshadow -Wsign-conversion -fstrict-overflow -Wstrict-overflow=5 \ -Wswitch-default -Wundef -CFLAGS := -Wall $(DBGWARM) -fstrict-aliasing -Wstrict-aliasing -std=c11 -Og \ +CFLAGS := -Wall $(DBGWARM) -fstrict-aliasing -Wstrict-aliasing -std=c11 -O2 -flto \ -mword-relocations -fomit-frame-pointer -ffast-math -ffunction-sections $(ARCH) CFLAGS += $(INCLUDE) -DARM9 $(DEFINES) diff --git a/source/arm9/console.c b/source/arm9/console.c index 244bce6..9e1a5bc 100644 --- a/source/arm9/console.c +++ b/source/arm9/console.c @@ -175,6 +175,18 @@ } } +// strchr() function with length check from WinterMute +//--------------------------------------------------------------------------------- +static char *strnchr(const char *p, char c, size_t n) { +//--------------------------------------------------------------------------------- + if (!p) return 0; + + while (n-- > 0) { + if (*p == c) return ((char *)p); + p++; + } + return 0; +} //--------------------------------------------------------------------------------- ssize_t con_write(struct _reent *r,int fd,const char *ptr, size_t len) { @@ -335,7 +347,7 @@ parameter = 0; if (escapelen == 1) { consumed = 1; - } else if (strchr(escapeseq,';')) { + } else if (strnchr(escapeseq,';',escapelen)) { sscanf(escapeseq,"%d;%n", ¶meter, &consumed); } else { sscanf(escapeseq,"%dm%n", ¶meter, &consumed); diff --git a/source/arm9/start.s b/source/arm9/start.s index 7fb1938..b1642a7 100644 --- a/source/arm9/start.s +++ b/source/arm9/start.s @@ -43,11 +43,8 @@ msr cpsr_c, #0xDF @ Disable all interrupts, system mode bl setupSystem - @ Set sp and clear stack + @ Set sp ldr sp, =A9_STUB_ENTRY - ldr r0, =A9_HEAP_END - mov r1, sp - bl clearMem @ Clear bss section ldr r0, =__bss_start__ @@ -69,7 +66,7 @@ b . -@ void clearMem(void *start, void *end) +@ void clearMem(u32 *start, u32 *end) clearMem: sub r1, r1, r0 mov r2, #0