about summary refs log tree commit diff stats
path: root/src/wrapped
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2022-06-11 10:29:46 +0200
committerptitSeb <sebastien.chev@gmail.com>2022-06-11 10:29:46 +0200
commit72927195fdea77040513c284a91809b00a0cadd9 (patch)
tree8a0cc5d8cdbb1fb944c73db1f9c15d9c20b27799 /src/wrapped
parente29326d8d048b459b58272a0f88a776852dfe519 (diff)
downloadbox64-72927195fdea77040513c284a91809b00a0cadd9.tar.gz
box64-72927195fdea77040513c284a91809b00a0cadd9.zip
Added wrapped __wprintf_chk and wprintf (for #311)
Diffstat (limited to 'src/wrapped')
-rw-r--r--src/wrapped/generated/functions_list.txt4
-rw-r--r--src/wrapped/generated/wrappedlibctypes.h3
-rw-r--r--src/wrapped/generated/wrapper.c2
-rw-r--r--src/wrapped/generated/wrapper.h1
-rwxr-xr-xsrc/wrapped/wrappedlibc.c12
-rwxr-xr-xsrc/wrapped/wrappedlibc_private.h4
6 files changed, 24 insertions, 2 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 1b90b33d..323b9fc7 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -829,6 +829,7 @@
 #() UFppip
 #() UFpppp
 #() dFpppp
+#() lFEipV
 #() lFEpip
 #() lFEppL
 #() lFEppp
@@ -2723,6 +2724,7 @@ wrappedlibc:
   - execl
   - execlp
   - printf
+  - wprintf
 - iFpA:
   - vprintf
 - iFSp:
@@ -2802,6 +2804,8 @@ wrappedlibc:
   - __open
   - open
   - open64
+- lFipV:
+  - __wprintf_chk
 - lFppL:
   - readlink
 - pFpip:
diff --git a/src/wrapped/generated/wrappedlibctypes.h b/src/wrapped/generated/wrappedlibctypes.h
index 77974f8b..58d9dad6 100644
--- a/src/wrapped/generated/wrappedlibctypes.h
+++ b/src/wrapped/generated/wrappedlibctypes.h
@@ -48,6 +48,7 @@ typedef int64_t (*iFppp_t)(void*, void*, void*);
 typedef int64_t (*iFppV_t)(void*, void*, ...);
 typedef int64_t (*iFppA_t)(void*, void*, va_list);
 typedef int64_t (*iFpOu_t)(void*, int32_t, uint64_t);
+typedef intptr_t (*lFipV_t)(int64_t, void*, ...);
 typedef intptr_t (*lFppL_t)(void*, void*, uintptr_t);
 typedef void* (*pFpip_t)(void*, int64_t, void*);
 typedef void* (*pFppp_t)(void*, void*, void*);
@@ -128,6 +129,7 @@ typedef int64_t (*iFppipppp_t)(void*, void*, int64_t, void*, void*, void*, void*
 	GO(execl, iFpV_t) \
 	GO(execlp, iFpV_t) \
 	GO(printf, iFpV_t) \
+	GO(wprintf, iFpV_t) \
 	GO(vprintf, iFpA_t) \
 	GO(_IO_file_stat, iFSp_t) \
 	GO(__sysv_signal, pFip_t) \
@@ -188,6 +190,7 @@ typedef int64_t (*iFppipppp_t)(void*, void*, int64_t, void*, void*, void*, void*
 	GO(__open, iFpOu_t) \
 	GO(open, iFpOu_t) \
 	GO(open64, iFpOu_t) \
+	GO(__wprintf_chk, lFipV_t) \
 	GO(readlink, lFppL_t) \
 	GO(fts_open, pFpip_t) \
 	GO(tsearch, pFppp_t) \
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 81b81aa9..91192024 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -863,6 +863,7 @@ typedef uint64_t (*UFppii_t)(void*, void*, int64_t, int64_t);
 typedef uint64_t (*UFppip_t)(void*, void*, int64_t, void*);
 typedef uint64_t (*UFpppp_t)(void*, void*, void*, void*);
 typedef double (*dFpppp_t)(void*, void*, void*, void*);
+typedef intptr_t (*lFEipV_t)(x64emu_t*, int64_t, void*, void*);
 typedef intptr_t (*lFEpip_t)(x64emu_t*, void*, int64_t, void*);
 typedef intptr_t (*lFEppL_t)(x64emu_t*, void*, void*, uintptr_t);
 typedef intptr_t (*lFEppp_t)(x64emu_t*, void*, void*, void*);
@@ -2953,6 +2954,7 @@ void UFppii(x64emu_t *emu, uintptr_t fcn) { UFppii_t fn = (UFppii_t)fcn; R_RAX=f
 void UFppip(x64emu_t *emu, uintptr_t fcn) { UFppip_t fn = (UFppip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX); }
 void UFpppp(x64emu_t *emu, uintptr_t fcn) { UFpppp_t fn = (UFpppp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void dFpppp(x64emu_t *emu, uintptr_t fcn) { dFpppp_t fn = (dFpppp_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); }
+void lFEipV(x64emu_t *emu, uintptr_t fcn) { lFEipV_t fn = (lFEipV_t)fcn; R_RAX=(intptr_t)fn(emu, (int64_t)R_RDI, (void*)R_RSI, (void*)(R_RSP + 8)); }
 void lFEpip(x64emu_t *emu, uintptr_t fcn) { lFEpip_t fn = (lFEpip_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (void*)R_RDX); }
 void lFEppL(x64emu_t *emu, uintptr_t fcn) { lFEppL_t fn = (lFEppL_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); }
 void lFEppp(x64emu_t *emu, uintptr_t fcn) { lFEppp_t fn = (lFEppp_t)fcn; R_RAX=(intptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index f4c08cb0..97bd685a 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -862,6 +862,7 @@ void UFppii(x64emu_t *emu, uintptr_t fnc);
 void UFppip(x64emu_t *emu, uintptr_t fnc);
 void UFpppp(x64emu_t *emu, uintptr_t fnc);
 void dFpppp(x64emu_t *emu, uintptr_t fnc);
+void lFEipV(x64emu_t *emu, uintptr_t fnc);
 void lFEpip(x64emu_t *emu, uintptr_t fnc);
 void lFEppL(x64emu_t *emu, uintptr_t fnc);
 void lFEppp(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index f066b917..ae0c954f 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -557,6 +557,18 @@ EXPORT int my___printf_chk(x64emu_t *emu, int chk, void* fmt, void* b)
     PREPARE_VALIST;
     return vprintf((const char*)fmt, VARARGS);
 }
+EXPORT int my_wprintf(x64emu_t *emu, void* fmt, void* b) {
+    myStackAlignW(emu, (const char*)fmt, b, emu->scratch, R_EAX, 1);
+    PREPARE_VALIST;
+    return vwprintf((const wchar_t*)fmt, VARARGS);
+}
+EXPORT int my___wprintf_chk(x64emu_t *emu, int chk, void* fmt, void* b)
+{
+    (void)chk;
+    myStackAlignW(emu, (const char*)fmt, b, emu->scratch, R_EAX, 2);
+    PREPARE_VALIST;
+    return vwprintf((const wchar_t*)fmt, VARARGS);
+}
 
 EXPORT int my_vprintf(x64emu_t *emu, void* fmt, x64_va_list_t b) {
     (void)emu;
diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h
index a131ae6b..9d8ac439 100755
--- a/src/wrapped/wrappedlibc_private.h
+++ b/src/wrapped/wrappedlibc_private.h
@@ -2204,8 +2204,8 @@ GO(wmemset, pFpiL)
 GO(wordexp, iFppi)
 GO(wordfree, vFp)
 //GO(__woverflow, 
-//GO(wprintf, iFpV)
-//GO(__wprintf_chk, 
+GOM(wprintf, iFEpV)
+GOM(__wprintf_chk, lFEipV)
 GOW(__write, lFipL)
 GOW(write, lFipL)
 //GO(__write_nocancel,