about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2024-10-13 17:44:14 +0200
committerptitSeb <sebastien.chev@gmail.com>2024-10-13 17:44:14 +0200
commitd30488da87314d990408a6b4687baaf817ef8631 (patch)
tree96e3b59b075d638e715c61fad13c9db057d2517c /src
parent59ba2fc7ab69ecdc629a99ade965c436810c6cc8 (diff)
downloadbox64-d30488da87314d990408a6b4687baaf817ef8631.tar.gz
box64-d30488da87314d990408a6b4687baaf817ef8631.zip
[BOX32] Added some more 32bits wrapped function to libc
Diffstat (limited to 'src')
-rw-r--r--src/wrapped32/generated/functions_list.txt8
-rw-r--r--src/wrapped32/generated/wrappedlibctypes32.h7
-rw-r--r--src/wrapped32/generated/wrappedlibrttypes32.h4
-rw-r--r--src/wrapped32/generated/wrapper32.c2
-rw-r--r--src/wrapped32/generated/wrapper32.h1
-rwxr-xr-xsrc/wrapped32/wrappedlibc.c21
-rwxr-xr-xsrc/wrapped32/wrappedlibc_private.h16
-rwxr-xr-xsrc/wrapped32/wrappedlibrt_private.h1
8 files changed, 50 insertions, 10 deletions
diff --git a/src/wrapped32/generated/functions_list.txt b/src/wrapped32/generated/functions_list.txt
index 4e35a471..933b1175 100644
--- a/src/wrapped32/generated/functions_list.txt
+++ b/src/wrapped32/generated/functions_list.txt
@@ -1288,6 +1288,7 @@
 #() iFXpLiWwL -> iFXpLiWwL
 #() iFXpLuuii -> iFXpLuuii
 #() uFuippppp -> uFuippppp
+#() lFEipLpLL -> lFEipLpLL
 #() pFEpiiiiu -> pFEpiiiiu
 #() pFEpLiiii -> pFEpLiiii
 #() pFEpLiiiI -> pFEpLiiiI
@@ -1667,6 +1668,7 @@ wrappedlibc:
   - backtrace_symbols
 - pFpp:
   - __cmsg_nxthdr
+  - __gmtime_r
   - gmtime_r
   - localtime_r
 - SFpp:
@@ -1688,6 +1690,7 @@ wrappedlibc:
 - iFppp:
   - vswscanf
 - iFppV:
+  - __isoc99_fscanf
   - swscanf
 - iFpON:
 - iFSpp:
@@ -1749,6 +1752,9 @@ wrappedlibc:
   - gethostbyname_r
 - iFpppppp:
   - posix_spawn
+- lFipLpLL:
+  - process_vm_readv
+  - process_vm_writev
 - pFpLiiiI:
 - pFpLiiil:
 - iFpippppp:
@@ -2007,6 +2013,8 @@ wrappedlibpthread:
 - iFBh_ppp:
   - pthread_create
 wrappedlibrt:
+- iFuBLL_:
+  - __clock_gettime
 wrappedlibuuid:
 wrappedlibx11:
 - vFp:
diff --git a/src/wrapped32/generated/wrappedlibctypes32.h b/src/wrapped32/generated/wrappedlibctypes32.h
index 7ab82cf9..ae96c885 100644
--- a/src/wrapped32/generated/wrappedlibctypes32.h
+++ b/src/wrapped32/generated/wrappedlibctypes32.h
@@ -103,6 +103,7 @@ typedef int32_t (*iFpLiipV_t)(void*, uintptr_t, int32_t, int32_t, void*, ...);
 typedef int32_t (*iFpLiLpV_t)(void*, uintptr_t, int32_t, uintptr_t, void*, ...);
 typedef int32_t (*iFpppupp_t)(void*, void*, void*, uint32_t, void*, void*);
 typedef int32_t (*iFpppppp_t)(void*, void*, void*, void*, void*, void*);
+typedef intptr_t (*lFipLpLL_t)(int32_t, void*, uintptr_t, void*, uintptr_t, uintptr_t);
 typedef void* (*pFpLiiiI_t)(void*, uintptr_t, int32_t, int32_t, int32_t, int64_t);
 typedef void* (*pFpLiiil_t)(void*, uintptr_t, int32_t, int32_t, int32_t, intptr_t);
 typedef int32_t (*iFpippppp_t)(void*, int32_t, void*, void*, void*, void*, void*);
@@ -150,12 +151,14 @@ typedef int32_t (*iFpLiLppp_t)(void*, uintptr_t, int32_t, uintptr_t, void*, void
 	GO(signal, pFip_t) \
 	GO(backtrace_symbols, pFpi_t) \
 	GO(__cmsg_nxthdr, pFpp_t) \
+	GO(__gmtime_r, pFpp_t) \
 	GO(gmtime_r, pFpp_t) \
 	GO(localtime_r, pFpp_t) \
 	GO(vsyslog, vFipp_t) \
 	GO(_ITM_addUserCommitAction, vFpup_t) \
 	GO(posix_spawn_file_actions_adddup2, iFpii_t) \
 	GO(vswscanf, iFppp_t) \
+	GO(__isoc99_fscanf, iFppV_t) \
 	GO(swscanf, iFppV_t) \
 	GO(fscanf, iFSpV_t) \
 	GO(recvmsg, lFipi_t) \
@@ -176,6 +179,8 @@ typedef int32_t (*iFpLiLppp_t)(void*, uintptr_t, int32_t, uintptr_t, void*, void
 	GO(getgrnam_r, iFpppLp_t) \
 	GO(getpwnam_r, iFpppLp_t) \
 	GO(gethostbyname_r, iFpppupp_t) \
-	GO(posix_spawn, iFpppppp_t)
+	GO(posix_spawn, iFpppppp_t) \
+	GO(process_vm_readv, lFipLpLL_t) \
+	GO(process_vm_writev, lFipLpLL_t)
 
 #endif // __wrappedlibcTYPES32_H_
diff --git a/src/wrapped32/generated/wrappedlibrttypes32.h b/src/wrapped32/generated/wrappedlibrttypes32.h
index 97842443..5865fb25 100644
--- a/src/wrapped32/generated/wrappedlibrttypes32.h
+++ b/src/wrapped32/generated/wrappedlibrttypes32.h
@@ -11,7 +11,9 @@
 #define ADDED_FUNCTIONS() 
 #endif
 
+typedef int32_t (*iFuBLL__t)(uint32_t, struct_LL_t*);
 
-#define SUPER() ADDED_FUNCTIONS()
+#define SUPER() ADDED_FUNCTIONS() \
+	GO(__clock_gettime, iFuBLL__t)
 
 #endif // __wrappedlibrtTYPES32_H_
diff --git a/src/wrapped32/generated/wrapper32.c b/src/wrapped32/generated/wrapper32.c
index b3b8d5b1..57cc0741 100644
--- a/src/wrapped32/generated/wrapper32.c
+++ b/src/wrapped32/generated/wrapper32.c
@@ -1378,6 +1378,7 @@ typedef int32_t (*iFXpiipii_t)(void*, void*, int32_t, int32_t, void*, int32_t, i
 typedef int32_t (*iFXpLiWwL_t)(void*, void*, uintptr_t, int32_t, uint16_t, int16_t, uintptr_t);
 typedef int32_t (*iFXpLuuii_t)(void*, void*, uintptr_t, uint32_t, uint32_t, int32_t, int32_t);
 typedef uint32_t (*uFuippppp_t)(uint32_t, int32_t, void*, void*, void*, void*, void*);
+typedef intptr_t (*lFEipLpLL_t)(x64emu_t*, int32_t, void*, uintptr_t, void*, uintptr_t, uintptr_t);
 typedef void* (*pFEpiiiiu_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, int32_t, uint32_t);
 typedef void* (*pFEpLiiii_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int32_t);
 typedef void* (*pFEpLiiiI_t)(x64emu_t*, void*, uintptr_t, int32_t, int32_t, int32_t, int64_t);
@@ -2878,6 +2879,7 @@ void iFXpiipii_32(x64emu_t *emu, uintptr_t fcn) { iFXpiipii_t fn = (iFXpiipii_t)
 void iFXpLiWwL_32(x64emu_t *emu, uintptr_t fcn) { iFXpLiWwL_t fn = (iFXpLiWwL_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(int32_t, R_ESP + 16), from_ptri(uint16_t, R_ESP + 20), from_ptri(int16_t, R_ESP + 24), from_ulong(from_ptri(ulong_t, R_ESP + 28))); }
 void iFXpLuuii_32(x64emu_t *emu, uintptr_t fcn) { iFXpLuuii_t fn = (iFXpLuuii_t)fcn; R_EAX = fn(getDisplay(from_ptriv(R_ESP + 4)), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptri(uint32_t, R_ESP + 16), from_ptri(uint32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24), from_ptri(int32_t, R_ESP + 28)); }
 void uFuippppp_32(x64emu_t *emu, uintptr_t fcn) { uFuippppp_t fn = (uFuippppp_t)fcn; R_EAX = (uint32_t)fn(from_ptri(uint32_t, R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptriv(R_ESP + 12), from_ptriv(R_ESP + 16), from_ptriv(R_ESP + 20), from_ptriv(R_ESP + 24), from_ptriv(R_ESP + 28)); }
+void lFEipLpLL_32(x64emu_t *emu, uintptr_t fcn) { lFEipLpLL_t fn = (lFEipLpLL_t)fcn; R_EAX = to_long(fn(emu, from_ptri(int32_t, R_ESP + 4), from_ptriv(R_ESP + 8), from_ulong(from_ptri(ulong_t, R_ESP + 12)), from_ptriv(R_ESP + 16), from_ulong(from_ptri(ulong_t, R_ESP + 20)), from_ulong(from_ptri(ulong_t, R_ESP + 24)))); }
 void pFEpiiiiu_32(x64emu_t *emu, uintptr_t fcn) { pFEpiiiiu_t fn = (pFEpiiiiu_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ptri(int32_t, R_ESP + 8), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(uint32_t, R_ESP + 24))); }
 void pFEpLiiii_32(x64emu_t *emu, uintptr_t fcn) { pFEpLiiii_t fn = (pFEpLiiii_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int32_t, R_ESP + 24))); }
 void pFEpLiiiI_32(x64emu_t *emu, uintptr_t fcn) { pFEpLiiiI_t fn = (pFEpLiiiI_t)fcn; R_EAX = to_ptrv(fn(emu, from_ptriv(R_ESP + 4), from_ulong(from_ptri(ulong_t, R_ESP + 8)), from_ptri(int32_t, R_ESP + 12), from_ptri(int32_t, R_ESP + 16), from_ptri(int32_t, R_ESP + 20), from_ptri(int64_t, R_ESP + 24))); }
diff --git a/src/wrapped32/generated/wrapper32.h b/src/wrapped32/generated/wrapper32.h
index 450a2b7d..9922919d 100644
--- a/src/wrapped32/generated/wrapper32.h
+++ b/src/wrapped32/generated/wrapper32.h
@@ -1329,6 +1329,7 @@ void iFXpiipii_32(x64emu_t *emu, uintptr_t fnc);
 void iFXpLiWwL_32(x64emu_t *emu, uintptr_t fnc);
 void iFXpLuuii_32(x64emu_t *emu, uintptr_t fnc);
 void uFuippppp_32(x64emu_t *emu, uintptr_t fnc);
+void lFEipLpLL_32(x64emu_t *emu, uintptr_t fnc);
 void pFEpiiiiu_32(x64emu_t *emu, uintptr_t fnc);
 void pFEpLiiii_32(x64emu_t *emu, uintptr_t fnc);
 void pFEpLiiiI_32(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped32/wrappedlibc.c b/src/wrapped32/wrappedlibc.c
index cc1f42e3..935a88dc 100755
--- a/src/wrapped32/wrappedlibc.c
+++ b/src/wrapped32/wrappedlibc.c
@@ -2936,6 +2936,27 @@ EXPORT int my32_sysinfo(struct sysinfo_32* p)
     p->mem_unit = info.mem_unit;
     return ret;
 }
+
+EXPORT ssize_t my32_process_vm_readv(x64emu_t* emu, int pid, struct i386_iovec* local_iovec, size_t liovect, struct i386_iovec* remote_iovec, size_t riovect, unsigned long flags)
+{
+    struct iovec local_iovec_l[liovect];
+    struct iovec remove_iovec_l[riovect];
+    for (int i=0; i<liovect; ++i)
+        AlignIOV_32(local_iovec_l+i, local_iovec+i);
+    for (int i=0; i<riovect; ++i)
+        AlignIOV_32(remove_iovec_l+i, remote_iovec+i);
+    return process_vm_readv(pid, local_iovec_l, liovect, remove_iovec_l, riovect, flags);
+}
+EXPORT ssize_t my32_process_vm_writev(x64emu_t* emu, int pid, struct i386_iovec* local_iovec, size_t liovect, struct i386_iovec* remote_iovec, size_t riovect, unsigned long flags)
+{
+    struct iovec local_iovec_l[liovect];
+    struct iovec remove_iovec_l[riovect];
+    for (int i=0; i<liovect; ++i)
+        AlignIOV_32(local_iovec_l+i, local_iovec+i);
+    for (int i=0; i<riovect; ++i)
+        AlignIOV_32(remove_iovec_l+i, remote_iovec+i);
+    return process_vm_writev(pid, local_iovec_l, liovect, remove_iovec_l, riovect, flags);
+}
 #if 0
 #ifndef __NR_memfd_create
 #define MFD_CLOEXEC		    0x0001U
diff --git a/src/wrapped32/wrappedlibc_private.h b/src/wrapped32/wrappedlibc_private.h
index ea2b8c5d..e30a9ce9 100755
--- a/src/wrapped32/wrappedlibc_private.h
+++ b/src/wrapped32/wrappedlibc_private.h
@@ -625,7 +625,7 @@ GO(getxattr, iFpppL)
 //GO(globfree64, vFp)
 // glob_pattern_p   // Weak
 GOM(gmtime, pFEp)
-//GO(__gmtime_r, pFpp)
+GO2(__gmtime_r, pFpp, my32_gmtime_r)
 GOWM(gmtime_r, pFEpp)
 GO(gnu_dev_major, uFU)
 GO(gnu_dev_makedev, UFuu)
@@ -664,7 +664,7 @@ GO(iconv_open, pFpp)
 //GO(if_nametoindex, uFp)
 // imaxabs  // Weak
 GOWS(imaxdiv, pFpII) //%%
-//DATA(in6addr_any, 16)  // type R
+DATA(in6addr_any, 16)  // type R
 //DATA(in6addr_loopback, 16) // type R
 // inb  // Weak
 //GOW(index, pFpi)
@@ -888,7 +888,7 @@ GOW(isnanf, iFf)
 GO(__isnanf, iFf)
 // isnanl   // Weak
 // __isnanl
-//GOM(__isoc99_fscanf, iFEppV)  //%%
+GO2(__isoc99_fscanf, iFEppV, my32_fscanf)
 // __isoc99_fwscanf
 // __isoc99_scanf
 GOM(__isoc99_sscanf, iFEppV)  //%%
@@ -1393,7 +1393,7 @@ GO(renameat, iFipip)
 // re_set_registers // Weak
 GOW(re_set_syntax, LFL)
 // _res_hconf   // type B
-//GO(__res_iclose, vFpi)
+GO(__res_iclose, vFpi)
 GO(__res_init, iFv)
 //GO(__res_maybe_init, iFpi)
 //GO(__res_nclose, vFp)
@@ -1452,8 +1452,8 @@ GO(__sched_setscheduler, iFiip)
 GOW(sched_setscheduler, iFiip)
 GO(__sched_yield, iFv)
 GOW(sched_yield, iFv)
-GO(__secure_getenv, pFp)
-GO(secure_getenv, pFp)
+GO(__secure_getenv, tFp)
+GO(secure_getenv, tFp)
 // seed48
 // seed48_r // Weak
 //GO(seekdir, vFpi)
@@ -2131,8 +2131,8 @@ GOM(__fdelt_chk, LFL) //%%,noE
 GOM(getauxval, LFEL)  //%% implemented since glibc 2.16
 
 //GOM(prlimit64, lFpupp)       //%%,noE
-//GO(process_vm_readv, lFipLpLL)
-//GO(process_vm_writev, lFipLpLL)
+GOM(process_vm_readv, lFEipLpLL)
+GOM(process_vm_writev, lFEipLpLL)
 //GOM(reallocarray, pFpLL)     //%%,noE
 //GOM(__open_nocancel, iFEpOV) //%%
 //GO2(__read_nocancel, lFipL, read)
diff --git a/src/wrapped32/wrappedlibrt_private.h b/src/wrapped32/wrappedlibrt_private.h
index 2a34804d..ae7046d5 100755
--- a/src/wrapped32/wrappedlibrt_private.h
+++ b/src/wrapped32/wrappedlibrt_private.h
@@ -26,6 +26,7 @@ GO(aio_write64, iFp)
 GO(clock_getcpuclockid, iFup)
 GO(clock_getres, iFup)
 GO(clock_gettime, iFuBLL_)   // *timespec
+GO2(__clock_gettime, iFuBLL_, clock_gettime)
 GO(clock_nanosleep, iFuirLL_BLL_)
 //GO(clock_settime, iFup)
 // lio_listio