stdio: Pass the function to call to the v*scanf asm wrapper
This unifies the wrappers, allowing to share them as on x86.
Signed-off-by: Martin Storsjö <martin@martin.st>
diff --git a/mingw-w64-crt/stdio/vsscanf.c b/mingw-w64-crt/stdio/vsscanf.c
index 7c72b6c..995657d 100644
--- a/mingw-w64-crt/stdio/vsscanf.c
+++ b/mingw-w64-crt/stdio/vsscanf.c
@@ -19,11 +19,9 @@
#elif defined (__arm__) || defined (_ARM_)
-#define QUOTE_(x) #x
-#define QUOTE(x) QUOTE_(x)
-
int __ms_vsscanf_internal (const char * __restrict__,
- const char * __restrict__, va_list);
+ const char * __restrict__, va_list,
+ int (*func)(const char * __restrict__, const char * __restrict__, ...));
asm("\t.text\n"
"\t.align 2\n"
"\t.thumb_func\n"
@@ -31,6 +29,7 @@
"__ms_vsscanf_internal:\n\t"
"push {r4-r7, lr}\n\t"
"sub sp, sp, #128\n\t"
+ "mov r12, r3\n\t"
"mov r4, sp\n\t"
"ldr r5, [r2], #4\n\t"
@@ -44,7 +43,7 @@
"mov r2, r5\n\t"
"mov r3, r6\n\t"
- "bl " QUOTE(__MINGW_USYMBOL(sscanf)) "\n\t"
+ "blx r12\n\t"
"add sp, sp, #128\n\t"
"pop {r4-r7, pc}");
@@ -56,10 +55,9 @@
int ret;
#if defined(_AMD64_) || defined(__x86_64__) || \
- defined(_X86_) || defined(__i386__)
+ defined(_X86_) || defined(__i386__) || \
+ defined(_ARM_) || defined(__arm__)
ret = __ms_vsscanf_internal (s, format, arg, sscanf);
-#elif defined (_ARM_) || defined (__arm__)
- ret = __ms_vsscanf_internal (s, format, arg);
#else
#error "unknown platform"
#endif