about summary refs log tree commit diff stats
path: root/src/wrapped
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-03-28 15:54:51 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-03-28 15:54:51 +0200
commitee561da549fb6f47f4b301466f2f751a085fa6d5 (patch)
tree5920f59269141614587511701bf5c9a30628f027 /src/wrapped
parentba1493857f16f8d8e9eec8f3d421e49784761e8d (diff)
downloadbox64-ee561da549fb6f47f4b301466f2f751a085fa6d5.tar.gz
box64-ee561da549fb6f47f4b301466f2f751a085fa6d5.zip
Added more libc and pthreads wrapped functions
Diffstat (limited to 'src/wrapped')
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrapper.c4
-rw-r--r--src/wrapped/generated/wrapper.h2
-rwxr-xr-xsrc/wrapped/wrappedlibc.c77
-rwxr-xr-xsrc/wrapped/wrappedlibc_private.h20
-rwxr-xr-xsrc/wrapped/wrappedlibpthread_private.h2
6 files changed, 27 insertions, 80 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 74c88e76..d3d4bfa1 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -130,6 +130,7 @@
 #() uFpL
 #() uFpp
 #() UFEp
+#() UFii
 #() UFUp
 #() UFpp
 #() fFif
@@ -612,6 +613,7 @@
 #() iFEpipV
 #() iFEpLpp
 #() iFEpLpV
+#() iFEppii
 #() iFEppip
 #() iFEppiV
 #() iFEpplp
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 1989b4d0..b718a606 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -163,6 +163,7 @@ typedef uint32_t (*uFpU_t)(void*, uint64_t);
 typedef uint32_t (*uFpL_t)(void*, uintptr_t);
 typedef uint32_t (*uFpp_t)(void*, void*);
 typedef uint64_t (*UFEp_t)(x64emu_t*, void*);
+typedef uint64_t (*UFii_t)(int32_t, int32_t);
 typedef uint64_t (*UFUp_t)(uint64_t, void*);
 typedef uint64_t (*UFpp_t)(void*, void*);
 typedef float (*fFif_t)(int32_t, float);
@@ -645,6 +646,7 @@ typedef int32_t (*iFEpipp_t)(x64emu_t*, void*, int32_t, void*, void*);
 typedef int32_t (*iFEpipV_t)(x64emu_t*, void*, int32_t, void*, void*);
 typedef int32_t (*iFEpLpp_t)(x64emu_t*, void*, uintptr_t, void*, void*);
 typedef int32_t (*iFEpLpV_t)(x64emu_t*, void*, uintptr_t, void*, void*);
+typedef int32_t (*iFEppii_t)(x64emu_t*, void*, void*, int32_t, int32_t);
 typedef int32_t (*iFEppip_t)(x64emu_t*, void*, void*, int32_t, void*);
 typedef int32_t (*iFEppiV_t)(x64emu_t*, void*, void*, int32_t, void*);
 typedef int32_t (*iFEpplp_t)(x64emu_t*, void*, void*, intptr_t, void*);
@@ -1243,6 +1245,7 @@ void uFpU(x64emu_t *emu, uintptr_t fcn) { uFpU_t fn = (uFpU_t)fcn; R_RAX=(uint32
 void uFpL(x64emu_t *emu, uintptr_t fcn) { uFpL_t fn = (uFpL_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uintptr_t)R_RSI); }
 void uFpp(x64emu_t *emu, uintptr_t fcn) { uFpp_t fn = (uFpp_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI); }
 void UFEp(x64emu_t *emu, uintptr_t fcn) { UFEp_t fn = (UFEp_t)fcn; R_RAX=fn(emu, (void*)R_RDI); }
+void UFii(x64emu_t *emu, uintptr_t fcn) { UFii_t fn = (UFii_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI); }
 void UFUp(x64emu_t *emu, uintptr_t fcn) { UFUp_t fn = (UFUp_t)fcn; R_RAX=fn((uint64_t)R_RDI, (void*)R_RSI); }
 void UFpp(x64emu_t *emu, uintptr_t fcn) { UFpp_t fn = (UFpp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI); }
 void fFif(x64emu_t *emu, uintptr_t fcn) { fFif_t fn = (fFif_t)fcn; emu->xmm[0].f[0]=fn((int32_t)R_RDI, emu->xmm[0].f[0]); }
@@ -1725,6 +1728,7 @@ void iFEpipp(x64emu_t *emu, uintptr_t fcn) { iFEpipp_t fn = (iFEpipp_t)fcn; R_RA
 void iFEpipV(x64emu_t *emu, uintptr_t fcn) { iFEpipV_t fn = (iFEpipV_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
 void iFEpLpp(x64emu_t *emu, uintptr_t fcn) { iFEpLpp_t fn = (iFEpLpp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)R_RCX); }
 void iFEpLpV(x64emu_t *emu, uintptr_t fcn) { iFEpLpV_t fn = (iFEpLpV_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); }
+void iFEppii(x64emu_t *emu, uintptr_t fcn) { iFEppii_t fn = (iFEppii_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); }
 void iFEppip(x64emu_t *emu, uintptr_t fcn) { iFEppip_t fn = (iFEppip_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); }
 void iFEppiV(x64emu_t *emu, uintptr_t fcn) { iFEppiV_t fn = (iFEppiV_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)(R_RSP + 8)); }
 void iFEpplp(x64emu_t *emu, uintptr_t fcn) { iFEpplp_t fn = (iFEpplp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index 405e8085..e574cd42 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -160,6 +160,7 @@ void uFpU(x64emu_t *emu, uintptr_t fnc);
 void uFpL(x64emu_t *emu, uintptr_t fnc);
 void uFpp(x64emu_t *emu, uintptr_t fnc);
 void UFEp(x64emu_t *emu, uintptr_t fnc);
+void UFii(x64emu_t *emu, uintptr_t fnc);
 void UFUp(x64emu_t *emu, uintptr_t fnc);
 void UFpp(x64emu_t *emu, uintptr_t fnc);
 void fFif(x64emu_t *emu, uintptr_t fnc);
@@ -642,6 +643,7 @@ void iFEpipp(x64emu_t *emu, uintptr_t fnc);
 void iFEpipV(x64emu_t *emu, uintptr_t fnc);
 void iFEpLpp(x64emu_t *emu, uintptr_t fnc);
 void iFEpLpV(x64emu_t *emu, uintptr_t fnc);
+void iFEppii(x64emu_t *emu, uintptr_t fnc);
 void iFEppip(x64emu_t *emu, uintptr_t fnc);
 void iFEppiV(x64emu_t *emu, uintptr_t fnc);
 void iFEpplp(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedlibc.c b/src/wrapped/wrappedlibc.c
index 529a2f70..a52fd186 100755
--- a/src/wrapped/wrappedlibc.c
+++ b/src/wrapped/wrappedlibc.c
@@ -159,40 +159,15 @@ static void* findcompareFct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for libc compare callback\n");
     return NULL;
 }
-#if 0
-
-// ftw
-#define GO(A)   \
-static uintptr_t my_ftw_fct_##A = 0;                                      \
-static int my_ftw_##A(void* fpath, void* sb, int flag)                       \
-{                                                                               \
-    return (int)RunFunction(my_context, my_ftw_fct_##A, 3, fpath, sb, flag);   \
-}
-SUPER()
-#undef GO
-static void* findftwFct(void* fct)
-{
-    if(!fct) return NULL;
-    void* p;
-    if((p = GetNativeFnc((uintptr_t)fct))) return p;
-    #define GO(A) if(my_ftw_fct_##A == (uintptr_t)fct) return my_ftw_##A;
-    SUPER()
-    #undef GO
-    #define GO(A) if(my_ftw_fct_##A == 0) {my_ftw_fct_##A = (uintptr_t)fct; return my_ftw_##A; }
-    SUPER()
-    #undef GO
-    printf_log(LOG_NONE, "Warning, no more slot for libc ftw callback\n");
-    return NULL;
-}
 
 // ftw64
 #define GO(A)   \
 static uintptr_t my_ftw64_fct_##A = 0;                      \
 static int my_ftw64_##A(void* fpath, void* sb, int flag)    \
 {                                                           \
-    struct i386_stat64 i386st;                              \
-    UnalignStat64(sb, &i386st);                             \
-    return (int)RunFunction(my_context, my_ftw64_fct_##A, 3, fpath, &i386st, flag);  \
+    struct x64_stat64 x64st;                                \
+    UnalignStat64(sb, &x64st);                              \
+    return (int)RunFunction(my_context, my_ftw64_fct_##A, 3, fpath, &x64st, flag);  \
 }
 SUPER()
 #undef GO
@@ -209,38 +184,14 @@ static void* findftw64Fct(void* fct)
     return NULL;
 }
 
-// nftw
-#define GO(A)   \
-static uintptr_t my_nftw_fct_##A = 0;                                   \
-static int my_nftw_##A(void* fpath, void* sb, int flag, void* ftwbuff)  \
-{                                                                       \
-    return (int)RunFunction(my_context, my_nftw_fct_##A, 4, fpath, sb, flag, ftwbuff);   \
-}
-SUPER()
-#undef GO
-static void* findnftwFct(void* fct)
-{
-    if(!fct) return NULL;
-    void* p;
-    if((p = GetNativeFnc((uintptr_t)fct))) return p;
-    #define GO(A) if(my_nftw_fct_##A == (uintptr_t)fct) return my_nftw_##A;
-    SUPER()
-    #undef GO
-    #define GO(A) if(my_nftw_fct_##A == 0) {my_nftw_fct_##A = (uintptr_t)fct; return my_nftw_##A; }
-    SUPER()
-    #undef GO
-    printf_log(LOG_NONE, "Warning, no more slot for libc nftw callback\n");
-    return NULL;
-}
-
 // nftw64
 #define GO(A)   \
 static uintptr_t my_nftw64_fct_##A = 0;                                     \
 static int my_nftw64_##A(void* fpath, void* sb, int flag, void* ftwbuff)    \
 {                                                                           \
-    struct i386_stat64 i386st;                                              \
-    UnalignStat64(sb, &i386st);                                             \
-    return (int)RunFunction(my_context, my_nftw64_fct_##A, 4, fpath, &i386st, flag, ftwbuff);   \
+    struct x64_stat64 x64st;                                              \
+    UnalignStat64(sb, &x64st);                                             \
+    return (int)RunFunction(my_context, my_nftw64_fct_##A, 4, fpath, &x64st, flag, ftwbuff);   \
 }
 SUPER()
 #undef GO
@@ -256,7 +207,7 @@ static void* findnftw64Fct(void* fct)
     printf_log(LOG_NONE, "Warning, no more slot for libc nftw64 callback\n");
     return NULL;
 }
-
+#if 0
 // globerr
 #define GO(A)   \
 static uintptr_t my_globerr_fct_##A = 0;                                        \
@@ -1495,18 +1446,6 @@ EXPORT int my_scandir64(x64emu_t *emu, void* dir, void* namelist, void* sel, voi
 {
     return scandir64(dir, namelist, findfilter64Fct(sel), findcompare64Fct(comp));
 }
-#if 0
-EXPORT int my_scandir(x64emu_t *emu, void* dir, void* namelist, void* sel, void* comp)
-{
-    static iFpppp_t f = NULL;
-    if(!f) {
-        library_t* lib = my_lib;
-        if(!lib) return 0;
-        f = (iFpppp_t)dlsym(lib->priv.w.lib, "scandir");
-    }
-
-    return f(dir, namelist, findfilter_dirFct(sel), findcompare_dirFct(comp));
-}
 
 EXPORT int my_ftw64(x64emu_t* emu, void* filename, void* func, int descriptors)
 {
@@ -1517,7 +1456,7 @@ EXPORT int32_t my_nftw64(x64emu_t* emu, void* pathname, void* B, int32_t nopenfd
 {
     return nftw64(pathname, findnftw64Fct(B), nopenfd, flags);
 }
-#endif
+
 EXPORT int32_t my_execv(x64emu_t* emu, const char* path, char* const argv[])
 {
     int self = isProcSelf(path, "exe");
diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h
index f8b93a1e..c4716f7e 100755
--- a/src/wrapped/wrappedlibc_private.h
+++ b/src/wrapped/wrappedlibc_private.h
@@ -200,7 +200,7 @@ GOM(__cxa_finalize, vFEp)
 GO(difftime, dFLL)
 //GO(dirfd, 
 GO(dirname, pFp)
-//GO(div, 
+GO(div, UFii)
 //GO(_dl_addr, 
 //GO(_dl_catch_error, 
 //GO(_dl_catch_exception, 
@@ -237,7 +237,7 @@ GOW(duplocale, pFp)
 //GOW(endmntent, 
 //GO(endnetent, 
 //GO(endnetgrent, 
-//GO(endprotoent, 
+GO(endprotoent, vFv)
 //GO(endpwent, 
 //GO(endrpcent, 
 //GO(endservent, 
@@ -443,7 +443,7 @@ GOW(ftruncate64, iFiI)
 //GO(fts_read, 
 //GO(fts_set, 
 //GO(ftw, 
-//GOW(ftw64, 
+GOM(ftw64, iFEppi)
 //GOW(funlockfile, 
 //GO(futimens, 
 //GOW(futimes, 
@@ -521,7 +521,7 @@ GO(getgrent, pFv)
 //GO(gethostid, 
 GOW(gethostname, iFpL)
 //GO(__gethostname_chk, 
-//GOW(getifaddrs, 
+GOW(getifaddrs, iFp)
 //GO(getipv4sourcefilter, 
 //GOW(getitimer, 
 //GO(get_kernel_syms, 
@@ -563,11 +563,11 @@ GO(getpid, uFv)
 //GO(getpmsg, 
 //GOW(getppid, 
 GOW(getpriority, iFii)
-//GO(getprotobyname, 
+GO(getprotobyname, pFp)
 //GO(getprotobyname_r, 
-//GO(getprotobynumber, 
+GO(getprotobynumber, pFp)
 //GO(getprotobynumber_r, 
-//GO(getprotoent, 
+GO(getprotoent, pFv)
 //GO(getprotoent_r, 
 //GOW(getpt, 
 //GO(getpublickey, 
@@ -1190,7 +1190,7 @@ GOM(mremap, pFEpLLiN) //weal
 //GO(msgget, 
 //GOW(msgrcv, 
 //GOW(msgsnd, 
-//GO(msync, 
+GO(msync, iFpLi)
 //GO(mtrace, 
 //GO(munlock, 
 //GO(munlockall, 
@@ -1209,7 +1209,7 @@ GOW(newlocale, pFipp)
 //GO(nfsservctl, 
 //GO(nftw, 
 //GO(nftw, 
-//GO(nftw64, 
+GOM(nftw64, iFEppii)
 //GO(nftw64, 
 //GOW(ngettext, 
 //GO(nice, 
@@ -1632,7 +1632,7 @@ GO(setlocale, pFip)
 //GOW(setpgid, 
 //GO(setpgrp, 
 GOW(setpriority, iFiii)
-//GO(setprotoent, 
+GO(setprotoent, vFi)
 //GO(setpwent, 
 //GOW(setregid, 
 //GOW(setresgid, 
diff --git a/src/wrapped/wrappedlibpthread_private.h b/src/wrapped/wrappedlibpthread_private.h
index f80d3e15..facad12d 100755
--- a/src/wrapped/wrappedlibpthread_private.h
+++ b/src/wrapped/wrappedlibpthread_private.h
@@ -72,7 +72,7 @@ GOM(pthread_cond_wait, iFEpp)
 GOM(pthread_create, iFEpppp)
 GO(pthread_detach, iFL)
 GO(pthread_equal, iFLL)
-//GOM(pthread_exit, vFEp)
+GOM(pthread_exit, vFEp)
 //GOM(pthread_getaffinity_np, iFEpup)
 GO(pthread_getattr_np, iFLp)
 //GO(pthread_getconcurrency, iFv)