about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt5
-rw-r--r--src/wrapped/generated/wrappedgbmtypes.h4
-rw-r--r--src/wrapped/generated/wrapper.c7
-rw-r--r--src/wrapped/generated/wrapper.h3
-rw-r--r--src/wrapped/wrappedgbm.c59
-rw-r--r--src/wrapped/wrappedgbm_private.h2
-rw-r--r--src/wrapped/wrappedlibdrm_private.h26
7 files changed, 90 insertions, 16 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt
index 62d6f008..034e575e 100644
--- a/src/wrapped/generated/functions_list.txt
+++ b/src/wrapped/generated/functions_list.txt
@@ -1438,6 +1438,7 @@
 #() iFiiupp
 #() iFiipup
 #() iFiuuuu
+#() iFiuuup
 #() iFiuLip
 #() iFillLL
 #() iFipiii
@@ -2434,6 +2435,8 @@
 #() iFEppppipp
 #() iFiiiiiiip
 #() iFiiupiupi
+#() iFiuuCCuup
+#() iFiuuuupip
 #() iFipippppp
 #() iFuuuuuuuu
 #() iFdiippppL
@@ -3136,6 +3139,8 @@ wrappedfreetype:
 - iFpuuLppp:
   - FTC_Manager_New
 wrappedgbm:
+- vFppp:
+  - gbm_bo_set_user_data
 wrappedgconf2:
 - uFpppppp:
   - gconf_client_notify_add
diff --git a/src/wrapped/generated/wrappedgbmtypes.h b/src/wrapped/generated/wrappedgbmtypes.h
index 7ebdb5b0..5c392636 100644
--- a/src/wrapped/generated/wrappedgbmtypes.h
+++ b/src/wrapped/generated/wrappedgbmtypes.h
@@ -11,7 +11,9 @@
 #define ADDED_FUNCTIONS() 
 #endif
 
+typedef void (*vFppp_t)(void*, void*, void*);
 
-#define SUPER() ADDED_FUNCTIONS()
+#define SUPER() ADDED_FUNCTIONS() \
+	GO(gbm_bo_set_user_data, vFppp_t)
 
 #endif // __wrappedgbmTYPES_H_
diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c
index 4f866a8a..bfb15101 100644
--- a/src/wrapped/generated/wrapper.c
+++ b/src/wrapped/generated/wrapper.c
@@ -1474,6 +1474,7 @@ typedef int32_t (*iFiiipp_t)(int32_t, int32_t, int32_t, void*, void*);
 typedef int32_t (*iFiiupp_t)(int32_t, int32_t, uint32_t, void*, void*);
 typedef int32_t (*iFiipup_t)(int32_t, int32_t, void*, uint32_t, void*);
 typedef int32_t (*iFiuuuu_t)(int32_t, uint32_t, uint32_t, uint32_t, uint32_t);
+typedef int32_t (*iFiuuup_t)(int32_t, uint32_t, uint32_t, uint32_t, void*);
 typedef int32_t (*iFiuLip_t)(int32_t, uint32_t, uintptr_t, int32_t, void*);
 typedef int32_t (*iFillLL_t)(int32_t, intptr_t, intptr_t, uintptr_t, uintptr_t);
 typedef int32_t (*iFipiii_t)(int32_t, void*, int32_t, int32_t, int32_t);
@@ -2470,6 +2471,8 @@ typedef int32_t (*iFEppipppp_t)(x64emu_t*, void*, void*, int32_t, void*, void*,
 typedef int32_t (*iFEppppipp_t)(x64emu_t*, void*, void*, void*, void*, int32_t, void*, void*);
 typedef int32_t (*iFiiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*);
 typedef int32_t (*iFiiupiupi_t)(int32_t, int32_t, uint32_t, void*, int32_t, uint32_t, void*, int32_t);
+typedef int32_t (*iFiuuCCuup_t)(int32_t, uint32_t, uint32_t, uint8_t, uint8_t, uint32_t, uint32_t, void*);
+typedef int32_t (*iFiuuuupip_t)(int32_t, uint32_t, uint32_t, uint32_t, uint32_t, void*, int32_t, void*);
 typedef int32_t (*iFipippppp_t)(int32_t, void*, int32_t, void*, void*, void*, void*, void*);
 typedef int32_t (*iFuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t, uint32_t);
 typedef int32_t (*iFdiippppL_t)(double, int32_t, int32_t, void*, void*, void*, void*, uintptr_t);
@@ -4378,6 +4381,7 @@ void iFiiipp(x64emu_t *emu, uintptr_t fcn) { iFiiipp_t fn = (iFiiipp_t)fcn; R_RA
 void iFiiupp(x64emu_t *emu, uintptr_t fcn) { iFiiupp_t fn = (iFiiupp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); }
 void iFiipup(x64emu_t *emu, uintptr_t fcn) { iFiipup_t fn = (iFiipup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8); }
 void iFiuuuu(x64emu_t *emu, uintptr_t fcn) { iFiuuuu_t fn = (iFiuuuu_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); }
+void iFiuuup(x64emu_t *emu, uintptr_t fcn) { iFiuuup_t fn = (iFiuuup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); }
 void iFiuLip(x64emu_t *emu, uintptr_t fcn) { iFiuLip_t fn = (iFiuLip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); }
 void iFillLL(x64emu_t *emu, uintptr_t fcn) { iFillLL_t fn = (iFillLL_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); }
 void iFipiii(x64emu_t *emu, uintptr_t fcn) { iFipiii_t fn = (iFipiii_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); }
@@ -5374,6 +5378,8 @@ void iFEppipppp(x64emu_t *emu, uintptr_t fcn) { iFEppipppp_t fn = (iFEppipppp_t)
 void iFEppppipp(x64emu_t *emu, uintptr_t fcn) { iFEppppipp_t fn = (iFEppppipp_t)fcn; R_RAX=(int32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); }
 void iFiiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiiip_t fn = (iFiiiiiiip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void iFiiupiupi(x64emu_t *emu, uintptr_t fcn) { iFiiupiupi_t fn = (iFiiupiupi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uint32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); }
+void iFiuuCCuup(x64emu_t *emu, uintptr_t fcn) { iFiuuCCuup_t fn = (iFiuuCCuup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); }
+void iFiuuuupip(x64emu_t *emu, uintptr_t fcn) { iFiuuuupip_t fn = (iFiuuuupip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void iFipippppp(x64emu_t *emu, uintptr_t fcn) { iFipippppp_t fn = (iFipippppp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); }
 void iFuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { iFuuuuuuuu_t fn = (iFuuuuuuuu_t)fcn; R_RAX=(int32_t)fn((uint32_t)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(uint32_t*)(R_RSP + 16)); }
 void iFdiippppL(x64emu_t *emu, uintptr_t fcn) { iFdiippppL_t fn = (iFdiippppL_t)fcn; R_RAX=(int32_t)fn(emu->xmm[0].d[0], (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(uintptr_t*)(R_RSP + 8)); }
@@ -7058,6 +7064,7 @@ int isSimpleWrapper(wrapper_t fun) {
 	if (fun == &iFiiupp) return 1;
 	if (fun == &iFiipup) return 1;
 	if (fun == &iFiuuuu) return 1;
+	if (fun == &iFiuuup) return 1;
 	if (fun == &iFiuLip) return 1;
 	if (fun == &iFillLL) return 1;
 	if (fun == &iFipiii) return 1;
diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h
index 9983dc46..8a77380b 100644
--- a/src/wrapped/generated/wrapper.h
+++ b/src/wrapped/generated/wrapper.h
@@ -1475,6 +1475,7 @@ void iFiiipp(x64emu_t *emu, uintptr_t fnc);
 void iFiiupp(x64emu_t *emu, uintptr_t fnc);
 void iFiipup(x64emu_t *emu, uintptr_t fnc);
 void iFiuuuu(x64emu_t *emu, uintptr_t fnc);
+void iFiuuup(x64emu_t *emu, uintptr_t fnc);
 void iFiuLip(x64emu_t *emu, uintptr_t fnc);
 void iFillLL(x64emu_t *emu, uintptr_t fnc);
 void iFipiii(x64emu_t *emu, uintptr_t fnc);
@@ -2471,6 +2472,8 @@ void iFEppipppp(x64emu_t *emu, uintptr_t fnc);
 void iFEppppipp(x64emu_t *emu, uintptr_t fnc);
 void iFiiiiiiip(x64emu_t *emu, uintptr_t fnc);
 void iFiiupiupi(x64emu_t *emu, uintptr_t fnc);
+void iFiuuCCuup(x64emu_t *emu, uintptr_t fnc);
+void iFiuuuupip(x64emu_t *emu, uintptr_t fnc);
 void iFipippppp(x64emu_t *emu, uintptr_t fnc);
 void iFuuuuuuuu(x64emu_t *emu, uintptr_t fnc);
 void iFdiippppL(x64emu_t *emu, uintptr_t fnc);
diff --git a/src/wrapped/wrappedgbm.c b/src/wrapped/wrappedgbm.c
index 39f000ad..c060c10b 100644
--- a/src/wrapped/wrappedgbm.c
+++ b/src/wrapped/wrappedgbm.c
@@ -6,13 +6,70 @@
 
 #include "wrappedlibs.h"
 
+#include "debug.h"
 #include "wrapper.h"
 #include "bridge.h"
 #include "librarian/library_private.h"
 #include "x64emu.h"
+#include "emu/x64emu_private.h"
+#include "callback.h"
+#include "librarian.h"
+#include "box64context.h"
+#include "emu/x64emu_private.h"
+#include "myalign.h"
 
 const char* gbmName = "libgbm.so.1";
 #define LIBNAME gbm
 
-#include "wrappedlib_init.h"
+#define ADDED_FUNCTIONS()                   \
+
+#include "generated/wrappedgbmtypes.h"
+
+#include "wrappercallback.h"
+
+// utility functions
+#define SUPER() \
+GO(0)   \
+GO(1)   \
+GO(2)   \
+GO(3)   \
+GO(4)
+
+// destroy_user_data
+#define GO(A)   \
+static uintptr_t my_destroy_user_data_fct_##A = 0;              \
+static void my_destroy_user_data_##A(void* a, void* b)          \
+{                                                               \
+    RunFunctionFmt(my_destroy_user_data_fct_##A, "pp", a, b);   \
+}
+SUPER()
+#undef GO
+static void* find_destroy_user_data_Fct(void* fct)
+{
+    if(!fct) return NULL;
+    void* p;
+    if((p = GetNativeFnc((uintptr_t)fct))) return p;
+    #define GO(A) if(my_destroy_user_data_fct_##A == (uintptr_t)fct) return my_destroy_user_data_##A;
+    SUPER()
+    #undef GO
+    #define GO(A) if(my_destroy_user_data_fct_##A == 0) {my_destroy_user_data_fct_##A = (uintptr_t)fct; return my_destroy_user_data_##A; }
+    SUPER()
+    #undef GO
+    printf_log(LOG_NONE, "Warning, no more slot for libgbm destroy_user_data callback\n");
+    return NULL;
+}
 
+#undef SUPER
+
+EXPORT void my_gbm_bo_set_user_data(x64emu_t* emu, void* bo, void* data, void *f)
+{
+    my->gbm_bo_set_user_data(bo, data, find_destroy_user_data_Fct(f));
+}
+
+#define CUSTOM_INIT \
+    getMy(lib);
+
+#define CUSTOM_FINI \
+    freeMy();
+
+#include "wrappedlib_init.h"
diff --git a/src/wrapped/wrappedgbm_private.h b/src/wrapped/wrappedgbm_private.h
index c5bd5133..30200dc7 100644
--- a/src/wrapped/wrappedgbm_private.h
+++ b/src/wrapped/wrappedgbm_private.h
@@ -23,7 +23,7 @@ GO(gbm_bo_get_user_data, pFp)
 GO(gbm_bo_get_width, uFp)
 GO(gbm_bo_import, pFpupu)
 GO(gbm_bo_map, pFpuuuuupp)
-//GOM(gbm_bo_set_user_data, vFEppB)
+GOM(gbm_bo_set_user_data, vFEppp)
 GO(gbm_bo_unmap, vFpp)
 GO(gbm_bo_write, iFppL)
 GO(gbm_create_device, pFi)
diff --git a/src/wrapped/wrappedlibdrm_private.h b/src/wrapped/wrappedlibdrm_private.h
index a368b882..130e592a 100644
--- a/src/wrapped/wrappedlibdrm_private.h
+++ b/src/wrapped/wrappedlibdrm_private.h
@@ -78,7 +78,7 @@ GO(drmGetNodeTypeFromFd, iFi)
 //GO(drmGetReservedContextList, 
 //GO(drmGetStats, 
 GO(drmGetVersion, pFi)
-//GO(drmHandleEvent, 
+GO(drmHandleEvent, iFip)    //warning, p is *drmHandleEvent that needs wrapping, plenty of function pointer there
 GO(drmHashCreate, pFv)
 GO(drmHashDelete, iFpL)
 GO(drmHashDestroy, iFp)
@@ -92,7 +92,7 @@ GO(drmIoctl, iFiLp)
 //GO(drmMap, 
 //GO(drmMapBufs, 
 //GO(drmMarkBufs, 
-//GO(drmModeAddFB, 
+GO(drmModeAddFB, iFiuuCCuup)
 //GO(drmModeAddFB2, 
 //GO(drmModeAddFB2WithModifiers, 
 //GO(drmModeAtomicAddProperty, 
@@ -112,9 +112,9 @@ GO(drmIoctl, iFiLp)
 //GO(drmModeDestroyPropertyBlob, 
 //GO(drmModeDetachMode, 
 //GO(drmModeDirtyFB, 
-//GO(drmModeFreeConnector, 
-//GO(drmModeFreeCrtc, 
-//GO(drmModeFreeEncoder, 
+GO(drmModeFreeConnector, vFp)
+GO(drmModeFreeCrtc, vFp)
+GO(drmModeFreeEncoder, vFp)
 //GO(drmModeFreeFB, 
 //GO(drmModeFreeModeInfo, 
 //GO(drmModeFreeObjectProperties, 
@@ -122,27 +122,27 @@ GO(drmIoctl, iFiLp)
 //GO(drmModeFreePlaneResources, 
 //GO(drmModeFreeProperty, 
 //GO(drmModeFreePropertyBlob, 
-//GO(drmModeFreeResources, 
-//GO(drmModeGetConnector, 
+GO(drmModeFreeResources, vFp)
+GO(drmModeGetConnector, pFiu)
 //GO(drmModeGetConnectorCurrent, 
-//GO(drmModeGetCrtc, 
-//GO(drmModeGetEncoder, 
+GO(drmModeGetCrtc, pFiu)
+GO(drmModeGetEncoder, pFiu)
 //GO(drmModeGetFB, 
 //GO(drmModeGetLease, 
 //GO(drmModeGetPlane, 
 //GO(drmModeGetPlaneResources, 
 //GO(drmModeGetProperty, 
 //GO(drmModeGetPropertyBlob, 
-//GO(drmModeGetResources, 
+GO(drmModeGetResources, pFi)
 //GO(drmModeListLessees, 
 //GO(drmModeMoveCursor, 
 //GO(drmModeObjectGetProperties, 
 //GO(drmModeObjectSetProperty, 
-//GO(drmModePageFlip, 
+GO(drmModePageFlip, iFiuuup)
 //GO(drmModePageFlipTarget, 
 //GO(drmModeRevokeLease, 
-//GO(drmModeRmFB, 
-//GO(drmModeSetCrtc, 
+GO(drmModeRmFB, iFiu)
+GO(drmModeSetCrtc, iFiuuuupip)
 //GO(drmModeSetCursor, 
 //GO(drmModeSetCursor2, 
 //GO(drmModeSetPlane,