diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 5 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedgbmtypes.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 7 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 3 | ||||
| -rw-r--r-- | src/wrapped/wrappedgbm.c | 59 | ||||
| -rw-r--r-- | src/wrapped/wrappedgbm_private.h | 2 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibdrm_private.h | 26 |
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, |