about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorptitSeb <sebastien.chev@gmail.com>2021-04-08 17:06:49 +0200
committerptitSeb <sebastien.chev@gmail.com>2021-04-08 17:06:49 +0200
commitb038dd5c9d13be1f6e0e8355b1d503e0a9d45f3b (patch)
treea933fca235a65567a2aba482a1cb94a2de151e36 /src
parent2681a6db0d28e44ddd8012fcc63d1ff79af727ef (diff)
downloadbox64-b038dd5c9d13be1f6e0e8355b1d503e0a9d45f3b.tar.gz
box64-b038dd5c9d13be1f6e0e8355b1d503e0a9d45f3b.zip
Added a libvorbisfile wrapped function and fixed another one (structure as argument are in the stack, always)
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt2
-rw-r--r--src/wrapped/generated/wrapper.c4
-rw-r--r--src/wrapped/generated/wrapper.h4
-rwxr-xr-xsrc/wrapped/wrappedvorbisfile.c24
-rwxr-xr-xsrc/wrapped/wrappedvorbisfile_private.h4
5 files changed, 25 insertions, 13 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 9195cba4..b9612157 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -1080,7 +1080,7 @@
 #() vFpplpppppi
 #() vFpppppippp
 #() iFEpiiiiipi
-#() iFEpppipppp
+#() iFEppplPPPP
 #() iFiiiiiiiip
 #() iFiiiipiiip
 #() iFipiipippi
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index dcefdbc7..f429faf7 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -1113,7 +1113,7 @@ typedef void (*vFppiiipiii_t)(void*, void*, int64_t, int64_t, int64_t, void*, in
 typedef void (*vFpplpppppi_t)(void*, void*, intptr_t, void*, void*, void*, void*, void*, int64_t);
 typedef void (*vFpppppippp_t)(void*, void*, void*, void*, void*, int64_t, void*, void*, void*);
 typedef int64_t (*iFEpiiiiipi_t)(x64emu_t*, void*, int64_t, int64_t, int64_t, int64_t, int64_t, void*, int64_t);
-typedef int64_t (*iFEpppipppp_t)(x64emu_t*, void*, void*, void*, int64_t, void*, void*, void*, void*);
+typedef int64_t (*iFEppplPPPP_t)(x64emu_t*, void*, void*, void*, intptr_t, void*, void*, void*, void*);
 typedef int64_t (*iFiiiiiiiip_t)(int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, int64_t, void*);
 typedef int64_t (*iFiiiipiiip_t)(int64_t, int64_t, int64_t, int64_t, void*, int64_t, int64_t, int64_t, void*);
 typedef int64_t (*iFipiipippi_t)(int64_t, void*, int64_t, int64_t, void*, int64_t, void*, void*, int64_t);
@@ -2304,7 +2304,7 @@ void vFppiiipiii(x64emu_t *emu, uintptr_t fcn) { vFppiiipiii_t fn = (vFppiiipiii
 void vFpplpppppi(x64emu_t *emu, uintptr_t fcn) { vFpplpppppi_t fn = (vFpplpppppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int64_t*)(R_RSP + 24)); }
 void vFpppppippp(x64emu_t *emu, uintptr_t fcn) { vFpppppippp_t fn = (vFpppppippp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int64_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24)); }
 void iFEpiiiiipi(x64emu_t *emu, uintptr_t fcn) { iFEpiiiiipi_t fn = (iFEpiiiiipi_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(void**)(R_RSP + 8), *(int64_t*)(R_RSP + 16)); }
-void iFEpppipppp(x64emu_t *emu, uintptr_t fcn) { iFEpppipppp_t fn = (iFEpppipppp_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int64_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); }
+void iFEppplPPPP(x64emu_t *emu, uintptr_t fcn) { iFEppplPPPP_t fn = (iFEppplPPPP_t)fcn; R_RAX=(int64_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (intptr_t)R_RCX, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32)); }
 void iFiiiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiiiip_t fn = (iFiiiiiiiip_t)fcn; R_RAX=(int64_t)fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9, *(int64_t*)(R_RSP + 8), *(int64_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); }
 void iFiiiipiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiipiiip_t fn = (iFiiiipiiip_t)fcn; R_RAX=(int64_t)fn((int64_t)R_RDI, (int64_t)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (void*)R_R8, (int64_t)R_R9, *(int64_t*)(R_RSP + 8), *(int64_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); }
 void iFipiipippi(x64emu_t *emu, uintptr_t fcn) { iFipiipippi_t fn = (iFipiipippi_t)fcn; R_RAX=(int64_t)fn((int64_t)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (void*)R_R8, (int64_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int64_t*)(R_RSP + 24)); }
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index e465ad06..c291cf73 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -14,7 +14,7 @@ typedef void (*wrapper_t)(x64emu_t* emu, uintptr_t fnc);
 // list of defined wrapper
 // v = void, i = int32, u = uint32, U/I= (u)int64
 // l = signed long, L = unsigned long (long is an int with the size of a pointer)
-// p = pointer, P = callback
+// p = pointer, P = void* on the stack
 // f = float, d = double, D = long double, K = fake long double
 // V = vaargs, E = current x86emu struct, e = ref to current x86emu struct
 // 0 = constant 0, 1 = constant 1
@@ -1110,7 +1110,7 @@ void vFppiiipiii(x64emu_t *emu, uintptr_t fnc);
 void vFpplpppppi(x64emu_t *emu, uintptr_t fnc);
 void vFpppppippp(x64emu_t *emu, uintptr_t fnc);
 void iFEpiiiiipi(x64emu_t *emu, uintptr_t fnc);
-void iFEpppipppp(x64emu_t *emu, uintptr_t fnc);
+void iFEppplPPPP(x64emu_t *emu, uintptr_t fnc);
 void iFiiiiiiiip(x64emu_t *emu, uintptr_t fnc);
 void iFiiiipiiip(x64emu_t *emu, uintptr_t fnc);
 void iFipiipippi(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedvorbisfile.c b/src/wrapped/wrappedvorbisfile.c
index 36dfb357..b342523e 100755
--- a/src/wrapped/wrappedvorbisfile.c
+++ b/src/wrapped/wrappedvorbisfile.c
@@ -28,18 +28,20 @@ typedef struct {
   long   (*tell_func)  (void *datasource);
 } ov_callbacks;
 
-typedef int32_t (*iFpppiC_t)(void*, void*, void*, int32_t, ov_callbacks);
+typedef int32_t (*iFppplC_t)(void*, void*, void*, long, ov_callbacks);
 
 typedef struct vorbisfile_my_s {
     // functions
-    iFpppiC_t       ov_open_callbacks;
+    iFppplC_t       ov_open_callbacks;
+    iFppplC_t       ov_test_callbacks;
 } vorbisfile_my_t;
 
 void* getVorbisfileMy(library_t* lib)
 {
     vorbisfile_my_t* my = (vorbisfile_my_t*)calloc(1, sizeof(vorbisfile_my_t));
     #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A);
-    GO(ov_open_callbacks, iFpppiC_t)
+    GO(ov_open_callbacks, iFppplC_t)
+    GO(ov_test_callbacks, iFppplC_t)
     #undef GO
     return my;
 }
@@ -49,8 +51,6 @@ void freeVorbisfileMy(void* lib)
     //vorbisfile_my_t *my = (vorbisfile_my_t *)lib;
 }
 
-int32_t my_ov_open_callbacks(x64emu_t* emu, void* datasource, void* vf, void* initial, int32_t ibytes, void* read, void* seek, void* close, void* tell);
-
 #define CUSTOM_INIT \
     box64->vorbisfile = lib;\
     lib->priv.w.p2 = getVorbisfileMy(lib);
@@ -163,7 +163,7 @@ static void* findtellFct(void* fct)
 
 #undef SUPER
 
-EXPORT int32_t my_ov_open_callbacks(x64emu_t* emu, void* datasource, void* vf, void* initial, int32_t ibytes, void* read_fnc, void* seek_fnc, void* close_fnc, void* tell_fnc)
+EXPORT int32_t my_ov_open_callbacks(x64emu_t* emu, void* datasource, void* vf, void* initial, long ibytes, void* read_fnc, void* seek_fnc, void* close_fnc, void* tell_fnc)
 {
     vorbisfile_my_t* my = (vorbisfile_my_t*)emu->context->vorbisfile->priv.w.p2;
     ov_callbacks cbs = {0};
@@ -174,3 +174,15 @@ EXPORT int32_t my_ov_open_callbacks(x64emu_t* emu, void* datasource, void* vf, v
     int32_t ret =  my->ov_open_callbacks(datasource, vf, initial, ibytes, cbs);
     return ret;
 }
+
+EXPORT int32_t my_ov_test_callbacks(x64emu_t* emu, void* datasource, void* vf, void* initial, long ibytes, void* read_fnc, void* seek_fnc, void* close_fnc, void* tell_fnc)
+{
+    vorbisfile_my_t* my = (vorbisfile_my_t*)emu->context->vorbisfile->priv.w.p2;
+    ov_callbacks cbs = {0};
+    cbs.read_func = findreadFct(read_fnc);
+    cbs.seek_func = findseekFct(seek_fnc);
+    cbs.close_func = findcloseFct(close_fnc);
+    cbs.tell_func = findtellFct(tell_fnc);
+    int32_t ret =  my->ov_test_callbacks(datasource, vf, initial, ibytes, cbs);
+    return ret;
+}
diff --git a/src/wrapped/wrappedvorbisfile_private.h b/src/wrapped/wrappedvorbisfile_private.h
index 5cf5602c..d7213240 100755
--- a/src/wrapped/wrappedvorbisfile_private.h
+++ b/src/wrapped/wrappedvorbisfile_private.h
@@ -12,7 +12,7 @@ GO(ov_halfrate,iFpi)
 GO(ov_halfrate_p,iFp)
 GO(ov_info,pFpi)
 GO(ov_open,iFpppi)
-GOM(ov_open_callbacks,iFEpppipppp)  // ov_callbaks are not "by ref", so all 4 values are just on the stack
+GOM(ov_open_callbacks,iFEppplPPPP)  // ov_callbacks are not "by ref", so all 4 values are just on the stack
 GO(ov_pcm_seek,iFpI)
 GO(ov_pcm_seek_lap,iFpi)
 GO(ov_pcm_seek_page,iFpI)
@@ -30,7 +30,7 @@ GO(ov_seekable,iFp)
 GO(ov_serialnumber,iFpi)
 GO(ov_streams,iFp)
 GO(ov_test,iFpppi)
-//GO(ov_test_callbacks,iFpppiS)
+GOM(ov_test_callbacks,iFEppplPPPP)
 GO(ov_test_open,iFp)
 GO(ov_time_seek,iFpd)
 GO(ov_time_seek_lap,iFpd)