diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2024-06-12 19:41:06 +0200 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2024-06-12 19:41:06 +0200 |
| commit | 8a85acff326bcef6cb42d2eae510d9094cf3fe4a (patch) | |
| tree | d26e94dd1c9cc79ea90d9791a93fe5c2924a5af9 /src/wrapped | |
| parent | b450ea24a287ed99caef527f293758f834cb8e33 (diff) | |
| download | box64-8a85acff326bcef6cb42d2eae510d9094cf3fe4a.tar.gz box64-8a85acff326bcef6cb42d2eae510d9094cf3fe4a.zip | |
Better wrapping for libwayland-client, removed the x64 versions of the libs, using wrapped one instead
Diffstat (limited to 'src/wrapped')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 9 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedwaylandclienttypes.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 11 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 5 | ||||
| -rw-r--r-- | src/wrapped/wrappedwaylandclient.c | 492 | ||||
| -rw-r--r-- | src/wrapped/wrappedwaylandclient_private.h | 14 |
6 files changed, 492 insertions, 43 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index db00a975..24aaa4e8 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -1738,6 +1738,7 @@ #() pFpuuup #() pFpuupp #() pFpuLpp +#() pFpuppu #() pFpuppp #() pFpUdii #() pFpfffi @@ -2937,6 +2938,7 @@ #() vFffffffffffff #() vFpipppiiiipii #() vFpippppiiiipi +#() vFpupppppppppp #() vFppiiiiddddii #() vFppiiuuuiupup #() vFppiipppiiiii @@ -3020,13 +3022,16 @@ #() iFpppppppppppppppppp #() LFpppppppppppppppppp #() pFippppppppppppppppp +#() pFpupppppppppppppppp #() vFpiiiiiiiiiiiiiiiiii #() uFbWWWCCCCCCCCWCCCCCC #() pFiiiippppppppppppppp #() pFpippppppppppppppppp +#() pFpupupppppppppppppppp #() iFpppppppppppppppppppppp #() uFippuuuuiiiiuuiiiiiiiipp #() vFpppppppppppppppppppppppp +#() pFpupuupppppppppppppppppppp #() iFpppppppppppppppppppppppppppppppppp #defined(HAVE_LD80BITS) DFD #defined(HAVE_LD80BITS) DFY @@ -5649,6 +5654,10 @@ wrappedvulkan: - vkGetPhysicalDeviceSparseImageFormatProperties - vFpiiiupupup: - vkCmdPipelineBarrier +wrappedwaylandclient: +- iFppp: + - wl_proxy_add_listener +wrappedwaylandcursor: wrappedwaylandegl: wrappedxinerama: wrappedxkbcommon: diff --git a/src/wrapped/generated/wrappedwaylandclienttypes.h b/src/wrapped/generated/wrappedwaylandclienttypes.h index bb9e3ff5..fe0f4d8e 100644 --- a/src/wrapped/generated/wrappedwaylandclienttypes.h +++ b/src/wrapped/generated/wrappedwaylandclienttypes.h @@ -11,7 +11,9 @@ #define ADDED_FUNCTIONS() #endif +typedef int32_t (*iFppp_t)(void*, void*, void*); -#define SUPER() ADDED_FUNCTIONS() +#define SUPER() ADDED_FUNCTIONS() \ + GO(wl_proxy_add_listener, iFppp_t) #endif // __wrappedwaylandclientTYPES_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index f92897b5..37fd5864 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -1776,6 +1776,7 @@ typedef void* (*pFpuuuu_t)(void*, uint32_t, uint32_t, uint32_t, uint32_t); typedef void* (*pFpuuup_t)(void*, uint32_t, uint32_t, uint32_t, void*); typedef void* (*pFpuupp_t)(void*, uint32_t, uint32_t, void*, void*); typedef void* (*pFpuLpp_t)(void*, uint32_t, uintptr_t, void*, void*); +typedef void* (*pFpuppu_t)(void*, uint32_t, void*, void*, uint32_t); typedef void* (*pFpuppp_t)(void*, uint32_t, void*, void*, void*); typedef void* (*pFpUdii_t)(void*, uint64_t, double, int32_t, int32_t); typedef void* (*pFpfffi_t)(void*, float, float, float, int32_t); @@ -2975,6 +2976,7 @@ typedef void (*vFuuuuuuuuuuuu_t)(uint32_t, uint32_t, uint32_t, uint32_t, uint32_ typedef void (*vFffffffffffff_t)(float, float, float, float, float, float, float, float, float, float, float, float); typedef void (*vFpipppiiiipii_t)(void*, int32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t); typedef void (*vFpippppiiiipi_t)(void*, int32_t, void*, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, void*, int32_t); +typedef void (*vFpupppppppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void (*vFppiiiiddddii_t)(void*, void*, int32_t, int32_t, int32_t, int32_t, double, double, double, double, int32_t, int32_t); typedef void (*vFppiiuuuiupup_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t, uint32_t, int32_t, uint32_t, void*, uint32_t, void*); typedef void (*vFppiipppiiiii_t)(void*, void*, int32_t, int32_t, void*, void*, void*, int32_t, int32_t, int32_t, int32_t, int32_t); @@ -3058,13 +3060,16 @@ typedef void (*vFpppipppppppppppppp_t)(void*, void*, void*, int32_t, void*, void typedef int32_t (*iFpppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef uintptr_t (*LFpppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFippppppppppppppppp_t)(int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFpupppppppppppppppp_t)(void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void (*vFpiiiiiiiiiiiiiiiiii_t)(void*, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef uint32_t (*uFbWWWCCCCCCCCWCCCCCC_t)(void*, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint16_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t); typedef void* (*pFiiiippppppppppppppp_t)(int32_t, int32_t, int32_t, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef void* (*pFpippppppppppppppppp_t)(void*, int32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFpupupppppppppppppppp_t)(void*, uint32_t, void*, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef uint32_t (*uFippuuuuiiiiuuiiiiiiiipp_t)(int32_t, void*, void*, uint32_t, uint32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, uint32_t, uint32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*, void*); typedef void (*vFpppppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); +typedef void* (*pFpupuupppppppppppppppppppp_t)(void*, uint32_t, void*, uint32_t, uint32_t, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpppppppppppppppppppppppppppppppppp_t)(void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*, void*); #if defined(HAVE_LD80BITS) @@ -4855,6 +4860,7 @@ void pFpuuuu(x64emu_t *emu, uintptr_t fcn) { pFpuuuu_t fn = (pFpuuuu_t)fcn; R_RA void pFpuuup(x64emu_t *emu, uintptr_t fcn) { pFpuuup_t fn = (pFpuuup_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void pFpuupp(x64emu_t *emu, uintptr_t fcn) { pFpuupp_t fn = (pFpuupp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFpuLpp(x64emu_t *emu, uintptr_t fcn) { pFpuLpp_t fn = (pFpuLpp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void pFpuppu(x64emu_t *emu, uintptr_t fcn) { pFpuppu_t fn = (pFpuppu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } void pFpuppp(x64emu_t *emu, uintptr_t fcn) { pFpuppp_t fn = (pFpuppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFpUdii(x64emu_t *emu, uintptr_t fcn) { pFpUdii_t fn = (pFpUdii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint64_t)R_RSI, emu->xmm[0].d[0], (int32_t)R_RDX, (int32_t)R_RCX); } void pFpfffi(x64emu_t *emu, uintptr_t fcn) { pFpfffi_t fn = (pFpfffi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], (int32_t)R_RSI); } @@ -6054,6 +6060,7 @@ void vFuuuuuuuuuuuu(x64emu_t *emu, uintptr_t fcn) { vFuuuuuuuuuuuu_t fn = (vFuuu void vFffffffffffff(x64emu_t *emu, uintptr_t fcn) { vFffffffffffff_t fn = (vFffffffffffff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0], emu->xmm[3].f[0], emu->xmm[4].f[0], emu->xmm[5].f[0], emu->xmm[6].f[0], emu->xmm[7].f[0], *(float*)(R_RSP + 8), *(float*)(R_RSP + 16), *(float*)(R_RSP + 24), *(float*)(R_RSP + 32)); } void vFpipppiiiipii(x64emu_t *emu, uintptr_t fcn) { vFpipppiiiipii_t fn = (vFpipppiiiipii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } void vFpippppiiiipi(x64emu_t *emu, uintptr_t fcn) { vFpippppiiiipi_t fn = (vFpippppiiiipi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(void**)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } +void vFpupppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpupppppppppp_t fn = (vFpupppppppppp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48)); } void vFppiiiiddddii(x64emu_t *emu, uintptr_t fcn) { vFppiiiiddddii_t fn = (vFppiiiiddddii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], emu->xmm[3].d[0], *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFppiiuuuiupup(x64emu_t *emu, uintptr_t fcn) { vFppiiuuuiupup_t fn = (vFppiiuuuiupup_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(uint32_t*)(R_RSP + 24), *(void**)(R_RSP + 32), *(uint32_t*)(R_RSP + 40), *(void**)(R_RSP + 48)); } void vFppiipppiiiii(x64emu_t *emu, uintptr_t fcn) { vFppiipppiiiii_t fn = (vFppiipppiiiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48)); } @@ -6137,13 +6144,16 @@ void vFpppipppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppipppppppppppppp_t void iFpppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppp_t fn = (iFpppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } void LFpppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { LFpppppppppppppppppp_t fn = (LFpppppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } void pFippppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFippppppppppppppppp_t fn = (pFippppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } +void pFpupppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupppppppppppppppp_t fn = (pFpupppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96)); } void vFpiiiiiiiiiiiiiiiiii(x64emu_t *emu, uintptr_t fcn) { vFpiiiiiiiiiiiiiiiiii_t fn = (vFpiiiiiiiiiiiiiiiiii_t)fcn; fn((void*)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), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(int32_t*)(R_RSP + 48), *(int32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(int32_t*)(R_RSP + 80), *(int32_t*)(R_RSP + 88), *(int32_t*)(R_RSP + 96), *(int32_t*)(R_RSP + 104)); } void uFbWWWCCCCCCCCWCCCCCC(x64emu_t *emu, uintptr_t fcn) { uFbWWWCCCCCCCCWCCCCCC_t fn = (uFbWWWCCCCCCCCWCCCCCC_t)fcn; void *aligned_xcb = align_xcb_connection((void*)R_RDI); R_RAX=(uint32_t)fn(aligned_xcb, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint16_t)R_RCX, (uint8_t)R_R8, (uint8_t)R_R9, *(uint8_t*)(R_RSP + 8), *(uint8_t*)(R_RSP + 16), *(uint8_t*)(R_RSP + 24), *(uint8_t*)(R_RSP + 32), *(uint8_t*)(R_RSP + 40), *(uint8_t*)(R_RSP + 48), *(uint16_t*)(R_RSP + 56), *(uint8_t*)(R_RSP + 64), *(uint8_t*)(R_RSP + 72), *(uint8_t*)(R_RSP + 80), *(uint8_t*)(R_RSP + 88), *(uint8_t*)(R_RSP + 96), *(uint8_t*)(R_RSP + 104)); unalign_xcb_connection(aligned_xcb, (void*)R_RDI); } void pFiiiippppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFiiiippppppppppppppp_t fn = (pFiiiippppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104)); } void pFpippppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpippppppppppppppppp_t fn = (pFpippppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104)); } +void pFpupupppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupupppppppppppppppp_t fn = (pFpupupppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112)); } void iFpppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppppppp_t fn = (iFpppppppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128)); } void uFippuuuuiiiiuuiiiiiiiipp(x64emu_t *emu, uintptr_t fcn) { uFippuuuuiiiiuuiiiiiiiipp_t fn = (uFippuuuuiiiiuuiiiiiiiipp_t)fcn; R_RAX=(uint32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9, *(uint32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(int32_t*)(R_RSP + 24), *(int32_t*)(R_RSP + 32), *(int32_t*)(R_RSP + 40), *(uint32_t*)(R_RSP + 48), *(uint32_t*)(R_RSP + 56), *(int32_t*)(R_RSP + 64), *(int32_t*)(R_RSP + 72), *(int32_t*)(R_RSP + 80), *(int32_t*)(R_RSP + 88), *(int32_t*)(R_RSP + 96), *(int32_t*)(R_RSP + 104), *(int32_t*)(R_RSP + 112), *(int32_t*)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136)); } void vFpppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { vFpppppppppppppppppppppppp_t fn = (vFpppppppppppppppppppppppp_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144)); } +void pFpupuupppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { pFpupuupppppppppppppppppppp_t fn = (pFpupuupppppppppppppppppppp_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144), *(void**)(R_RSP + 152)); } void iFpppppppppppppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fcn) { iFpppppppppppppppppppppppppppppppppp_t fn = (iFpppppppppppppppppppppppppppppppppp_t)fcn; R_RAX=(int32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(void**)(R_RSP + 24), *(void**)(R_RSP + 32), *(void**)(R_RSP + 40), *(void**)(R_RSP + 48), *(void**)(R_RSP + 56), *(void**)(R_RSP + 64), *(void**)(R_RSP + 72), *(void**)(R_RSP + 80), *(void**)(R_RSP + 88), *(void**)(R_RSP + 96), *(void**)(R_RSP + 104), *(void**)(R_RSP + 112), *(void**)(R_RSP + 120), *(void**)(R_RSP + 128), *(void**)(R_RSP + 136), *(void**)(R_RSP + 144), *(void**)(R_RSP + 152), *(void**)(R_RSP + 160), *(void**)(R_RSP + 168), *(void**)(R_RSP + 176), *(void**)(R_RSP + 184), *(void**)(R_RSP + 192), *(void**)(R_RSP + 200), *(void**)(R_RSP + 208), *(void**)(R_RSP + 216), *(void**)(R_RSP + 224)); } #if defined(HAVE_LD80BITS) @@ -7615,6 +7625,7 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &pFpuuup) return 1; if (fun == &pFpuupp) return 1; if (fun == &pFpuLpp) return 1; + if (fun == &pFpuppu) return 1; if (fun == &pFpuppp) return 1; if (fun == &pFpUdii) return 2; if (fun == &pFpfffi) return 4; diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 9545ebcb..e2883b2d 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -1776,6 +1776,7 @@ void pFpuuuu(x64emu_t *emu, uintptr_t fnc); void pFpuuup(x64emu_t *emu, uintptr_t fnc); void pFpuupp(x64emu_t *emu, uintptr_t fnc); void pFpuLpp(x64emu_t *emu, uintptr_t fnc); +void pFpuppu(x64emu_t *emu, uintptr_t fnc); void pFpuppp(x64emu_t *emu, uintptr_t fnc); void pFpUdii(x64emu_t *emu, uintptr_t fnc); void pFpfffi(x64emu_t *emu, uintptr_t fnc); @@ -2975,6 +2976,7 @@ void vFuuuuuuuuuuuu(x64emu_t *emu, uintptr_t fnc); void vFffffffffffff(x64emu_t *emu, uintptr_t fnc); void vFpipppiiiipii(x64emu_t *emu, uintptr_t fnc); void vFpippppiiiipi(x64emu_t *emu, uintptr_t fnc); +void vFpupppppppppp(x64emu_t *emu, uintptr_t fnc); void vFppiiiiddddii(x64emu_t *emu, uintptr_t fnc); void vFppiiuuuiupup(x64emu_t *emu, uintptr_t fnc); void vFppiipppiiiii(x64emu_t *emu, uintptr_t fnc); @@ -3058,13 +3060,16 @@ void vFpppipppppppppppppp(x64emu_t *emu, uintptr_t fnc); void iFpppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void LFpppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFippppppppppppppppp(x64emu_t *emu, uintptr_t fnc); +void pFpupppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void vFpiiiiiiiiiiiiiiiiii(x64emu_t *emu, uintptr_t fnc); void uFbWWWCCCCCCCCWCCCCCC(x64emu_t *emu, uintptr_t fnc); void pFiiiippppppppppppppp(x64emu_t *emu, uintptr_t fnc); void pFpippppppppppppppppp(x64emu_t *emu, uintptr_t fnc); +void pFpupupppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void iFpppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void uFippuuuuiiiiuuiiiiiiiipp(x64emu_t *emu, uintptr_t fnc); void vFpppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); +void pFpupuupppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); void iFpppppppppppppppppppppppppppppppppp(x64emu_t *emu, uintptr_t fnc); #if defined(HAVE_LD80BITS) diff --git a/src/wrapped/wrappedwaylandclient.c b/src/wrapped/wrappedwaylandclient.c index 2ecac23c..0167d2fe 100644 --- a/src/wrapped/wrappedwaylandclient.c +++ b/src/wrapped/wrappedwaylandclient.c @@ -21,41 +21,463 @@ const char* waylandclientName = "libwayland-client.so.0"; #define LIBNAME waylandclient -static void AutoBridgeInterfaces(void* lib, bridge_t* bridge) -{ - // creates bridges for the various interfaces of this libs... - void** p = NULL; - p = dlsym(lib, "wl_buffer_interface"); - if(p) { - AddAutomaticBridge(bridge, vFpp, *p, 0, "wl_buffer_interface_destroy"); - } - p = dlsym(lib, "wl_compositor_interface"); - if(p) { - AddAutomaticBridge(bridge, vFppu, p[0], 0, "wl_compositor_interface_create_surface"); - AddAutomaticBridge(bridge, vFppu, p[1], 0, "wl_compositor_interface_create_region"); - } - p = dlsym(lib, "wl_display_interface"); - if(p) { - AddAutomaticBridge(bridge, vFppu, p[0], 0, "wl_display_interface_sync"); - AddAutomaticBridge(bridge, vFppu, p[1], 0, "wl_display_interface_get_registry"); - } - p = dlsym(lib, "wl_keyboard_interface"); - if(p) { - AddAutomaticBridge(bridge, vFpp, *p, 0, "wl_keyboard_interface_release"); - } - p = dlsym(lib, "wl_output_interface"); - if(p) { - AddAutomaticBridge(bridge, vFpp, *p, 0, "wl_output_interface_release"); - } - p = dlsym(lib, "wl_pointer_interface"); - if(p) { - AddAutomaticBridge(bridge, vFppupii, p[0], 0, "wl_pointer_interface_set_cursor"); - AddAutomaticBridge(bridge, vFppu, p[1], 0, "wl_pointer_interface_release"); - } -} - -#define CUSTOM_INIT \ - AutoBridgeInterfaces(lib->w.lib, lib->w.bridge); +#define ADDED_FUNCTIONS() \ + +#include "generated/wrappedwaylandclienttypes.h" + +#include "wrappercallback.h" + +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// wl_registry_listener ... +typedef struct my_wl_registry_listener_s { + uintptr_t global; //vFppupu + uintptr_t global_remove; //vFppu +} my_wl_registry_listener_t; +#define GO(A) \ +static my_wl_registry_listener_t* ref_wl_registry_listener_##A = NULL; \ +static void* my_wl_registry_listener_global_##A(void* a, void* b, uint32_t c, void* d, uint32_t e) \ +{ \ + RunFunctionFmt(ref_wl_registry_listener_##A->global, "ppupu", a, b, c, d, e); \ +} \ +static void* my_wl_registry_listener_global_remove_##A(void* a, void* b, uint32_t c) \ +{ \ + RunFunctionFmt(ref_wl_registry_listener_##A->global_remove, "ppu", a, b, c); \ +} \ +static my_wl_registry_listener_t my_wl_registry_listener_fct_##A = { \ + (uintptr_t)my_wl_registry_listener_global_##A, \ + (uintptr_t)my_wl_registry_listener_global_remove_##A \ +}; +SUPER() +#undef GO +static void* find_wl_registry_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_wl_registry_listener_##A == fct) return &my_wl_registry_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_wl_registry_listener_##A == 0) {ref_wl_registry_listener_##A = fct; return &my_wl_registry_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_registry_listener callback\n"); + return NULL; +} +// xdg_surface_listener ... +typedef struct my_xdg_surface_listener_s { + uintptr_t configure; //vFppiipu + uintptr_t close; //vFpp +} my_xdg_surface_listener_t; +#define GO(A) \ +static my_xdg_surface_listener_t* ref_xdg_surface_listener_##A = NULL; \ +static void* my_xdg_surface_listener_configure_##A(void* a, void* b, int c, int d, void* e, uint32_t f) \ +{ \ + RunFunctionFmt(ref_xdg_surface_listener_##A->configure, "ppiipu", a, b, c, d, e, f); \ +} \ +static void* my_xdg_surface_listener_close_##A(void* a, void* b) \ +{ \ + RunFunctionFmt(ref_xdg_surface_listener_##A->close, "pp", a, b); \ +} \ +static my_xdg_surface_listener_t my_xdg_surface_listener_fct_##A = { \ + (uintptr_t)my_xdg_surface_listener_configure_##A, \ + (uintptr_t)my_xdg_surface_listener_close_##A \ +}; +SUPER() +#undef GO +static void* find_xdg_surface_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_xdg_surface_listener_##A == fct) return &my_xdg_surface_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_xdg_surface_listener_##A == 0) {ref_xdg_surface_listener_##A = fct; return &my_xdg_surface_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client xdg_surface_listener callback\n"); + return NULL; +} +// xdg_toplevel_listener ... +typedef struct my_xdg_toplevel_listener_s { + uintptr_t configure; //vFppiip + uintptr_t close; //vFpp +} my_xdg_toplevel_listener_t; +#define GO(A) \ +static my_xdg_toplevel_listener_t* ref_xdg_toplevel_listener_##A = NULL; \ +static void* my_xdg_toplevel_listener_configure_##A(void* a, void* b, int c, int d, void* e) \ +{ \ + RunFunctionFmt(ref_xdg_toplevel_listener_##A->configure, "ppiip", a, b, c, d, e); \ +} \ +static void* my_xdg_toplevel_listener_close_##A(void* a, void* b) \ +{ \ + RunFunctionFmt(ref_xdg_toplevel_listener_##A->close, "pp", a, b); \ +} \ +static my_xdg_toplevel_listener_t my_xdg_toplevel_listener_fct_##A = { \ + (uintptr_t)my_xdg_toplevel_listener_configure_##A, \ + (uintptr_t)my_xdg_toplevel_listener_close_##A \ +}; +SUPER() +#undef GO +static void* find_xdg_toplevel_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_xdg_toplevel_listener_##A == fct) return &my_xdg_toplevel_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_xdg_toplevel_listener_##A == 0) {ref_xdg_toplevel_listener_##A = fct; return &my_xdg_toplevel_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client xdg_toplevel_listener callback\n"); + return NULL; +} +// xdg_wm_base_listener ... +typedef struct my_xdg_wm_base_listener_s { + uintptr_t ping; //vFppu +} my_xdg_wm_base_listener_t; +#define GO(A) \ +static my_xdg_wm_base_listener_t* ref_xdg_wm_base_listener_##A = NULL; \ +static void* my_xdg_wm_base_listener_ping_##A(void* a, void* b, uint32_t c) \ +{ \ + RunFunctionFmt(ref_xdg_wm_base_listener_##A->ping, "ppu", a, b, c); \ +} \ +static my_xdg_wm_base_listener_t my_xdg_wm_base_listener_fct_##A = { \ + (uintptr_t)my_xdg_wm_base_listener_ping_##A, \ +}; +SUPER() +#undef GO +static void* find_xdg_wm_base_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_xdg_wm_base_listener_##A == fct) return &my_xdg_wm_base_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_xdg_wm_base_listener_##A == 0) {ref_xdg_wm_base_listener_##A = fct; return &my_xdg_wm_base_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client xdg_wm_base_listener callback\n"); + return NULL; +} +// wl_shm_listener ... +typedef struct my_wl_shm_listener_s { + uintptr_t format; //vFppu +} my_wl_shm_listener_t; +#define GO(A) \ +static my_wl_shm_listener_t* ref_wl_shm_listener_##A = NULL; \ +static void* my_wl_shm_listener_format_##A(void* a, void* b, uint32_t c) \ +{ \ + RunFunctionFmt(ref_wl_shm_listener_##A->format, "ppu", a, b, c); \ +} \ +static my_wl_shm_listener_t my_wl_shm_listener_fct_##A = { \ + (uintptr_t)my_wl_shm_listener_format_##A, \ +}; +SUPER() +#undef GO +static void* find_wl_shm_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_wl_shm_listener_##A == fct) return &my_wl_shm_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_wl_shm_listener_##A == 0) {ref_wl_shm_listener_##A = fct; return &my_wl_shm_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_shm_listener callback\n"); + return NULL; +} +// wl_output_listener ... +typedef struct my_wl_output_listener_s { + uintptr_t geometry; //vFppiiiiippi + uintptr_t mode; //vFppuiii + uintptr_t done; //vFpp + uintptr_t scale; //vFppi + uintptr_t name; //vFppp + uintptr_t description; //vFppp +} my_wl_output_listener_t; +#define GO(A) \ +static my_wl_output_listener_t* ref_wl_output_listener_##A = NULL; \ +static void* my_wl_output_listener_geometry_##A(void* a, void* b, int c, int d, int e, int f, int g, void* h, void* i, int j)\ +{ \ + RunFunctionFmt(ref_wl_output_listener_##A->geometry, "ppiiiiippi", a, b, c, d, e, f, g, h, i, j); \ +} \ +static void* my_wl_output_listener_mode_##A(void* a, void* b, uint32_t c, int d, int e, int f) \ +{ \ + RunFunctionFmt(ref_wl_output_listener_##A->mode, "ppuiii", a, b, c, d, e, f); \ +} \ +static void* my_wl_output_listener_done_##A(void* a, void* b) \ +{ \ + RunFunctionFmt(ref_wl_output_listener_##A->done, "pp", a, b); \ +} \ +static void* my_wl_output_listener_scale_##A(void* a, void* b, int c) \ +{ \ + RunFunctionFmt(ref_wl_output_listener_##A->scale, "ppi", a, b, c); \ +} \ +static void* my_wl_output_listener_name_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(ref_wl_output_listener_##A->name, "ppp", a, b, c); \ +} \ +static void* my_wl_output_listener_description_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(ref_wl_output_listener_##A->description, "ppp", a, b, c); \ +} \ +static my_wl_output_listener_t my_wl_output_listener_fct_##A = { \ + (uintptr_t)my_wl_output_listener_geometry_##A, \ + (uintptr_t)my_wl_output_listener_mode_##A, \ + (uintptr_t)my_wl_output_listener_done_##A, \ + (uintptr_t)my_wl_output_listener_scale_##A, \ + (uintptr_t)my_wl_output_listener_name_##A, \ + (uintptr_t)my_wl_output_listener_description_##A \ +}; +SUPER() +#undef GO +static void* find_wl_output_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_wl_output_listener_##A == fct) return &my_wl_output_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_wl_output_listener_##A == 0) {ref_wl_output_listener_##A = fct; return &my_wl_output_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_output_listener callback\n"); + return NULL; +} +// wl_seat_listener ... +typedef struct my_wl_seat_listener_s { + uintptr_t capabilities; //vFppu + uintptr_t name; //vFppp +} my_wl_seat_listener_t; +#define GO(A) \ +static my_wl_seat_listener_t* ref_wl_seat_listener_##A = NULL; \ +static void* my_wl_seat_listener_capabilities_##A(void* a, void* b, uint32_t c) \ +{ \ + RunFunctionFmt(ref_wl_seat_listener_##A->capabilities, "ppu", a, b, c); \ +} \ +static void* my_wl_seat_listener_name_##A(void* a, void* b, void* c) \ +{ \ + RunFunctionFmt(ref_wl_seat_listener_##A->name, "ppp", a, b, c); \ +} \ +static my_wl_seat_listener_t my_wl_seat_listener_fct_##A = { \ + (uintptr_t)my_wl_seat_listener_capabilities_##A, \ + (uintptr_t)my_wl_seat_listener_name_##A \ +}; +SUPER() +#undef GO +static void* find_wl_seat_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_wl_seat_listener_##A == fct) return &my_wl_seat_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_wl_seat_listener_##A == 0) {ref_wl_seat_listener_##A = fct; return &my_wl_seat_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_seat_listener callback\n"); + return NULL; +} +// wl_pointer_listener ... +typedef struct my_wl_pointer_listener_s { + uintptr_t enter; //vFppupii + uintptr_t leave; //vFppup + uintptr_t motion; //vFppuii + uintptr_t button; //vFppuuuu + uintptr_t axis; //vFppuui + uintptr_t frame; //vFpp + uintptr_t axis_source; //vFppu + uintptr_t axis_stop; //vFppuu + uintptr_t axis_discrete; //vFppui + uintptr_t axis_value120; //vFppui + uintptr_t axis_relative_direction; //vFppuu +} my_wl_pointer_listener_t; +#define GO(A) \ +static my_wl_pointer_listener_t* ref_wl_pointer_listener_##A = NULL; \ +static void* my_wl_pointer_listener_enter_##A(void* a, void* b, uint32_t c, void* d, int e, int f) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->enter, "ppupii", a, b, c, d, e, f); \ +} \ +static void* my_wl_pointer_listener_leave_##A(void* a, void* b, uint32_t c, void* d) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->leave, "ppup", a, b, c, d); \ +} \ +static void* my_wl_pointer_listener_motion_##A(void* a, void* b, uint32_t c, int d, int e) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->motion, "ppuii", a, b, c, d, e); \ +} \ +static void* my_wl_pointer_listener_button_##A(void* a, void* b, uint32_t c, uint32_t d, uint32_t e, uint32_t f)\ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->button, "ppuuuu", a, b, c, d, e, f); \ +} \ +static void* my_wl_pointer_listener_axis_##A(void* a, void* b, uint32_t c, uint32_t d, int e) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->axis, "ppuui", a, b, c, d, e); \ +} \ +static void* my_wl_pointer_listener_frame_##A(void* a, void* b) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->frame, "pp", a, b); \ +} \ +static void* my_wl_pointer_listener_axis_source_##A(void* a, void* b, uint32_t c) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->axis_source, "ppu", a, b, c); \ +} \ +static void* my_wl_pointer_listener_axis_stop_##A(void* a, void* b, uint32_t c, uint32_t d) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->axis_stop, "ppuu", a, b, c, d); \ +} \ +static void* my_wl_pointer_listener_axis_discrete_##A(void* a, void* b, uint32_t c, int d) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->axis_discrete, "ppui", a, b, c, d); \ +} \ +static void* my_wl_pointer_listener_axis_value120_##A(void* a, void* b, uint32_t c, int d) \ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->axis_value120, "ppui", a, b, c, d); \ +} \ +static void* my_wl_pointer_listener_axis_relative_direction_##A(void* a, void* b, uint32_t c, uint32_t d)\ +{ \ + RunFunctionFmt(ref_wl_pointer_listener_##A->axis_relative_direction, "ppuu", a, b, c, d); \ +} \ +static my_wl_pointer_listener_t my_wl_pointer_listener_fct_##A = { \ + (uintptr_t)my_wl_pointer_listener_enter_##A, \ + (uintptr_t)my_wl_pointer_listener_leave_##A, \ + (uintptr_t)my_wl_pointer_listener_motion_##A, \ + (uintptr_t)my_wl_pointer_listener_button_##A, \ + (uintptr_t)my_wl_pointer_listener_axis_##A, \ + (uintptr_t)my_wl_pointer_listener_frame_##A, \ + (uintptr_t)my_wl_pointer_listener_axis_source_##A, \ + (uintptr_t)my_wl_pointer_listener_axis_stop_##A, \ + (uintptr_t)my_wl_pointer_listener_axis_discrete_##A, \ + (uintptr_t)my_wl_pointer_listener_axis_value120_##A, \ + (uintptr_t)my_wl_pointer_listener_axis_relative_direction_##A \ +}; +SUPER() +#undef GO +static void* find_wl_pointer_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_wl_pointer_listener_##A == fct) return &my_wl_pointer_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_wl_pointer_listener_##A == 0) {ref_wl_pointer_listener_##A = fct; return &my_wl_pointer_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_pointer_listener callback\n"); + return NULL; +} +// wl_keyboard_listener ... +typedef struct my_wl_keyboard_listener_s { + uintptr_t keymap; //vFppuiu + uintptr_t enter; //vFppup + uintptr_t leave; //vFppup + uintptr_t key; //vFppuuuuu + uintptr_t modifiers; //vFppuuuuu + uintptr_t repeat_info; //vFppii +} my_wl_keyboard_listener_t; +#define GO(A) \ +static my_wl_keyboard_listener_t* ref_wl_keyboard_listener_##A = NULL; \ +static void* my_wl_keyboard_listener_keymap_##A(void* a, void* b, uint32_t c, int d, uint32_t e) \ +{ \ + RunFunctionFmt(ref_wl_keyboard_listener_##A->keymap, "ppuiu", a, b, c, d, e); \ +} \ +static void* my_wl_keyboard_listener_enter_##A(void* a, void* b, uint32_t c, void* d) \ +{ \ + RunFunctionFmt(ref_wl_keyboard_listener_##A->enter, "ppup", a, b, c, d); \ +} \ +static void* my_wl_keyboard_listener_leave_##A(void* a, void* b, uint32_t c, void* d) \ +{ \ + RunFunctionFmt(ref_wl_keyboard_listener_##A->leave, "ppup", a, b, c, d); \ +} \ +static void* my_wl_keyboard_listener_key_##A(void* a, void* b, uint32_t c, uint32_t d, uint32_t e, uint32_t f, uint32_t g)\ +{ \ + RunFunctionFmt(ref_wl_keyboard_listener_##A->key, "ppuuuuu", a, b, c, d, e, f, g); \ +} \ +static void* my_wl_keyboard_listener_modifiers_##A(void* a, void* b, uint32_t c, uint32_t d, uint32_t e, uint32_t f, uint32_t g)\ +{ \ + RunFunctionFmt(ref_wl_keyboard_listener_##A->modifiers, "ppuuuuu", a, b, c, d, e, f, g); \ +} \ +static void* my_wl_keyboard_listener_repeat_info_##A(void* a, void* b, int c, int d) \ +{ \ + RunFunctionFmt(ref_wl_keyboard_listener_##A->repeat_info, "ppii", a, b, c, d); \ +} \ +static my_wl_keyboard_listener_t my_wl_keyboard_listener_fct_##A = { \ + (uintptr_t)my_wl_keyboard_listener_keymap_##A, \ + (uintptr_t)my_wl_keyboard_listener_enter_##A, \ + (uintptr_t)my_wl_keyboard_listener_leave_##A, \ + (uintptr_t)my_wl_keyboard_listener_key_##A, \ + (uintptr_t)my_wl_keyboard_listener_modifiers_##A, \ + (uintptr_t)my_wl_keyboard_listener_repeat_info_##A \ +}; +SUPER() +#undef GO +static void* find_wl_keyboard_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_wl_keyboard_listener_##A == fct) return &my_wl_keyboard_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_wl_keyboard_listener_##A == 0) {ref_wl_keyboard_listener_##A = fct; return &my_wl_keyboard_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_keyboard_listener callback\n"); + return NULL; +} +// wl_buffer_listener ... +typedef struct my_wl_buffer_listener_s { + uintptr_t release; //vFpp +} my_wl_buffer_listener_t; +#define GO(A) \ +static my_wl_buffer_listener_t* ref_wl_buffer_listener_##A = NULL; \ +static void* my_wl_buffer_listener_release_##A(void* a, void* b) \ +{ \ + RunFunctionFmt(ref_wl_buffer_listener_##A->release, "pp", a, b); \ +} \ +static my_wl_buffer_listener_t my_wl_buffer_listener_fct_##A = { \ + (uintptr_t)my_wl_buffer_listener_release_##A, \ +}; +SUPER() +#undef GO +static void* find_wl_buffer_listener_Fct(void* fct) +{ + if(!fct) return fct; + #define GO(A) if(ref_wl_buffer_listener_##A == fct) return &my_wl_buffer_listener_fct_##A; + SUPER() + #undef GO + #define GO(A) if(ref_wl_buffer_listener_##A == 0) {ref_wl_buffer_listener_##A = fct; return &my_wl_buffer_listener_fct_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for wayland-client wl_buffer_listener callback\n"); + return NULL; +} + +#undef SUPER + +EXPORT int my_wl_proxy_add_listener(x64emu_t* emu, void* proxy, void** l, void* data) +{ + const char* proxy_name = **(const char***)proxy; + if(!strcmp(proxy_name, "wl_registry")) { + l = find_wl_registry_listener_Fct(l); + } else if(!strcmp(proxy_name, "xdg_surface")) { + l = find_xdg_surface_listener_Fct(l); + } else if(!strcmp(proxy_name, "xdg_toplevel")) { + l = find_xdg_toplevel_listener_Fct(l); + } else if(!strcmp(proxy_name, "xdg_wm_base")) { + l = find_xdg_wm_base_listener_Fct(l); + } else if(!strcmp(proxy_name, "wl_shm")) { + l = find_wl_shm_listener_Fct(l); + } else if(!strcmp(proxy_name, "wl_output")) { + l = find_wl_output_listener_Fct(l); + } else if(!strcmp(proxy_name, "wl_seat")) { + l = find_wl_seat_listener_Fct(l); + } else if(!strcmp(proxy_name, "wl_pointer")) { + l = find_wl_pointer_listener_Fct(l); + } else if(!strcmp(proxy_name, "wl_keyboard")) { + l = find_wl_keyboard_listener_Fct(l); + } else if(!strcmp(proxy_name, "wl_buffer")) { + l = find_wl_buffer_listener_Fct(l); + } else + printf_log(LOG_INFO, "BOX64: Error, Wayland-client, add_listener to %s unknown, will crash soon!\n", proxy_name); + return my->wl_proxy_add_listener(proxy, l, data); +} #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedwaylandclient_private.h b/src/wrapped/wrappedwaylandclient_private.h index 4e649349..ce5e86c0 100644 --- a/src/wrapped/wrappedwaylandclient_private.h +++ b/src/wrapped/wrappedwaylandclient_private.h @@ -6,9 +6,9 @@ //GO(wl_array_copy, //GO(wl_array_init, //GO(wl_array_release, -DATA(wl_buffer_interface, sizeof(void*)*1) +DATA(wl_buffer_interface, 40) //DATA(wl_callback_interface, -DATA(wl_compositor_interface, sizeof(void*)*2) +DATA(wl_compositor_interface, 40) //DATA(wl_data_device_interface, //DATA(wl_data_device_manager_interface, //DATA(wl_data_offer_interface, @@ -26,14 +26,14 @@ GO(wl_display_flush, iFp) GO(wl_display_get_error, iFp) GO(wl_display_get_fd, iFp) //GO(wl_display_get_protocol_error, -DATA(wl_display_interface, sizeof(void*)*2) +DATA(wl_display_interface, 40) GO(wl_display_prepare_read, iFp) GO(wl_display_prepare_read_queue, iFpp) GO(wl_display_read_events, iFp) GO(wl_display_roundtrip, iFp) GO(wl_display_roundtrip_queue, iFpp) GO(wl_event_queue_destroy, vFp) -DATA(wl_keyboard_interface, sizeof(void*)*1) +DATA(wl_keyboard_interface, 40) //GO(wl_list_empty, //GO(wl_list_init, //GO(wl_list_insert, @@ -41,10 +41,10 @@ DATA(wl_keyboard_interface, sizeof(void*)*1) //GO(wl_list_length, //GO(wl_list_remove, //GO(wl_log_set_handler_client, -DATA(wl_output_interface, sizeof(void*)*1) -DATA(wl_pointer_interface, sizeof(void*)*2) +DATA(wl_output_interface, 40) +DATA(wl_pointer_interface, 40) //GO(wl_proxy_add_dispatcher, -GO(wl_proxy_add_listener, iFppp) +GOM(wl_proxy_add_listener, iFEppp) GO(wl_proxy_create, pFpp) GO(wl_proxy_create_wrapper, pFp) GO(wl_proxy_destroy, vFp) |