diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-25 20:56:45 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-25 20:56:45 +0100 |
| commit | 235784b46f47411b73d383c4fb462c3ffac323a4 (patch) | |
| tree | d24269356747e3799f80b59038bebe7c6c1b2c13 /src | |
| parent | 66af0f810cef61adc8cf4eff2a24132259aae0da (diff) | |
| download | box64-235784b46f47411b73d383c4fb462c3ffac323a4.tar.gz box64-235784b46f47411b73d383c4fb462c3ffac323a4.zip | |
Added wrapped libfontconfig and libfreetype, plus some elfloader/tls bugfix
Diffstat (limited to 'src')
| -rwxr-xr-x | src/elfs/elfloader.c | 3 | ||||
| -rwxr-xr-x | src/include/elfloader.h | 2 | ||||
| -rwxr-xr-x | src/library_list.h | 4 | ||||
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 25 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 50 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 25 | ||||
| -rwxr-xr-x | src/wrapped/wrappedfontconfig.c | 56 | ||||
| -rwxr-xr-x | src/wrapped/wrappedfontconfig_private.h | 199 | ||||
| -rwxr-xr-x | src/wrapped/wrappedfreetype.c | 171 | ||||
| -rwxr-xr-x | src/wrapped/wrappedfreetype_private.h | 217 | ||||
| -rwxr-xr-x | src/wrapped/wrappedldlinux.c | 11 | ||||
| -rwxr-xr-x | src/wrapped/wrappedldlinux_private.h | 15 |
12 files changed, 757 insertions, 21 deletions
diff --git a/src/elfs/elfloader.c b/src/elfs/elfloader.c index abe2b8d3..dd8d58e2 100755 --- a/src/elfs/elfloader.c +++ b/src/elfs/elfloader.c @@ -1017,6 +1017,7 @@ void RunElfInit(elfheader_t* h, x64emu_t *emu) // and check init array now Elf64_Addr *addr = (Elf64_Addr*)(h->initarray + h->delta); for (int i=0; i<h->initarray_sz; ++i) { +if(strstr(h->name, "libcef.so") && i==3) trace_end = 0; if(addr[i]) { printf_log(LOG_DEBUG, "Calling Init[%d] for %s @%p\n", i, ElfName(h), (void*)addr[i]); RunFunctionWithEmu(emu, 0, (uintptr_t)addr[i], 3, context->argc, context->argv, context->envv); @@ -1158,7 +1159,7 @@ const char* FindNearestSymbolName(elfheader_t* h, void* p, uintptr_t* start, uin return ret; } -void* GetDTatOffset(box64context_t* context, int index, int offset) +void* GetDTatOffset(box64context_t* context, unsigned long int index, unsigned long int offset) { return (void*)((char*)GetTLSPointer(context, context->elfs[index])+offset); } diff --git a/src/include/elfloader.h b/src/include/elfloader.h index a4d2cb6b..241c25e7 100755 --- a/src/include/elfloader.h +++ b/src/include/elfloader.h @@ -45,7 +45,7 @@ const char* FindNearestSymbolName(elfheader_t* h, void* p, uintptr_t* start, uin int32_t GetTLSBase(elfheader_t* h); uint32_t GetTLSSize(elfheader_t* h); void* GetTLSPointer(box64context_t* context, elfheader_t* h); -void* GetDTatOffset(box64context_t* context, int index, int offset); +void* GetDTatOffset(box64context_t* context, unsigned long int index, unsigned long int offset); #ifdef DYNAREC dynablocklist_t* GetDynablocksFromAddress(box64context_t *context, uintptr_t addr); dynablocklist_t* GetDynablocksFromElf(elfheader_t* h); diff --git a/src/library_list.h b/src/library_list.h index 7fe5e905..09d4db84 100755 --- a/src/library_list.h +++ b/src/library_list.h @@ -111,8 +111,8 @@ GO("libpulse.so.0", pulse) //GO("libnm.so.0", libnm) //GO("libnm-glib.so.4", libnm) //GO("libnm-util.so.2", libnm) -//GO("libfontconfig.so.1", fontconfig) -//GO("libfreetype.so.6", freetype) +GO("libfontconfig.so.1", fontconfig) +GO("libfreetype.so.6", freetype) //GO("libbz2.so.1", bz2) GO("libSM.so.6", libsm) GO("libICE.so.6", libice) diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index 7db4e8cd..397bf23f 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -43,6 +43,7 @@ #() dFp #() lFE #() lFi +#() lFl #() lFp #() LFE #() LFv @@ -123,6 +124,7 @@ #() uFpi #() uFpu #() uFpU +#() uFpL #() uFpp #() UFEp #() UFUp @@ -139,6 +141,7 @@ #() dFLL #() dFpi #() dFpp +#() lFll #() lFpi #() lFpp #() LFpi @@ -203,6 +206,7 @@ #() vFpuI #() vFpuu #() vFpup +#() vFpll #() vFpLi #() vFpLL #() vFppi @@ -247,12 +251,14 @@ #() iFpfu #() iFpff #() iFpli +#() iFpll #() iFplp #() iFpLi #() iFpLL #() iFpLp #() iFppi #() iFppI +#() iFppC #() iFppu #() iFppd #() iFppL @@ -288,6 +294,7 @@ #() dFppp #() lFipi #() lFipL +#() lFlll #() lFlpi #() lFppi #() lFSpl @@ -426,6 +433,7 @@ #() iFpiip #() iFpiup #() iFpipi +#() iFpipC #() iFpipp #() iFpCCC #() iFpWWu @@ -436,17 +444,21 @@ #() iFpuup #() iFpuLL #() iFpuLp +#() iFpupu #() iFpupV +#() iFplip #() iFpLpi #() iFpLpL #() iFppii #() iFppiu #() iFppiL #() iFppip +#() iFppCC #() iFppuw #() iFppui #() iFppuu #() iFppup +#() iFppll #() iFpplp #() iFppLp #() iFpppi @@ -461,6 +473,7 @@ #() uFpCCC #() uFpuip #() uFpuuu +#() uFppiu #() uFpppi #() UFpipp #() dFppiL @@ -572,6 +585,7 @@ #() vFpipii #() vFpuipp #() vFpddii +#() vFpliil #() vFppiii #() vFppiip #() vFppWui @@ -586,6 +600,7 @@ #() iFEpLpV #() iFEppip #() iFEppiV +#() iFEpplp #() iFEpppp #() iFEpppV #() iFiiipu @@ -606,14 +621,21 @@ #() iFpippi #() iFpippp #() iFpCCCC +#() iFpuuip #() iFpuuui +#() iFpuuup #() iFpuuLL #() iFpuupp +#() iFplluu +#() iFpLlpp #() iFppiip #() iFppiup +#() iFppiLi #() iFppipi #() iFppipp #() iFppupi +#() iFppupp +#() iFppllp #() iFppLpi #() iFppLpp #() iFpppii @@ -727,6 +749,7 @@ #() iFEpilpV #() iFEpippi #() iFEpuppp +#() iFEppiLi #() iFEppppp #() iFiiiiii #() iFiiiiip @@ -747,6 +770,7 @@ #() iFppuIII #() iFppuupp #() iFppupip +#() iFppLupp #() iFpppiuu #() iFpppipi #() iFpppipp @@ -886,6 +910,7 @@ #() vFppiiipii #() vFppppiipi #() iFEpippppp +#() iFEpuuLppp #() iFiiiiiiip #() iFiiupiupi #() iFuiifpppp diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index aea3f778..e6d1499e 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -76,6 +76,7 @@ typedef double (*dFd_t)(double); typedef double (*dFp_t)(void*); typedef intptr_t (*lFE_t)(x64emu_t*); typedef intptr_t (*lFi_t)(int32_t); +typedef intptr_t (*lFl_t)(intptr_t); typedef intptr_t (*lFp_t)(void*); typedef uintptr_t (*LFE_t)(x64emu_t*); typedef uintptr_t (*LFv_t)(void); @@ -156,6 +157,7 @@ typedef uint32_t (*uFUp_t)(uint64_t, void*); typedef uint32_t (*uFpi_t)(void*, int32_t); typedef uint32_t (*uFpu_t)(void*, uint32_t); 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 (*UFUp_t)(uint64_t, void*); @@ -172,6 +174,7 @@ typedef double (*dFdp_t)(double, void*); typedef double (*dFLL_t)(uintptr_t, uintptr_t); typedef double (*dFpi_t)(void*, int32_t); typedef double (*dFpp_t)(void*, void*); +typedef intptr_t (*lFll_t)(intptr_t, intptr_t); typedef intptr_t (*lFpi_t)(void*, int32_t); typedef intptr_t (*lFpp_t)(void*, void*); typedef uintptr_t (*LFpi_t)(void*, int32_t); @@ -236,6 +239,7 @@ typedef void (*vFpui_t)(void*, uint32_t, int32_t); typedef void (*vFpuI_t)(void*, uint32_t, int64_t); typedef void (*vFpuu_t)(void*, uint32_t, uint32_t); typedef void (*vFpup_t)(void*, uint32_t, void*); +typedef void (*vFpll_t)(void*, intptr_t, intptr_t); typedef void (*vFpLi_t)(void*, uintptr_t, int32_t); typedef void (*vFpLL_t)(void*, uintptr_t, uintptr_t); typedef void (*vFppi_t)(void*, void*, int32_t); @@ -280,12 +284,14 @@ typedef int32_t (*iFpup_t)(void*, uint32_t, void*); typedef int32_t (*iFpfu_t)(void*, float, uint32_t); typedef int32_t (*iFpff_t)(void*, float, float); typedef int32_t (*iFpli_t)(void*, intptr_t, int32_t); +typedef int32_t (*iFpll_t)(void*, intptr_t, intptr_t); typedef int32_t (*iFplp_t)(void*, intptr_t, void*); typedef int32_t (*iFpLi_t)(void*, uintptr_t, int32_t); typedef int32_t (*iFpLL_t)(void*, uintptr_t, uintptr_t); typedef int32_t (*iFpLp_t)(void*, uintptr_t, void*); typedef int32_t (*iFppi_t)(void*, void*, int32_t); typedef int32_t (*iFppI_t)(void*, void*, int64_t); +typedef int32_t (*iFppC_t)(void*, void*, uint8_t); typedef int32_t (*iFppu_t)(void*, void*, uint32_t); typedef int32_t (*iFppd_t)(void*, void*, double); typedef int32_t (*iFppL_t)(void*, void*, uintptr_t); @@ -321,6 +327,7 @@ typedef double (*dFppi_t)(void*, void*, int32_t); typedef double (*dFppp_t)(void*, void*, void*); typedef intptr_t (*lFipi_t)(int32_t, void*, int32_t); typedef intptr_t (*lFipL_t)(int32_t, void*, uintptr_t); +typedef intptr_t (*lFlll_t)(intptr_t, intptr_t, intptr_t); typedef intptr_t (*lFlpi_t)(intptr_t, void*, int32_t); typedef intptr_t (*lFppi_t)(void*, void*, int32_t); typedef intptr_t (*lFSpl_t)(void*, void*, intptr_t); @@ -459,6 +466,7 @@ typedef int32_t (*iFpiiL_t)(void*, int32_t, int32_t, uintptr_t); typedef int32_t (*iFpiip_t)(void*, int32_t, int32_t, void*); typedef int32_t (*iFpiup_t)(void*, int32_t, uint32_t, void*); typedef int32_t (*iFpipi_t)(void*, int32_t, void*, int32_t); +typedef int32_t (*iFpipC_t)(void*, int32_t, void*, uint8_t); typedef int32_t (*iFpipp_t)(void*, int32_t, void*, void*); typedef int32_t (*iFpCCC_t)(void*, uint8_t, uint8_t, uint8_t); typedef int32_t (*iFpWWu_t)(void*, uint16_t, uint16_t, uint32_t); @@ -469,17 +477,21 @@ typedef int32_t (*iFpuuu_t)(void*, uint32_t, uint32_t, uint32_t); typedef int32_t (*iFpuup_t)(void*, uint32_t, uint32_t, void*); typedef int32_t (*iFpuLL_t)(void*, uint32_t, uintptr_t, uintptr_t); typedef int32_t (*iFpuLp_t)(void*, uint32_t, uintptr_t, void*); +typedef int32_t (*iFpupu_t)(void*, uint32_t, void*, uint32_t); typedef int32_t (*iFpupV_t)(void*, uint32_t, void*, void*); +typedef int32_t (*iFplip_t)(void*, intptr_t, int32_t, void*); typedef int32_t (*iFpLpi_t)(void*, uintptr_t, void*, int32_t); typedef int32_t (*iFpLpL_t)(void*, uintptr_t, void*, uintptr_t); typedef int32_t (*iFppii_t)(void*, void*, int32_t, int32_t); typedef int32_t (*iFppiu_t)(void*, void*, int32_t, uint32_t); typedef int32_t (*iFppiL_t)(void*, void*, int32_t, uintptr_t); typedef int32_t (*iFppip_t)(void*, void*, int32_t, void*); +typedef int32_t (*iFppCC_t)(void*, void*, uint8_t, uint8_t); typedef int32_t (*iFppuw_t)(void*, void*, uint32_t, int16_t); typedef int32_t (*iFppui_t)(void*, void*, uint32_t, int32_t); typedef int32_t (*iFppuu_t)(void*, void*, uint32_t, uint32_t); typedef int32_t (*iFppup_t)(void*, void*, uint32_t, void*); +typedef int32_t (*iFppll_t)(void*, void*, intptr_t, intptr_t); typedef int32_t (*iFpplp_t)(void*, void*, intptr_t, void*); typedef int32_t (*iFppLp_t)(void*, void*, uintptr_t, void*); typedef int32_t (*iFpppi_t)(void*, void*, void*, int32_t); @@ -494,6 +506,7 @@ typedef uint32_t (*uFpipp_t)(void*, int32_t, void*, void*); typedef uint32_t (*uFpCCC_t)(void*, uint8_t, uint8_t, uint8_t); typedef uint32_t (*uFpuip_t)(void*, uint32_t, int32_t, void*); typedef uint32_t (*uFpuuu_t)(void*, uint32_t, uint32_t, uint32_t); +typedef uint32_t (*uFppiu_t)(void*, void*, int32_t, uint32_t); typedef uint32_t (*uFpppi_t)(void*, void*, void*, int32_t); typedef uint64_t (*UFpipp_t)(void*, int32_t, void*, void*); typedef double (*dFppiL_t)(void*, void*, int32_t, uintptr_t); @@ -605,6 +618,7 @@ typedef void (*vFpiiii_t)(void*, int32_t, int32_t, int32_t, int32_t); typedef void (*vFpipii_t)(void*, int32_t, void*, int32_t, int32_t); typedef void (*vFpuipp_t)(void*, uint32_t, int32_t, void*, void*); typedef void (*vFpddii_t)(void*, double, double, int32_t, int32_t); +typedef void (*vFpliil_t)(void*, intptr_t, int32_t, int32_t, intptr_t); typedef void (*vFppiii_t)(void*, void*, int32_t, int32_t, int32_t); typedef void (*vFppiip_t)(void*, void*, int32_t, int32_t, void*); typedef void (*vFppWui_t)(void*, void*, uint16_t, uint32_t, int32_t); @@ -619,6 +633,7 @@ 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 (*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*); typedef int32_t (*iFEpppp_t)(x64emu_t*, void*, void*, void*, void*); typedef int32_t (*iFEpppV_t)(x64emu_t*, void*, void*, void*, void*); typedef int32_t (*iFiiipu_t)(int32_t, int32_t, int32_t, void*, uint32_t); @@ -639,14 +654,21 @@ typedef int32_t (*iFpipii_t)(void*, int32_t, void*, int32_t, int32_t); typedef int32_t (*iFpippi_t)(void*, int32_t, void*, void*, int32_t); typedef int32_t (*iFpippp_t)(void*, int32_t, void*, void*, void*); typedef int32_t (*iFpCCCC_t)(void*, uint8_t, uint8_t, uint8_t, uint8_t); +typedef int32_t (*iFpuuip_t)(void*, uint32_t, uint32_t, int32_t, void*); typedef int32_t (*iFpuuui_t)(void*, uint32_t, uint32_t, uint32_t, int32_t); +typedef int32_t (*iFpuuup_t)(void*, uint32_t, uint32_t, uint32_t, void*); typedef int32_t (*iFpuuLL_t)(void*, uint32_t, uint32_t, uintptr_t, uintptr_t); typedef int32_t (*iFpuupp_t)(void*, uint32_t, uint32_t, void*, void*); +typedef int32_t (*iFplluu_t)(void*, intptr_t, intptr_t, uint32_t, uint32_t); +typedef int32_t (*iFpLlpp_t)(void*, uintptr_t, intptr_t, void*, void*); typedef int32_t (*iFppiip_t)(void*, void*, int32_t, int32_t, void*); typedef int32_t (*iFppiup_t)(void*, void*, int32_t, uint32_t, void*); +typedef int32_t (*iFppiLi_t)(void*, void*, int32_t, uintptr_t, int32_t); typedef int32_t (*iFppipi_t)(void*, void*, int32_t, void*, int32_t); typedef int32_t (*iFppipp_t)(void*, void*, int32_t, void*, void*); typedef int32_t (*iFppupi_t)(void*, void*, uint32_t, void*, int32_t); +typedef int32_t (*iFppupp_t)(void*, void*, uint32_t, void*, void*); +typedef int32_t (*iFppllp_t)(void*, void*, intptr_t, intptr_t, void*); typedef int32_t (*iFppLpi_t)(void*, void*, uintptr_t, void*, int32_t); typedef int32_t (*iFppLpp_t)(void*, void*, uintptr_t, void*, void*); typedef int32_t (*iFpppii_t)(void*, void*, void*, int32_t, int32_t); @@ -760,6 +782,7 @@ typedef int32_t (*iFEiippi_t)(x64emu_t*, int32_t, int32_t, void*, void*, int32_t typedef int32_t (*iFEpilpV_t)(x64emu_t*, void*, int32_t, intptr_t, void*, void*); typedef int32_t (*iFEpippi_t)(x64emu_t*, void*, int32_t, void*, void*, int32_t); typedef int32_t (*iFEpuppp_t)(x64emu_t*, void*, uint32_t, void*, void*, void*); +typedef int32_t (*iFEppiLi_t)(x64emu_t*, void*, void*, int32_t, uintptr_t, int32_t); typedef int32_t (*iFEppppp_t)(x64emu_t*, void*, void*, void*, void*, void*); typedef int32_t (*iFiiiiii_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t); typedef int32_t (*iFiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, void*); @@ -780,6 +803,7 @@ typedef int32_t (*iFppuiiL_t)(void*, void*, uint32_t, int32_t, int32_t, uintptr_ typedef int32_t (*iFppuIII_t)(void*, void*, uint32_t, int64_t, int64_t, int64_t); typedef int32_t (*iFppuupp_t)(void*, void*, uint32_t, uint32_t, void*, void*); typedef int32_t (*iFppupip_t)(void*, void*, uint32_t, void*, int32_t, void*); +typedef int32_t (*iFppLupp_t)(void*, void*, uintptr_t, uint32_t, void*, void*); typedef int32_t (*iFpppiuu_t)(void*, void*, void*, int32_t, uint32_t, uint32_t); typedef int32_t (*iFpppipi_t)(void*, void*, void*, int32_t, void*, int32_t); typedef int32_t (*iFpppipp_t)(void*, void*, void*, int32_t, void*, void*); @@ -919,6 +943,7 @@ typedef void (*vFpippiipi_t)(void*, int32_t, void*, void*, int32_t, int32_t, voi typedef void (*vFppiiipii_t)(void*, void*, int32_t, int32_t, int32_t, void*, int32_t, int32_t); typedef void (*vFppppiipi_t)(void*, void*, void*, void*, int32_t, int32_t, void*, int32_t); typedef int32_t (*iFEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); +typedef int32_t (*iFEpuuLppp_t)(x64emu_t*, void*, uint32_t, uint32_t, uintptr_t, void*, 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 (*iFuiifpppp_t)(uint32_t, int32_t, int32_t, float, void*, void*, void*, void*); @@ -1107,6 +1132,7 @@ void dFd(x64emu_t *emu, uintptr_t fcn) { dFd_t fn = (dFd_t)fcn; emu->xmm[0].d[0] void dFp(x64emu_t *emu, uintptr_t fcn) { dFp_t fn = (dFp_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI); } void lFE(x64emu_t *emu, uintptr_t fcn) { lFE_t fn = (lFE_t)fcn; R_RAX=(intptr_t)fn(emu); } void lFi(x64emu_t *emu, uintptr_t fcn) { lFi_t fn = (lFi_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI); } +void lFl(x64emu_t *emu, uintptr_t fcn) { lFl_t fn = (lFl_t)fcn; R_RAX=(intptr_t)fn((intptr_t)R_RDI); } void lFp(x64emu_t *emu, uintptr_t fcn) { lFp_t fn = (lFp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI); } void LFE(x64emu_t *emu, uintptr_t fcn) { LFE_t fn = (LFE_t)fcn; R_RAX=(uintptr_t)fn(emu); } void LFv(x64emu_t *emu, uintptr_t fcn) { LFv_t fn = (LFv_t)fcn; R_RAX=(uintptr_t)fn(); } @@ -1187,6 +1213,7 @@ void uFUp(x64emu_t *emu, uintptr_t fcn) { uFUp_t fn = (uFUp_t)fcn; R_RAX=(uint32 void uFpi(x64emu_t *emu, uintptr_t fcn) { uFpi_t fn = (uFpi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (int32_t)R_RSI); } void uFpu(x64emu_t *emu, uintptr_t fcn) { uFpu_t fn = (uFpu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI); } void uFpU(x64emu_t *emu, uintptr_t fcn) { uFpU_t fn = (uFpU_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint64_t)R_RSI); } +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 UFUp(x64emu_t *emu, uintptr_t fcn) { UFUp_t fn = (UFUp_t)fcn; R_RAX=fn((uint64_t)R_RDI, (void*)R_RSI); } @@ -1203,6 +1230,7 @@ void dFdp(x64emu_t *emu, uintptr_t fcn) { dFdp_t fn = (dFdp_t)fcn; emu->xmm[0].d void dFLL(x64emu_t *emu, uintptr_t fcn) { dFLL_t fn = (dFLL_t)fcn; emu->xmm[0].d[0]=fn((uintptr_t)R_RDI, (uintptr_t)R_RSI); } void dFpi(x64emu_t *emu, uintptr_t fcn) { dFpi_t fn = (dFpi_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (int32_t)R_RSI); } void dFpp(x64emu_t *emu, uintptr_t fcn) { dFpp_t fn = (dFpp_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI); } +void lFll(x64emu_t *emu, uintptr_t fcn) { lFll_t fn = (lFll_t)fcn; R_RAX=(intptr_t)fn((intptr_t)R_RDI, (intptr_t)R_RSI); } void lFpi(x64emu_t *emu, uintptr_t fcn) { lFpi_t fn = (lFpi_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (int32_t)R_RSI); } void lFpp(x64emu_t *emu, uintptr_t fcn) { lFpp_t fn = (lFpp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI); } void LFpi(x64emu_t *emu, uintptr_t fcn) { LFpi_t fn = (LFpi_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI); } @@ -1267,6 +1295,7 @@ void vFpui(x64emu_t *emu, uintptr_t fcn) { vFpui_t fn = (vFpui_t)fcn; fn((void*) void vFpuI(x64emu_t *emu, uintptr_t fcn) { vFpuI_t fn = (vFpuI_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int64_t)R_RDX); } void vFpuu(x64emu_t *emu, uintptr_t fcn) { vFpuu_t fn = (vFpuu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX); } void vFpup(x64emu_t *emu, uintptr_t fcn) { vFpup_t fn = (vFpup_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } +void vFpll(x64emu_t *emu, uintptr_t fcn) { vFpll_t fn = (vFpll_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } void vFpLi(x64emu_t *emu, uintptr_t fcn) { vFpLi_t fn = (vFpLi_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } void vFpLL(x64emu_t *emu, uintptr_t fcn) { vFpLL_t fn = (vFpLL_t)fcn; fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } void vFppi(x64emu_t *emu, uintptr_t fcn) { vFppi_t fn = (vFppi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } @@ -1311,12 +1340,14 @@ void iFpup(x64emu_t *emu, uintptr_t fcn) { iFpup_t fn = (iFpup_t)fcn; R_RAX=fn(( void iFpfu(x64emu_t *emu, uintptr_t fcn) { iFpfu_t fn = (iFpfu_t)fcn; R_RAX=fn((void*)R_RDI, emu->xmm[0].f[0], (uint32_t)R_RSI); } void iFpff(x64emu_t *emu, uintptr_t fcn) { iFpff_t fn = (iFpff_t)fcn; R_RAX=fn((void*)R_RDI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } void iFpli(x64emu_t *emu, uintptr_t fcn) { iFpli_t fn = (iFpli_t)fcn; R_RAX=fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX); } +void iFpll(x64emu_t *emu, uintptr_t fcn) { iFpll_t fn = (iFpll_t)fcn; R_RAX=fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } void iFplp(x64emu_t *emu, uintptr_t fcn) { iFplp_t fn = (iFplp_t)fcn; R_RAX=fn((void*)R_RDI, (intptr_t)R_RSI, (void*)R_RDX); } void iFpLi(x64emu_t *emu, uintptr_t fcn) { iFpLi_t fn = (iFpLi_t)fcn; R_RAX=fn((void*)R_RDI, (uintptr_t)R_RSI, (int32_t)R_RDX); } void iFpLL(x64emu_t *emu, uintptr_t fcn) { iFpLL_t fn = (iFpLL_t)fcn; R_RAX=fn((void*)R_RDI, (uintptr_t)R_RSI, (uintptr_t)R_RDX); } void iFpLp(x64emu_t *emu, uintptr_t fcn) { iFpLp_t fn = (iFpLp_t)fcn; R_RAX=fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX); } void iFppi(x64emu_t *emu, uintptr_t fcn) { iFppi_t fn = (iFppi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void iFppI(x64emu_t *emu, uintptr_t fcn) { iFppI_t fn = (iFppI_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX); } +void iFppC(x64emu_t *emu, uintptr_t fcn) { iFppC_t fn = (iFppC_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX); } void iFppu(x64emu_t *emu, uintptr_t fcn) { iFppu_t fn = (iFppu_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX); } void iFppd(x64emu_t *emu, uintptr_t fcn) { iFppd_t fn = (iFppd_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, emu->xmm[0].d[0]); } void iFppL(x64emu_t *emu, uintptr_t fcn) { iFppL_t fn = (iFppL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } @@ -1352,6 +1383,7 @@ void dFppi(x64emu_t *emu, uintptr_t fcn) { dFppi_t fn = (dFppi_t)fcn; emu->xmm[0 void dFppp(x64emu_t *emu, uintptr_t fcn) { dFppp_t fn = (dFppp_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX); } void lFipi(x64emu_t *emu, uintptr_t fcn) { lFipi_t fn = (lFipi_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void lFipL(x64emu_t *emu, uintptr_t fcn) { lFipL_t fn = (lFipL_t)fcn; R_RAX=(intptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } +void lFlll(x64emu_t *emu, uintptr_t fcn) { lFlll_t fn = (lFlll_t)fcn; R_RAX=(intptr_t)fn((intptr_t)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX); } void lFlpi(x64emu_t *emu, uintptr_t fcn) { lFlpi_t fn = (lFlpi_t)fcn; R_RAX=(intptr_t)fn((intptr_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void lFppi(x64emu_t *emu, uintptr_t fcn) { lFppi_t fn = (lFppi_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void lFSpl(x64emu_t *emu, uintptr_t fcn) { lFSpl_t fn = (lFSpl_t)fcn; R_RAX=(intptr_t)fn(io_convert((void*)R_RDI), (void*)R_RSI, (intptr_t)R_RDX); } @@ -1490,6 +1522,7 @@ void iFpiiL(x64emu_t *emu, uintptr_t fcn) { iFpiiL_t fn = (iFpiiL_t)fcn; R_RAX=f void iFpiip(x64emu_t *emu, uintptr_t fcn) { iFpiip_t fn = (iFpiip_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void iFpiup(x64emu_t *emu, uintptr_t fcn) { iFpiup_t fn = (iFpiup_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void iFpipi(x64emu_t *emu, uintptr_t fcn) { iFpipi_t fn = (iFpipi_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } +void iFpipC(x64emu_t *emu, uintptr_t fcn) { iFpipC_t fn = (iFpipC_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uint8_t)R_RCX); } void iFpipp(x64emu_t *emu, uintptr_t fcn) { iFpipp_t fn = (iFpipp_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void iFpCCC(x64emu_t *emu, uintptr_t fcn) { iFpCCC_t fn = (iFpCCC_t)fcn; R_RAX=fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX); } void iFpWWu(x64emu_t *emu, uintptr_t fcn) { iFpWWu_t fn = (iFpWWu_t)fcn; R_RAX=fn((void*)R_RDI, (uint16_t)R_RSI, (uint16_t)R_RDX, (uint32_t)R_RCX); } @@ -1500,17 +1533,21 @@ void iFpuuu(x64emu_t *emu, uintptr_t fcn) { iFpuuu_t fn = (iFpuuu_t)fcn; R_RAX=f void iFpuup(x64emu_t *emu, uintptr_t fcn) { iFpuup_t fn = (iFpuup_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } void iFpuLL(x64emu_t *emu, uintptr_t fcn) { iFpuLL_t fn = (iFpuLL_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (uintptr_t)R_RCX); } void iFpuLp(x64emu_t *emu, uintptr_t fcn) { iFpuLp_t fn = (iFpuLp_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } +void iFpupu(x64emu_t *emu, uintptr_t fcn) { iFpupu_t fn = (iFpupu_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } void iFpupV(x64emu_t *emu, uintptr_t fcn) { iFpupV_t fn = (iFpupV_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } +void iFplip(x64emu_t *emu, uintptr_t fcn) { iFplip_t fn = (iFplip_t)fcn; R_RAX=fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void iFpLpi(x64emu_t *emu, uintptr_t fcn) { iFpLpi_t fn = (iFpLpi_t)fcn; R_RAX=fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void iFpLpL(x64emu_t *emu, uintptr_t fcn) { iFpLpL_t fn = (iFpLpL_t)fcn; R_RAX=fn((void*)R_RDI, (uintptr_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void iFppii(x64emu_t *emu, uintptr_t fcn) { iFppii_t fn = (iFppii_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void iFppiu(x64emu_t *emu, uintptr_t fcn) { iFppiu_t fn = (iFppiu_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } void iFppiL(x64emu_t *emu, uintptr_t fcn) { iFppiL_t fn = (iFppiL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } void iFppip(x64emu_t *emu, uintptr_t fcn) { iFppip_t fn = (iFppip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } +void iFppCC(x64emu_t *emu, uintptr_t fcn) { iFppCC_t fn = (iFppCC_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX); } void iFppuw(x64emu_t *emu, uintptr_t fcn) { iFppuw_t fn = (iFppuw_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int16_t)R_RCX); } void iFppui(x64emu_t *emu, uintptr_t fcn) { iFppui_t fn = (iFppui_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } void iFppuu(x64emu_t *emu, uintptr_t fcn) { iFppuu_t fn = (iFppuu_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } void iFppup(x64emu_t *emu, uintptr_t fcn) { iFppup_t fn = (iFppup_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX); } +void iFppll(x64emu_t *emu, uintptr_t fcn) { iFppll_t fn = (iFppll_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX); } void iFpplp(x64emu_t *emu, uintptr_t fcn) { iFpplp_t fn = (iFpplp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (void*)R_RCX); } void iFppLp(x64emu_t *emu, uintptr_t fcn) { iFppLp_t fn = (iFppLp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX); } void iFpppi(x64emu_t *emu, uintptr_t fcn) { iFpppi_t fn = (iFpppi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } @@ -1525,6 +1562,7 @@ void uFpipp(x64emu_t *emu, uintptr_t fcn) { uFpipp_t fn = (uFpipp_t)fcn; R_RAX=( void uFpCCC(x64emu_t *emu, uintptr_t fcn) { uFpCCC_t fn = (uFpCCC_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX); } void uFpuip(x64emu_t *emu, uintptr_t fcn) { uFpuip_t fn = (uFpuip_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void uFpuuu(x64emu_t *emu, uintptr_t fcn) { uFpuuu_t fn = (uFpuuu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } +void uFppiu(x64emu_t *emu, uintptr_t fcn) { uFppiu_t fn = (uFppiu_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX); } void uFpppi(x64emu_t *emu, uintptr_t fcn) { uFpppi_t fn = (uFpppi_t)fcn; R_RAX=(uint32_t)fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void UFpipp(x64emu_t *emu, uintptr_t fcn) { UFpipp_t fn = (UFpipp_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void dFppiL(x64emu_t *emu, uintptr_t fcn) { dFppiL_t fn = (dFppiL_t)fcn; emu->xmm[0].d[0]=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX); } @@ -1636,6 +1674,7 @@ void vFpiiii(x64emu_t *emu, uintptr_t fcn) { vFpiiii_t fn = (vFpiiii_t)fcn; fn(( void vFpipii(x64emu_t *emu, uintptr_t fcn) { vFpipii_t fn = (vFpipii_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFpuipp(x64emu_t *emu, uintptr_t fcn) { vFpuipp_t fn = (vFpuipp_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void vFpddii(x64emu_t *emu, uintptr_t fcn) { vFpddii_t fn = (vFpddii_t)fcn; fn((void*)R_RDI, emu->xmm[0].d[0], emu->xmm[1].d[0], (int32_t)R_RSI, (int32_t)R_RDX); } +void vFpliil(x64emu_t *emu, uintptr_t fcn) { vFpliil_t fn = (vFpliil_t)fcn; fn((void*)R_RDI, (intptr_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (intptr_t)R_R8); } void vFppiii(x64emu_t *emu, uintptr_t fcn) { vFppiii_t fn = (vFppiii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } void vFppiip(x64emu_t *emu, uintptr_t fcn) { vFppiip_t fn = (vFppiip_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void vFppWui(x64emu_t *emu, uintptr_t fcn) { vFppWui_t fn = (vFppWui_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (uint16_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } @@ -1650,6 +1689,7 @@ void iFEpLpp(x64emu_t *emu, uintptr_t fcn) { iFEpLpp_t fn = (iFEpLpp_t)fcn; R_RA 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 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); } void iFEpppp(x64emu_t *emu, uintptr_t fcn) { iFEpppp_t fn = (iFEpppp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void iFEpppV(x64emu_t *emu, uintptr_t fcn) { iFEpppV_t fn = (iFEpppV_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } void iFiiipu(x64emu_t *emu, uintptr_t fcn) { iFiiipu_t fn = (iFiiipu_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uint32_t)R_R8); } @@ -1670,14 +1710,21 @@ void iFpipii(x64emu_t *emu, uintptr_t fcn) { iFpipii_t fn = (iFpipii_t)fcn; R_RA void iFpippi(x64emu_t *emu, uintptr_t fcn) { iFpippi_t fn = (iFpippi_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void iFpippp(x64emu_t *emu, uintptr_t fcn) { iFpippp_t fn = (iFpippp_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void iFpCCCC(x64emu_t *emu, uintptr_t fcn) { iFpCCCC_t fn = (iFpCCCC_t)fcn; R_RAX=fn((void*)R_RDI, (uint8_t)R_RSI, (uint8_t)R_RDX, (uint8_t)R_RCX, (uint8_t)R_R8); } +void iFpuuip(x64emu_t *emu, uintptr_t fcn) { iFpuuip_t fn = (iFpuuip_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void iFpuuui(x64emu_t *emu, uintptr_t fcn) { iFpuuui_t fn = (iFpuuui_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } +void iFpuuup(x64emu_t *emu, uintptr_t fcn) { iFpuuup_t fn = (iFpuuup_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } void iFpuuLL(x64emu_t *emu, uintptr_t fcn) { iFpuuLL_t fn = (iFpuuLL_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (uintptr_t)R_R8); } void iFpuupp(x64emu_t *emu, uintptr_t fcn) { iFpuupp_t fn = (iFpuupp_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFplluu(x64emu_t *emu, uintptr_t fcn) { iFplluu_t fn = (iFplluu_t)fcn; R_RAX=fn((void*)R_RDI, (intptr_t)R_RSI, (intptr_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } +void iFpLlpp(x64emu_t *emu, uintptr_t fcn) { iFpLlpp_t fn = (iFpLlpp_t)fcn; R_RAX=fn((void*)R_RDI, (uintptr_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void iFppiip(x64emu_t *emu, uintptr_t fcn) { iFppiip_t fn = (iFppiip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void iFppiup(x64emu_t *emu, uintptr_t fcn) { iFppiup_t fn = (iFppiup_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } +void iFppiLi(x64emu_t *emu, uintptr_t fcn) { iFppiLi_t fn = (iFppiLi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } void iFppipi(x64emu_t *emu, uintptr_t fcn) { iFppipi_t fn = (iFppipi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void iFppipp(x64emu_t *emu, uintptr_t fcn) { iFppipp_t fn = (iFppipp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void iFppupi(x64emu_t *emu, uintptr_t fcn) { iFppupi_t fn = (iFppupi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFppupp(x64emu_t *emu, uintptr_t fcn) { iFppupp_t fn = (iFppupp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFppllp(x64emu_t *emu, uintptr_t fcn) { iFppllp_t fn = (iFppllp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (intptr_t)R_RDX, (intptr_t)R_RCX, (void*)R_R8); } void iFppLpi(x64emu_t *emu, uintptr_t fcn) { iFppLpi_t fn = (iFppLpi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void iFppLpp(x64emu_t *emu, uintptr_t fcn) { iFppLpp_t fn = (iFppLpp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void iFpppii(x64emu_t *emu, uintptr_t fcn) { iFpppii_t fn = (iFpppii_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (int32_t)R_R8); } @@ -1791,6 +1838,7 @@ void iFEiippi(x64emu_t *emu, uintptr_t fcn) { iFEiippi_t fn = (iFEiippi_t)fcn; R void iFEpilpV(x64emu_t *emu, uintptr_t fcn) { iFEpilpV_t fn = (iFEpilpV_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (int32_t)R_RSI, (intptr_t)R_RDX, (void*)R_RCX, (void*)(R_RSP + 8)); } void iFEpippi(x64emu_t *emu, uintptr_t fcn) { iFEpippi_t fn = (iFEpippi_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } void iFEpuppp(x64emu_t *emu, uintptr_t fcn) { iFEpuppp_t fn = (iFEpuppp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } +void iFEppiLi(x64emu_t *emu, uintptr_t fcn) { iFEppiLi_t fn = (iFEppiLi_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } void iFEppppp(x64emu_t *emu, uintptr_t fcn) { iFEppppp_t fn = (iFEppppp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void iFiiiiii(x64emu_t *emu, uintptr_t fcn) { iFiiiiii_t fn = (iFiiiiii_t)fcn; R_RAX=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); } void iFiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiip_t fn = (iFiiiiip_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9); } @@ -1811,6 +1859,7 @@ void iFppuiiL(x64emu_t *emu, uintptr_t fcn) { iFppuiiL_t fn = (iFppuiiL_t)fcn; R void iFppuIII(x64emu_t *emu, uintptr_t fcn) { iFppuIII_t fn = (iFppuIII_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8, (int64_t)R_R9); } void iFppuupp(x64emu_t *emu, uintptr_t fcn) { iFppuupp_t fn = (iFppuupp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void iFppupip(x64emu_t *emu, uintptr_t fcn) { iFppupip_t fn = (iFppupip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (void*)R_R9); } +void iFppLupp(x64emu_t *emu, uintptr_t fcn) { iFppLupp_t fn = (iFppLupp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8, (void*)R_R9); } void iFpppiuu(x64emu_t *emu, uintptr_t fcn) { iFpppiuu_t fn = (iFpppiuu_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } void iFpppipi(x64emu_t *emu, uintptr_t fcn) { iFpppipi_t fn = (iFpppipi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } void iFpppipp(x64emu_t *emu, uintptr_t fcn) { iFpppipp_t fn = (iFpppipp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9); } @@ -1950,6 +1999,7 @@ void vFpippiipi(x64emu_t *emu, uintptr_t fcn) { vFpippiipi_t fn = (vFpippiipi_t) void vFppiiipii(x64emu_t *emu, uintptr_t fcn) { vFppiiipii_t fn = (vFppiiipii_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (int32_t)R_R8, (void*)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void vFppppiipi(x64emu_t *emu, uintptr_t fcn) { vFppppiipi_t fn = (vFppppiipi_t)fcn; fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(int32_t*)(R_RSP + 16)); } void iFEpippppp(x64emu_t *emu, uintptr_t fcn) { iFEpippppp_t fn = (iFEpippppp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } +void iFEpuuLppp(x64emu_t *emu, uintptr_t fcn) { iFEpuuLppp_t fn = (iFEpuuLppp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (uint32_t)R_RDX, (uintptr_t)R_RCX, (void*)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=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=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 iFuiifpppp(x64emu_t *emu, uintptr_t fcn) { iFuiifpppp_t fn = (iFuiifpppp_t)fcn; R_RAX=fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, emu->xmm[0].f[0], (void*)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8)); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 6b9d4035..36ed39f1 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -73,6 +73,7 @@ void dFd(x64emu_t *emu, uintptr_t fnc); void dFp(x64emu_t *emu, uintptr_t fnc); void lFE(x64emu_t *emu, uintptr_t fnc); void lFi(x64emu_t *emu, uintptr_t fnc); +void lFl(x64emu_t *emu, uintptr_t fnc); void lFp(x64emu_t *emu, uintptr_t fnc); void LFE(x64emu_t *emu, uintptr_t fnc); void LFv(x64emu_t *emu, uintptr_t fnc); @@ -153,6 +154,7 @@ void uFUp(x64emu_t *emu, uintptr_t fnc); void uFpi(x64emu_t *emu, uintptr_t fnc); void uFpu(x64emu_t *emu, uintptr_t fnc); 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 UFUp(x64emu_t *emu, uintptr_t fnc); @@ -169,6 +171,7 @@ void dFdp(x64emu_t *emu, uintptr_t fnc); void dFLL(x64emu_t *emu, uintptr_t fnc); void dFpi(x64emu_t *emu, uintptr_t fnc); void dFpp(x64emu_t *emu, uintptr_t fnc); +void lFll(x64emu_t *emu, uintptr_t fnc); void lFpi(x64emu_t *emu, uintptr_t fnc); void lFpp(x64emu_t *emu, uintptr_t fnc); void LFpi(x64emu_t *emu, uintptr_t fnc); @@ -233,6 +236,7 @@ void vFpui(x64emu_t *emu, uintptr_t fnc); void vFpuI(x64emu_t *emu, uintptr_t fnc); void vFpuu(x64emu_t *emu, uintptr_t fnc); void vFpup(x64emu_t *emu, uintptr_t fnc); +void vFpll(x64emu_t *emu, uintptr_t fnc); void vFpLi(x64emu_t *emu, uintptr_t fnc); void vFpLL(x64emu_t *emu, uintptr_t fnc); void vFppi(x64emu_t *emu, uintptr_t fnc); @@ -277,12 +281,14 @@ void iFpup(x64emu_t *emu, uintptr_t fnc); void iFpfu(x64emu_t *emu, uintptr_t fnc); void iFpff(x64emu_t *emu, uintptr_t fnc); void iFpli(x64emu_t *emu, uintptr_t fnc); +void iFpll(x64emu_t *emu, uintptr_t fnc); void iFplp(x64emu_t *emu, uintptr_t fnc); void iFpLi(x64emu_t *emu, uintptr_t fnc); void iFpLL(x64emu_t *emu, uintptr_t fnc); void iFpLp(x64emu_t *emu, uintptr_t fnc); void iFppi(x64emu_t *emu, uintptr_t fnc); void iFppI(x64emu_t *emu, uintptr_t fnc); +void iFppC(x64emu_t *emu, uintptr_t fnc); void iFppu(x64emu_t *emu, uintptr_t fnc); void iFppd(x64emu_t *emu, uintptr_t fnc); void iFppL(x64emu_t *emu, uintptr_t fnc); @@ -318,6 +324,7 @@ void dFppi(x64emu_t *emu, uintptr_t fnc); void dFppp(x64emu_t *emu, uintptr_t fnc); void lFipi(x64emu_t *emu, uintptr_t fnc); void lFipL(x64emu_t *emu, uintptr_t fnc); +void lFlll(x64emu_t *emu, uintptr_t fnc); void lFlpi(x64emu_t *emu, uintptr_t fnc); void lFppi(x64emu_t *emu, uintptr_t fnc); void lFSpl(x64emu_t *emu, uintptr_t fnc); @@ -456,6 +463,7 @@ void iFpiiL(x64emu_t *emu, uintptr_t fnc); void iFpiip(x64emu_t *emu, uintptr_t fnc); void iFpiup(x64emu_t *emu, uintptr_t fnc); void iFpipi(x64emu_t *emu, uintptr_t fnc); +void iFpipC(x64emu_t *emu, uintptr_t fnc); void iFpipp(x64emu_t *emu, uintptr_t fnc); void iFpCCC(x64emu_t *emu, uintptr_t fnc); void iFpWWu(x64emu_t *emu, uintptr_t fnc); @@ -466,17 +474,21 @@ void iFpuuu(x64emu_t *emu, uintptr_t fnc); void iFpuup(x64emu_t *emu, uintptr_t fnc); void iFpuLL(x64emu_t *emu, uintptr_t fnc); void iFpuLp(x64emu_t *emu, uintptr_t fnc); +void iFpupu(x64emu_t *emu, uintptr_t fnc); void iFpupV(x64emu_t *emu, uintptr_t fnc); +void iFplip(x64emu_t *emu, uintptr_t fnc); void iFpLpi(x64emu_t *emu, uintptr_t fnc); void iFpLpL(x64emu_t *emu, uintptr_t fnc); void iFppii(x64emu_t *emu, uintptr_t fnc); void iFppiu(x64emu_t *emu, uintptr_t fnc); void iFppiL(x64emu_t *emu, uintptr_t fnc); void iFppip(x64emu_t *emu, uintptr_t fnc); +void iFppCC(x64emu_t *emu, uintptr_t fnc); void iFppuw(x64emu_t *emu, uintptr_t fnc); void iFppui(x64emu_t *emu, uintptr_t fnc); void iFppuu(x64emu_t *emu, uintptr_t fnc); void iFppup(x64emu_t *emu, uintptr_t fnc); +void iFppll(x64emu_t *emu, uintptr_t fnc); void iFpplp(x64emu_t *emu, uintptr_t fnc); void iFppLp(x64emu_t *emu, uintptr_t fnc); void iFpppi(x64emu_t *emu, uintptr_t fnc); @@ -491,6 +503,7 @@ void uFpipp(x64emu_t *emu, uintptr_t fnc); void uFpCCC(x64emu_t *emu, uintptr_t fnc); void uFpuip(x64emu_t *emu, uintptr_t fnc); void uFpuuu(x64emu_t *emu, uintptr_t fnc); +void uFppiu(x64emu_t *emu, uintptr_t fnc); void uFpppi(x64emu_t *emu, uintptr_t fnc); void UFpipp(x64emu_t *emu, uintptr_t fnc); void dFppiL(x64emu_t *emu, uintptr_t fnc); @@ -602,6 +615,7 @@ void vFpiiii(x64emu_t *emu, uintptr_t fnc); void vFpipii(x64emu_t *emu, uintptr_t fnc); void vFpuipp(x64emu_t *emu, uintptr_t fnc); void vFpddii(x64emu_t *emu, uintptr_t fnc); +void vFpliil(x64emu_t *emu, uintptr_t fnc); void vFppiii(x64emu_t *emu, uintptr_t fnc); void vFppiip(x64emu_t *emu, uintptr_t fnc); void vFppWui(x64emu_t *emu, uintptr_t fnc); @@ -616,6 +630,7 @@ void iFEpLpp(x64emu_t *emu, uintptr_t fnc); void iFEpLpV(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); void iFEpppp(x64emu_t *emu, uintptr_t fnc); void iFEpppV(x64emu_t *emu, uintptr_t fnc); void iFiiipu(x64emu_t *emu, uintptr_t fnc); @@ -636,14 +651,21 @@ void iFpipii(x64emu_t *emu, uintptr_t fnc); void iFpippi(x64emu_t *emu, uintptr_t fnc); void iFpippp(x64emu_t *emu, uintptr_t fnc); void iFpCCCC(x64emu_t *emu, uintptr_t fnc); +void iFpuuip(x64emu_t *emu, uintptr_t fnc); void iFpuuui(x64emu_t *emu, uintptr_t fnc); +void iFpuuup(x64emu_t *emu, uintptr_t fnc); void iFpuuLL(x64emu_t *emu, uintptr_t fnc); void iFpuupp(x64emu_t *emu, uintptr_t fnc); +void iFplluu(x64emu_t *emu, uintptr_t fnc); +void iFpLlpp(x64emu_t *emu, uintptr_t fnc); void iFppiip(x64emu_t *emu, uintptr_t fnc); void iFppiup(x64emu_t *emu, uintptr_t fnc); +void iFppiLi(x64emu_t *emu, uintptr_t fnc); void iFppipi(x64emu_t *emu, uintptr_t fnc); void iFppipp(x64emu_t *emu, uintptr_t fnc); void iFppupi(x64emu_t *emu, uintptr_t fnc); +void iFppupp(x64emu_t *emu, uintptr_t fnc); +void iFppllp(x64emu_t *emu, uintptr_t fnc); void iFppLpi(x64emu_t *emu, uintptr_t fnc); void iFppLpp(x64emu_t *emu, uintptr_t fnc); void iFpppii(x64emu_t *emu, uintptr_t fnc); @@ -757,6 +779,7 @@ void iFEiippi(x64emu_t *emu, uintptr_t fnc); void iFEpilpV(x64emu_t *emu, uintptr_t fnc); void iFEpippi(x64emu_t *emu, uintptr_t fnc); void iFEpuppp(x64emu_t *emu, uintptr_t fnc); +void iFEppiLi(x64emu_t *emu, uintptr_t fnc); void iFEppppp(x64emu_t *emu, uintptr_t fnc); void iFiiiiii(x64emu_t *emu, uintptr_t fnc); void iFiiiiip(x64emu_t *emu, uintptr_t fnc); @@ -777,6 +800,7 @@ void iFppuiiL(x64emu_t *emu, uintptr_t fnc); void iFppuIII(x64emu_t *emu, uintptr_t fnc); void iFppuupp(x64emu_t *emu, uintptr_t fnc); void iFppupip(x64emu_t *emu, uintptr_t fnc); +void iFppLupp(x64emu_t *emu, uintptr_t fnc); void iFpppiuu(x64emu_t *emu, uintptr_t fnc); void iFpppipi(x64emu_t *emu, uintptr_t fnc); void iFpppipp(x64emu_t *emu, uintptr_t fnc); @@ -916,6 +940,7 @@ void vFpippiipi(x64emu_t *emu, uintptr_t fnc); void vFppiiipii(x64emu_t *emu, uintptr_t fnc); void vFppppiipi(x64emu_t *emu, uintptr_t fnc); void iFEpippppp(x64emu_t *emu, uintptr_t fnc); +void iFEpuuLppp(x64emu_t *emu, uintptr_t fnc); void iFiiiiiiip(x64emu_t *emu, uintptr_t fnc); void iFiiupiupi(x64emu_t *emu, uintptr_t fnc); void iFuiifpppp(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedfontconfig.c b/src/wrapped/wrappedfontconfig.c new file mode 100755 index 00000000..007d1bd5 --- /dev/null +++ b/src/wrapped/wrappedfontconfig.c @@ -0,0 +1,56 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <dlfcn.h> + +#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* fontconfigName = "libfontconfig.so.1"; +#define LIBNAME fontconfig + +#define SUPER() \ + +typedef struct fontconfig_my_s { + // functions + #define GO(A, B) B A; + SUPER() + #undef GO +} fontconfig_my_t; + +void* getFontconfigMy(library_t* lib) +{ + fontconfig_my_t* my = (fontconfig_my_t*)calloc(1, sizeof(fontconfig_my_t)); + #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A); + SUPER() + #undef GO + return my; +} +#undef SUPER + +void freeFontconfigMy(void* lib) +{ + //fontconfig_my_t *my = (fontconfig_my_t *)lib; +} + +#define CUSTOM_INIT \ + lib->priv.w.p2 = getFontconfigMy(lib); + +#define CUSTOM_FINI \ + freeFontconfigMy(lib->priv.w.p2); \ + free(lib->priv.w.p2); + +#include "wrappedlib_init.h" + diff --git a/src/wrapped/wrappedfontconfig_private.h b/src/wrapped/wrappedfontconfig_private.h new file mode 100755 index 00000000..6ea2a289 --- /dev/null +++ b/src/wrapped/wrappedfontconfig_private.h @@ -0,0 +1,199 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +GO(FcAtomicCreate, pFp) +GO(FcAtomicDeleteNew, vFp) +GO(FcAtomicDestroy, vFp) +GO(FcAtomicLock, iFp) +//GO(FcAtomicNewFile, +//GO(FcAtomicOrigFile, +//GO(FcAtomicReplaceOrig, +//GO(FcAtomicUnlock, +//GO(FcBlanksAdd, +//GO(FcBlanksCreate, +//GO(FcBlanksDestroy, +//GO(FcBlanksIsMember, +GO(FcCacheCopySet, pFp) +//GO(FcCacheDir, +//GO(FcCacheNumFont, +GO(FcCacheNumSubdir, iFp) +GO(FcCacheSubdir, pFpi) +GO(FcCharSetAddChar, iFpu) +GO(FcCharSetCopy, pFp) +//GO(FcCharSetCount, +//GO(FcCharSetCoverage, +GO(FcCharSetCreate, pFv) +GO(FcCharSetDestroy, vFp) +//GO(FcCharSetEqual, +GO(FcCharSetFirstPage, iFppp) // second p is a fixed sized array +GO(FcCharSetHasChar, iFpi) +//GO(FcCharSetIntersect, +//GO(FcCharSetIntersectCount, +//GO(FcCharSetIsSubset, +//GO(FcCharSetMerge, +//GO(FcCharSetNew, +GO(FcCharSetNextPage, iFppp) // second p is a fixed sized array +GO(FcCharSetSubtract, pFpp) +//GO(FcCharSetSubtractCount, +GO(FcCharSetUnion, pFpp) +//GO(FcConfigAppFontAddDir, +GO(FcConfigAppFontAddFile, iFpp) +//GO(FcConfigAppFontClear, +//GO(FcConfigBuildFonts, +//GO(FcConfigCreate, +//GO(FcConfigDestroy, +//GO(FcConfigEnableHome, +//GO(FcConfigFilename, +GO(FcConfigGetBlanks, pFp) +//GO(FcConfigGetCache, +//GO(FcConfigGetCacheDirs, +//GO(FcConfigGetConfigDirs, +//GO(FcConfigGetConfigFiles, +GO(FcConfigGetCurrent, pFv) +GO(FcConfigGetFontDirs, pFp) +GO(FcConfigGetFonts, pFpi) +//GO(FcConfigGetRescanInterval, +//GO(FcConfigGetRescanInverval, +//GO(FcConfigHome, +//GO(FcConfigParseAndLoad, +//GO(FcConfigReference, +//GO(FcConfigSetCurrent, +//GO(FcConfigSetRescanInterval, +//GO(FcConfigSetRescanInverval, +GO(FcConfigSubstitute, iFppi) +//GO(FcConfigSubstituteWithPat, +//GO(FcConfigUptoDate, +GO(FcDefaultSubstitute, vFp) +//GO(FcDirCacheLoad, +//GO(FcDirCacheLoadFile, +GO(FcDirCacheRead, pFpip) +//GO(FcDirCacheUnlink, +GO(FcDirCacheUnload, vFp) +//GO(FcDirCacheValid, +//GO(FcDirSave, +//GO(FcDirScan, +//GO(FcFileIsDir, +//GO(FcFileScan, +//GO(FcFini, +GO(FcFontList, pFppp) +GO(FcFontMatch, pFppp) +GO(FcFontRenderPrepare, pFppp) +GO(FcFontSetAdd, iFpp) +//GO(FcFontSetCreate, +GO(FcFontSetDestroy, vFp) +//GO(FcFontSetList, +//GO(FcFontSetMatch, +//GO(FcFontSetPrint, +//GO(FcFontSetSort, +//GO(FcFontSetSortDestroy, +GO(FcFontSort, pFppipp) +//GO(FcFreeTypeCharIndex, +//GO(FcFreeTypeCharSet, +//GO(FcFreeTypeCharSetAndSpacing, +GO(FcFreeTypeQuery, pFpipp) +GO(FcFreeTypeQueryFace, pFppip) +//GO(FcGetLangs, +//GO(FcGetVersion, +GO(FcInit, iFv) +//GO(FcInitBringUptoDate, +//GO(FcInitLoadConfig, +//GO(FcInitLoadConfigAndFonts, +GO(FcInitReinitialize, iFv) +//GO(FcLangGetCharSet, +GO(FcLangSetAdd, iFpp) +//GO(FcLangSetCompare, +//GO(FcLangSetContains, +//GO(FcLangSetCopy, +GO(FcLangSetCreate, pFv) +GO(FcLangSetDestroy, vFp) +//GO(FcLangSetEqual, +//GO(FcLangSetGetLangs, +//GO(FcLangSetHash, +GO(FcLangSetHasLang, iFpp) +//GO(FcMatrixCopy, +//GO(FcMatrixEqual, +//GO(FcMatrixMultiply, +//GO(FcMatrixRotate, +//GO(FcMatrixScale, +//GO(FcMatrixShear, +GO(FcNameConstant, iFpp) +//GO(FcNameGetConstant, +//GO(FcNameGetObjectType, +//GO(FcNameParse, +//GO(FcNameRegisterConstants, +//GO(FcNameRegisterObjectTypes, +//GO(FcNameUnparse, +//GO(FcNameUnregisterConstants, +//GO(FcNameUnregisterObjectTypes, +GO(FcObjectSetAdd, iFpp) +//GO2(FcObjectSetBuild, pFpV, FcObjectSetVaBuild) +GO(FcObjectSetCreate, pFv) +GO(FcObjectSetDestroy, vFp) +GO(FcObjectSetVaBuild, pFpp) +GO(FcPatternAdd, iFppiLi) // FcValue is a typedef with int+union, with biggest part is a double => so 1 int and 1"L" +GO(FcPatternAddBool, iFppi) +GO(FcPatternAddCharSet, iFppp) +GO(FcPatternAddDouble, iFppd) +GO(FcPatternAddFTFace, iFppp) +GO(FcPatternAddInteger, iFppi) +GO(FcPatternAddLangSet, iFppp) +GO(FcPatternAddMatrix, iFppp) +GO(FcPatternAddString, iFppp) +GO(FcPatternAddWeak, iFEppiLi) +//GO2(FcPatternBuild, pFpV, FcPatternVaBuild) +GO(FcPatternCreate, pFv) +GO(FcPatternDel, iFpp) +GO(FcPatternDestroy, vFp) +GO(FcPatternDuplicate, pFp) +GO(FcPatternEqual, iFpp) +//GO(FcPatternEqualSubset, +//GO(FcPatternFilter, +//GO(FcPatternFormat, +GO(FcPatternGet, iFppip) +GO(FcPatternGetBool, iFppip) +GO(FcPatternGetCharSet, iFppip) +GO(FcPatternGetDouble, iFppip) +GO(FcPatternGetFTFace, iFppip) +GO(FcPatternGetInteger, iFppip) +GO(FcPatternGetLangSet, iFppip) +GO(FcPatternGetMatrix, iFppip) +GO(FcPatternGetString, iFppip) +//GO(FcPatternHash, +//GO(FcPatternPrint, +//GO(FcPatternReference, +//GO(FcPatternRemove, +GO(FcPatternVaBuild, pFpp) +GO(FcStrBasename, pFp) +GO(FcStrCmp, iFpp) +GO(FcStrCmpIgnoreCase, iFpp) +GO(FcStrCopy, pFp) +GO(FcStrCopyFilename, pFp) +GO(FcStrDirname, pFp) +GO(FcStrDowncase, pFp) +GO(FcStrFree, vFp) +GO(FcStrListCreate, pFp) +GO(FcStrListDone, vFp) +GO(FcStrListFirst, vFp) //2.11.0+ +GO(FcStrListNext, pFp) +GO(FcStrPlus, pFpp) +GO(FcStrSetAdd, iFpp) +GO(FcStrSetAddFilename, iFpp) +GO(FcStrSetCreate, pFv) +GO(FcStrSetDel, iFpp) +GO(FcStrSetDestroy, vFp) +GO(FcStrSetEqual, iFpp) +GO(FcStrSetMember, iFpp) +GO(FcStrStr, pFpp) +GO(FcStrStrIgnoreCase, pFpp) +GO(FcUcs4ToUtf8, iFup) +GO(FcUtf16Len, iFpipp) +GO(FcUtf16ToUcs4, iFpipi) +GO(FcUtf8Len, iFpipp) +GO(FcUtf8ToUcs4, iFppi) +//GO(FcValueDestroy, +//GO(FcValueEqual, +//GO(FcValuePrint, +//GO(FcValueSave, +//GO(_fini, +//GO(_init, diff --git a/src/wrapped/wrappedfreetype.c b/src/wrapped/wrappedfreetype.c new file mode 100755 index 00000000..25a25e47 --- /dev/null +++ b/src/wrapped/wrappedfreetype.c @@ -0,0 +1,171 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#define _GNU_SOURCE /* See feature_test_macros(7) */ +#include <dlfcn.h> + +#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* freetypeName = "libfreetype.so.6"; +#define LIBNAME freetype + +typedef union FT_StreamDesc_s +{ + long value; + void* pointer; +} FT_StreamDesc_t; + +typedef struct FT_StreamRec_s +{ + unsigned char* base; + unsigned long size; + unsigned long pos; + + FT_StreamDesc_t descriptor; + FT_StreamDesc_t pathname; + void* read; + void* close; + + void* memory; + unsigned char* cursor; + unsigned char* limit; + +} FT_StreamRec_t; + +typedef struct FT_Open_Args_s +{ +uint32_t flags; +const uint8_t* memory_base; +intptr_t memory_size; +char* pathname; +FT_StreamRec_t* stream; +void* driver; +int32_t num_params; +void* params; + +} FT_Open_Args_t; + +typedef int (*iFpplp_t) (void*, void*, long, void*); +typedef int (*iFpuuLppp_t) (void*, uint32_t, uint32_t, uintptr_t, void*, void*, void*); + +#define SUPER() \ + GO(FT_Open_Face, iFpplp_t) \ + GO(FTC_Manager_New, iFpuuLppp_t) + +typedef struct freetype_my_s { + // functions + #define GO(A, B) B A; + SUPER() + #undef GO +} freetype_my_t; + +void* getFreeTypeMy(library_t* lib) +{ + freetype_my_t* my = (freetype_my_t*)calloc(1, sizeof(freetype_my_t)); + #define GO(A, W) my->A = (W)dlsym(lib->priv.w.lib, #A); + SUPER() + #undef GO + return my; +} +#undef SUPER + +void freeFreeTypeMy(void* lib) +{ + //freetype_my_t *my = (freetype_my_t *)lib; +} + +// utility functions +#define SUPER() \ +GO(0) \ +GO(1) \ +GO(2) \ +GO(3) \ +GO(4) + +// FTC_Face_Requester +#define GO(A) \ +static uintptr_t my_FTC_Face_Requester_fct_##A = 0; \ +static int my_FTC_Face_Requester_##A(void* face_id, void* lib, void* req, void* aface) \ +{ \ + return (int)RunFunction(my_context, my_FTC_Face_Requester_fct_##A, 4, face_id, lib, req, aface); \ +} +SUPER() +#undef GO +static void* find_FTC_Face_Requester_Fct(void* fct) +{ + if(!fct) return NULL; + void* p; + if((p = GetNativeFnc((uintptr_t)fct))) return p; + #define GO(A) if(my_FTC_Face_Requester_fct_##A == (uintptr_t)fct) return my_FTC_Face_Requester_##A; + SUPER() + #undef GO + #define GO(A) if(my_FTC_Face_Requester_fct_##A == 0) {my_FTC_Face_Requester_fct_##A = (uintptr_t)fct; return my_FTC_Face_Requester_##A; } + SUPER() + #undef GO + printf_log(LOG_NONE, "Warning, no more slot for libfreetype FTC_Face_Requester callback\n"); + return NULL; +} + + +static uintptr_t my_iofunc = 0; +static unsigned long my_FT_Stream_IoFunc(FT_StreamRec_t* stream, unsigned long offset, unsigned char* buffer, unsigned long count ) +{ + return (unsigned long)RunFunction(my_context, my_iofunc, 4, stream, offset, buffer, count); +} + +static uintptr_t my_closefunc = 0; +static void my_FT_Stream_CloseFunc(FT_StreamRec_t* stream) +{ + RunFunction(my_context, my_closefunc, 1, stream); +} + +EXPORT int my_FT_Open_Face(x64emu_t* emu, void* library, FT_Open_Args_t* args, long face_index, void* aface) +{ + library_t* lib = GetLibInternal(freetypeName); + freetype_my_t* my = (freetype_my_t*)lib->priv.w.p2; + + int wrapstream = (args->flags&0x02)?1:0; + if(wrapstream) { + my_iofunc = (uintptr_t)args->stream->read; + if(my_iofunc) + args->stream->read = my_FT_Stream_IoFunc; + my_closefunc = (uintptr_t)args->stream->close; + if(my_closefunc) + args->stream->close = my_FT_Stream_CloseFunc; + } + int ret = my->FT_Open_Face(library, args, face_index, aface); + /*if(wrapstream) { + args->stream->read = (void*)my_iofunc; + args->stream->close = (void*)my_closefunc; + }*/ + return ret; +} + +EXPORT int my_FTC_Manager_New(x64emu_t* emu, void* l, uint32_t max_faces, uint32_t max_sizes, uintptr_t max_bytes, void* req, void* data, void* aman) +{ + library_t* lib = GetLibInternal(freetypeName); + freetype_my_t* my = (freetype_my_t*)lib->priv.w.p2; + + return my->FTC_Manager_New(l, max_faces, max_sizes, max_bytes, find_FTC_Face_Requester_Fct(req), data, aman); +} + +#define CUSTOM_INIT \ + lib->priv.w.p2 = getFreeTypeMy(lib); + +#define CUSTOM_FINI \ + freeFreeTypeMy(lib->priv.w.p2); \ + free(lib->priv.w.p2); + +#include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedfreetype_private.h b/src/wrapped/wrappedfreetype_private.h new file mode 100755 index 00000000..b85c2fb9 --- /dev/null +++ b/src/wrapped/wrappedfreetype_private.h @@ -0,0 +1,217 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +GO(FT_Activate_Size, iFp) +//GO(FT_Add_Default_Modules, +//GO(FT_Add_Module, +GO(FT_Angle_Diff, lFll) +GO(FT_Atan2, lFll) +GO(FT_Attach_File, iFpp) +GO(FT_Attach_Stream, iFpp) +GO(FT_Bitmap_Convert, iFpppi) +GO(FT_Bitmap_Copy, iFppp) +GO(FT_Bitmap_Done, iFpp) +GO(FT_Bitmap_Embolden, iFppll) +GO(FT_Bitmap_Init, vFp) +GO(FT_Bitmap_New, vFp) +//GO(FTC_CMapCache_Lookup, +//GO(FTC_CMapCache_New, +//GO(FT_CeilFix, +//GO(FTC_ImageCache_Lookup, +//GO(FTC_ImageCache_LookupScaler, +//GO(FTC_ImageCache_New, +//GO(FT_ClassicKern_Free, +//GO(FT_ClassicKern_Validate, +//GO(FTC_Manager_Done, +//GO(FTC_Manager_LookupFace, +//GO(FTC_Manager_LookupSize, +//GO(FTC_Manager_New, +//GO(FTC_Manager_RemoveFaceID, +//GO(FTC_Manager_Reset, +//GO(FTC_Node_Unref, +GO(FT_Cos, lFl) +//GO(FTC_SBitCache_Lookup, +//GO(FTC_SBitCache_LookupScaler, +//GO(FTC_SBitCache_New, +//GO(FT_DivFix, +GO(FT_Done_Face, iFp) +GO(FT_Done_FreeType, iFp) +GO(FT_Done_Glyph, vFp) +GO(FT_Done_Library, iFp) +GO(FT_Done_Size, iFp) +//GO(FT_Face_CheckTrueTypePatents, +//GO(FT_Face_GetCharsOfVariant, +//GO(FT_Face_GetCharVariantIndex, +//GO(FT_Face_GetCharVariantIsDefault, +//GO(FT_Face_GetVariantSelectors, +//GO(FT_Face_GetVariantsOfChar, +GO(FT_Face_Properties, iFpup) +//GO(FT_Face_SetUnpatentedHinting, +//GO(FT_FloorFix, +GO(FT_Get_Advance, iFpiup) +GO(FT_Get_Advances, iFpuuip) +//GO(FT_Get_BDF_Charset_ID, +//GO(FT_Get_BDF_Property, +GO(FT_Get_Char_Index, uFpL) +GO(FT_Get_Charmap_Index, iFp) +//GO(FT_Get_CID_From_Glyph_Index, +//GO(FT_Get_CID_Is_Internally_CID_Keyed, +//GO(FT_Get_CID_Registry_Ordering_Supplement, +//GO(FT_Get_CMap_Format, +//GO(FT_Get_CMap_Language_ID, +GO(FT_Get_First_Char, LFpp) +//GO(FT_Get_Font_Format, +GO(FT_Get_FSType_Flags, WFp) +//GO(FT_Get_Gasp, +GO(FT_Get_Glyph, iFpp) +GO(FT_Get_Glyph_Name, iFpupu) +GO(FT_Get_Kerning, iFpuuup) +//GO(FT_Get_MM_Blend_Coordinates, +//GO(FT_Get_MM_Var, +//GO(FT_Get_Module, +//GO(FT_Get_Multi_Master, +GO(FT_Get_Name_Index, uFpp) +GO(FT_Get_Next_Char, LFpLp) +//GO(FT_Get_PFR_Advance, +//GO(FT_Get_PFR_Kerning, +//GO(FT_Get_PFR_Metrics, +GO(FT_Get_Postscript_Name, pFp) +GO(FT_Get_PS_Font_Info, iFpp) +//GO(FT_Get_PS_Font_Private, +//GO(FT_Get_PS_Font_Value, +//GO(FT_Get_Renderer, +//GO(FT_Get_Sfnt_LangTag, +GO(FT_Get_Sfnt_Name, iFpip) +GO(FT_Get_Sfnt_Name_Count, uFp) +GO(FT_Get_Sfnt_Table, pFpi) +GO(FT_Get_SubGlyph_Info, iFpuppppp) +GO(FT_Get_Track_Kerning, iFplip) +GO(FT_Get_TrueType_Engine_Type, iFp) +//GO(FT_Get_Var_Blend_Coordinates, +//GO(FT_Get_Var_Design_Coordinates, +GO(FT_Get_WinFNT_Header, iFpp) // does FT_WinFNT_HeaderRec_ needs alignment? +GO(FT_Get_X11_Font_Format, pFp) +GO(FT_Glyph_Copy, iFpp) +GO(FT_Glyph_Get_CBox, vFpup) +GO(FT_GlyphSlot_Embolden, vFp) +GO(FT_GlyphSlot_Oblique, vFp) +GO(FT_GlyphSlot_Own_Bitmap, iFp) +//GO(FT_Glyph_Stroke, +GO(FT_Glyph_StrokeBorder, iFppCC) +GO(FT_Glyph_To_Bitmap, iFpipC) +GO(FT_Glyph_Transform, iFppp) +//GO(FT_Gzip_Uncompress, +//GO(FT_Has_PS_Glyph_Names, +GO(FT_Init_FreeType, iFp) +GO(FT_Library_SetLcdFilter, iFpi) +GO(FT_Library_SetLcdFilterWeights, iFpp) +GO(FT_Library_Version, vFpppp) +//GO(FT_List_Add, +//GO(FT_List_Finalize, +//GO(FT_List_Find, +//GO(FT_List_Insert, +//GO(FT_List_Iterate, +//GO(FT_List_Remove, +//GO(FT_List_Up, +GO(FT_Load_Char, iFpLi) +GO(FT_Load_Glyph, iFpui) +GO(FT_Load_Sfnt_Table, iFpLlpp) +GO(FT_Matrix_Invert, iFp) +GO(FT_Matrix_Multiply, vFpp) +GO(FT_MulDiv, lFlll) +GO(FT_MulFix, lFll) +GO(FT_New_Face, iFpplp) +//GO(FT_New_Library, +GO(FT_New_Memory_Face, iFppllp) +GO(FT_New_Size, iFpp) +GOM(FT_Open_Face, iFEpplp) +//GO(FT_OpenType_Free, +//GO(FT_OpenType_Validate, +GO(FT_Outline_Check, iFp) +GO(FT_Outline_Copy, iFpp) +GO(FT_Outline_Decompose, iFppp) +GO(FT_Outline_Done, iFpp) +//GO(FT_Outline_Done_Internal, +GO(FT_Outline_Embolden, iFpl) +GO(FT_Outline_EmboldenXY, iFpll) +GO(FT_Outline_Get_BBox, iFpp) +GO(FT_Outline_Get_Bitmap, iFppp) +GO(FT_Outline_Get_CBox, vFpp) +//GO(FT_Outline_GetInsideBorder, +//GO(FT_Outline_Get_Orientation, +//GO(FT_Outline_GetOutsideBorder, +GO(FT_Outline_New, iFpuip) +//GO(FT_Outline_New_Internal, +GO(FT_Outline_Render, iFppp) +GO(FT_Outline_Reverse, vFp) +GO(FT_Outline_Transform, vFpp) +GO(FT_Outline_Translate, vFpll) +//GO(FT_Property_Get, +GO(FT_Property_Set, iFpppp) +GO(FT_Reference_Face, iFp) +//GO(FT_Reference_Library, +//GO(FT_Remove_Module, +GO(FT_Render_Glyph, iFpi) +GO(FT_Request_Size, iFpp) +//GO(FT_RoundFix, +GO(FT_Select_Charmap, iFpi) +GO(FT_Select_Size, iFpi) +GO(FT_Set_Charmap, iFpp) +GO(FT_Set_Char_Size, iFplluu) +//GO(FT_Set_Debug_Hook, +//GO(FT_Set_Default_Properties, +//GO(FT_Set_MM_Blend_Coordinates, +//GO(FT_Set_MM_Design_Coordinates, +GO(FT_Set_Pixel_Sizes, iFpuu) +//GO(FT_Set_Renderer, +GO(FT_Set_Transform, vFppp) +//GO(FT_Set_Var_Blend_Coordinates, +//GO(FT_Set_Var_Design_Coordinates, +//GO(FT_Sfnt_Table_Info, +GO(FT_Sin, lFl) +//GO(FT_Stream_OpenBzip2, +//GO(FT_Stream_OpenGzip, +//GO(FT_Stream_OpenLZW, +GO(FT_Stroker_BeginSubPath, iFppC) +GO(FT_Stroker_ConicTo, iFppp) +GO(FT_Stroker_CubicTo, iFpppp) +GO(FT_Stroker_Done, vFp) +GO(FT_Stroker_EndSubPath, iFp) +GO(FT_Stroker_Export, vFpp) +GO(FT_Stroker_ExportBorder, vFpip) +GO(FT_Stroker_GetBorderCounts, iFpipp) +GO(FT_Stroker_GetCounts, iFppp) +GO(FT_Stroker_LineTo, iFpp) +GO(FT_Stroker_New, iFpp) +GO(FT_Stroker_ParseOutline, iFppC) +GO(FT_Stroker_Rewind, vFp) +GO(FT_Stroker_Set, vFpliil) +GO(FT_Tan, lFl) +//GO(FT_TrueTypeGX_Free, +//GO(FT_TrueTypeGX_Validate, +GO(FT_Vector_From_Polar, vFpll) +GO(FT_Vector_Length, lFp) +GO(FT_Vector_Polarize, vFppp) +GO(FT_Vector_Rotate, vFpl) +GO(FT_Vector_Transform, vFpp) +GO(FT_Vector_Unit, vFpl) + +GO(FTC_CMapCache_Lookup, uFppiu) +GO(FTC_CMapCache_New, iFpp) +GO(FTC_ImageCache_Lookup, iFppupp) +GO(FTC_ImageCache_LookupScaler, iFppLupp) +GO(FTC_ImageCache_New, iFpp) +GO(FTC_Manager_Done, vFp) +GO(FTC_Manager_LookupFace, iFppp) +GO(FTC_Manager_LookupSize, iFppp) +GOM(FTC_Manager_New, iFEpuuLppp) +GO(FTC_Manager_RemoveFaceID, vFpp) +GO(FTC_Manager_Reset, vFp) +GO(FTC_Node_Unref, vFpp) +GO(FTC_SBitCache_Lookup, iFppupp) +GO(FTC_SBitCache_LookupScaler, iFppLupp) +GO(FTC_SBitCache_New, iFpp) + +//GO(TT_New_Context, +//GO(TT_RunIns, diff --git a/src/wrapped/wrappedldlinux.c b/src/wrapped/wrappedldlinux.c index 002a426f..eaea93d8 100755 --- a/src/wrapped/wrappedldlinux.c +++ b/src/wrapped/wrappedldlinux.c @@ -16,8 +16,8 @@ #include "box64context.h" typedef struct my_tls_s { - int i; - uint32_t o; + unsigned long int i; + unsigned long int o; } my_tls_t; EXPORT void* my___tls_get_addr(x64emu_t* emu, void* p) @@ -26,13 +26,6 @@ EXPORT void* my___tls_get_addr(x64emu_t* emu, void* p) return GetDTatOffset(emu->context, t->i, t->o); } -EXPORT void* my____tls_get_addr(x64emu_t* emu) -{ - // the GNU version (with 3 '_') use register for the parameter! - my_tls_t *t = (my_tls_t*)R_RAX; - return GetDTatOffset(emu->context, t->i, t->o); -} - // don't try to load the actual ld-linux (because name is variable), just use box64 itself, as it's linked to ld-linux const char* ldlinuxName = "ld-linux.so.2"; #define LIBNAME ldlinux diff --git a/src/wrapped/wrappedldlinux_private.h b/src/wrapped/wrappedldlinux_private.h index 1c829369..e3bd935b 100755 --- a/src/wrapped/wrappedldlinux_private.h +++ b/src/wrapped/wrappedldlinux_private.h @@ -11,15 +11,14 @@ // _dl_mcount // _dl_rtld_di_serinfo // _dl_tls_setup -DATA(__libc_enable_secure, 4) -DATA(__libc_stack_end, 4) -DATA(__pointer_chk_guard, 4) +DATA(__libc_enable_secure, sizeof(void*)) +DATA(__libc_stack_end, sizeof(void*)) +DATA(__pointer_chk_guard, sizeof(void*)) // _r_debug //type B -DATA(_rtld_global, 4) -DATA(_rtld_global_ro, 4) -DATA(__stack_chk_guard, 4) +DATA(_rtld_global, sizeof(void*)) +DATA(_rtld_global_ro, sizeof(void*)) +DATA(__stack_chk_guard, sizeof(void*)) // defini dans glibc/sysdeps/i386/dl-tls.h -GOM(___tls_get_addr, pFEv) //the parameter tls_index is in a register (EAX?) -GOM(__tls_get_addr, pFEp) //same, but the parameter is in the stack +GOM(__tls_get_addr, pFEp) #endif \ No newline at end of file |