diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-06 09:37:18 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-06 09:37:18 +0100 |
| commit | 75468d0c4c40c2ee2926c75d0ef0472cde982c23 (patch) | |
| tree | 353666c29e6b2e2ca4a055577b6ef69d8c299dab /src/wrapped/generated | |
| parent | 4978556ca924ae600750bcc41ce8be7095026bf9 (diff) | |
| download | box64-75468d0c4c40c2ee2926c75d0ef0472cde982c23.tar.gz box64-75468d0c4c40c2ee2926c75d0ef0472cde982c23.zip | |
More work on wrapped lib and elf relocations
Diffstat (limited to 'src/wrapped/generated')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 30 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 72 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 36 |
3 files changed, 138 insertions, 0 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index dc2c4ec6..f9ed2567 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -2,10 +2,18 @@ #() vFv #() vFp #() iFE +#() iFv #() iFi #() iFu +#() iFf +#() iFd #() iFp +#() IFf +#() IFd #() IFp +#() UFV +#() fFf +#() dFd #() dFp #() lFp #() LFv @@ -18,12 +26,28 @@ #() iFup #() iFLL #() iFLp +#() iFpi +#() fFif +#() fFfi +#() fFff +#() fFfp +#() dFid +#() dFdi +#() dFdd +#() dFdp #() pFEp #() pFLL +#() pFpV #() vFEpu +#() vFfpp +#() vFdpp #() iFEpp #() iFEpV #() iFpiu +#() fFfff +#() fFffp +#() dFddd +#() dFddp #() pFEpi #() pFEpp #() vFEpup @@ -36,5 +60,11 @@ #() iFEpppp #() iFipppi #() iFEpippppp +#defined(HAVE_LD80BITS) DFD +#defined(HAVE_LD80BITS) DFDD +#defined(HAVE_LD80BITS) DFDp +#!defined(HAVE_LD80BITS) KFK +#!defined(HAVE_LD80BITS) KFKK +#!defined(HAVE_LD80BITS) KFKp #() iFEv -> iFE #() pFEv -> pFE diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index 015fe604..0a0b5ce4 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -73,10 +73,18 @@ typedef void (*vFE_t)(x64emu_t*); typedef void (*vFv_t)(void); typedef void (*vFp_t)(void*); typedef int32_t (*iFE_t)(x64emu_t*); +typedef int32_t (*iFv_t)(void); typedef int32_t (*iFi_t)(int32_t); typedef int32_t (*iFu_t)(uint32_t); +typedef int32_t (*iFf_t)(float); +typedef int32_t (*iFd_t)(double); typedef int32_t (*iFp_t)(void*); +typedef int64_t (*IFf_t)(float); +typedef int64_t (*IFd_t)(double); typedef int64_t (*IFp_t)(void*); +typedef uint64_t (*UFV_t)(void*); +typedef float (*fFf_t)(float); +typedef double (*dFd_t)(double); typedef double (*dFp_t)(void*); typedef intptr_t (*lFp_t)(void*); typedef uintptr_t (*LFv_t)(void); @@ -89,12 +97,28 @@ typedef int32_t (*iFip_t)(int32_t, void*); typedef int32_t (*iFup_t)(uint32_t, void*); typedef int32_t (*iFLL_t)(uintptr_t, uintptr_t); typedef int32_t (*iFLp_t)(uintptr_t, void*); +typedef int32_t (*iFpi_t)(void*, int32_t); +typedef float (*fFif_t)(int32_t, float); +typedef float (*fFfi_t)(float, int32_t); +typedef float (*fFff_t)(float, float); +typedef float (*fFfp_t)(float, void*); +typedef double (*dFid_t)(int32_t, double); +typedef double (*dFdi_t)(double, int32_t); +typedef double (*dFdd_t)(double, double); +typedef double (*dFdp_t)(double, void*); typedef void* (*pFEp_t)(x64emu_t*, void*); typedef void* (*pFLL_t)(uintptr_t, uintptr_t); +typedef void* (*pFpV_t)(void*, void*); typedef void (*vFEpu_t)(x64emu_t*, void*, uint32_t); +typedef void (*vFfpp_t)(float, void*, void*); +typedef void (*vFdpp_t)(double, void*, void*); typedef int32_t (*iFEpp_t)(x64emu_t*, void*, void*); typedef int32_t (*iFEpV_t)(x64emu_t*, void*, void*); typedef int32_t (*iFpiu_t)(void*, int32_t, uint32_t); +typedef float (*fFfff_t)(float, float, float); +typedef float (*fFffp_t)(float, float, void*); +typedef double (*dFddd_t)(double, double, double); +typedef double (*dFddp_t)(double, double, void*); typedef void* (*pFEpi_t)(x64emu_t*, void*, int32_t); typedef void* (*pFEpp_t)(x64emu_t*, void*, void*); typedef void (*vFEpup_t)(x64emu_t*, void*, uint32_t, void*); @@ -108,14 +132,34 @@ typedef int32_t (*iFEpppp_t)(x64emu_t*, void*, void*, void*, void*); typedef int32_t (*iFipppi_t)(int32_t, void*, void*, void*, int32_t); typedef int32_t (*iFEpippppp_t)(x64emu_t*, void*, int32_t, void*, void*, void*, void*, void*); +#if defined(HAVE_LD80BITS) +typedef long double (*DFD_t)(long double); +typedef long double (*DFDD_t)(long double, long double); +typedef long double (*DFDp_t)(long double, void*); +#endif + +#if !defined(HAVE_LD80BITS) +typedef double (*KFK_t)(double); +typedef double (*KFKK_t)(double, double); +typedef double (*KFKp_t)(double, void*); +#endif + void vFE(x64emu_t *emu, uintptr_t fcn) { vFE_t fn = (vFE_t)fcn; fn(emu); } void vFv(x64emu_t *emu, uintptr_t fcn) { vFv_t fn = (vFv_t)fcn; fn(); } void vFp(x64emu_t *emu, uintptr_t fcn) { vFp_t fn = (vFp_t)fcn; fn((void*)R_RDI); } void iFE(x64emu_t *emu, uintptr_t fcn) { iFE_t fn = (iFE_t)fcn; R_RAX=fn(emu); } +void iFv(x64emu_t *emu, uintptr_t fcn) { iFv_t fn = (iFv_t)fcn; R_RAX=fn(); } void iFi(x64emu_t *emu, uintptr_t fcn) { iFi_t fn = (iFi_t)fcn; R_RAX=fn((int32_t)R_RDI); } void iFu(x64emu_t *emu, uintptr_t fcn) { iFu_t fn = (iFu_t)fcn; R_RAX=fn((uint32_t)R_RDI); } +void iFf(x64emu_t *emu, uintptr_t fcn) { iFf_t fn = (iFf_t)fcn; R_RAX=fn(emu->xmm[0].f[0]); } +void iFd(x64emu_t *emu, uintptr_t fcn) { iFd_t fn = (iFd_t)fcn; R_RAX=fn(emu->xmm[0].d[0]); } void iFp(x64emu_t *emu, uintptr_t fcn) { iFp_t fn = (iFp_t)fcn; R_RAX=fn((void*)R_RDI); } +void IFf(x64emu_t *emu, uintptr_t fcn) { IFf_t fn = (IFf_t)fcn; R_RAX=(uint64_t)fn(emu->xmm[0].f[0]); } +void IFd(x64emu_t *emu, uintptr_t fcn) { IFd_t fn = (IFd_t)fcn; R_RAX=(uint64_t)fn(emu->xmm[0].d[0]); } void IFp(x64emu_t *emu, uintptr_t fcn) { IFp_t fn = (IFp_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI); } +void UFV(x64emu_t *emu, uintptr_t fcn) { UFV_t fn = (UFV_t)fcn; R_RAX=fn((void*)(R_RSP + 8)); } +void fFf(x64emu_t *emu, uintptr_t fcn) { fFf_t fn = (fFf_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0]); } +void dFd(x64emu_t *emu, uintptr_t fcn) { dFd_t fn = (dFd_t)fcn; emu->xmm[0].d[0]=fn(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 lFp(x64emu_t *emu, uintptr_t fcn) { lFp_t fn = (lFp_t)fcn; R_RAX=(intptr_t)fn((void*)R_RDI); } void LFv(x64emu_t *emu, uintptr_t fcn) { LFv_t fn = (LFv_t)fcn; R_RAX=(uintptr_t)fn(); } @@ -128,12 +172,28 @@ void iFip(x64emu_t *emu, uintptr_t fcn) { iFip_t fn = (iFip_t)fcn; R_RAX=fn((int void iFup(x64emu_t *emu, uintptr_t fcn) { iFup_t fn = (iFup_t)fcn; R_RAX=fn((uint32_t)R_RDI, (void*)R_RSI); } void iFLL(x64emu_t *emu, uintptr_t fcn) { iFLL_t fn = (iFLL_t)fcn; R_RAX=fn((uintptr_t)R_RDI, (uintptr_t)R_RSI); } void iFLp(x64emu_t *emu, uintptr_t fcn) { iFLp_t fn = (iFLp_t)fcn; R_RAX=fn((uintptr_t)R_RDI, (void*)R_RSI); } +void iFpi(x64emu_t *emu, uintptr_t fcn) { iFpi_t fn = (iFpi_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI); } +void fFif(x64emu_t *emu, uintptr_t fcn) { fFif_t fn = (fFif_t)fcn; emu->xmm[0].f[0]=fn((int32_t)R_RDI, emu->xmm[0].f[0]); } +void fFfi(x64emu_t *emu, uintptr_t fcn) { fFfi_t fn = (fFfi_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], (int32_t)R_RDI); } +void fFff(x64emu_t *emu, uintptr_t fcn) { fFff_t fn = (fFff_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], emu->xmm[1].f[0]); } +void fFfp(x64emu_t *emu, uintptr_t fcn) { fFfp_t fn = (fFfp_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], (void*)R_RDI); } +void dFid(x64emu_t *emu, uintptr_t fcn) { dFid_t fn = (dFid_t)fcn; emu->xmm[0].d[0]=fn((int32_t)R_RDI, emu->xmm[0].d[0]); } +void dFdi(x64emu_t *emu, uintptr_t fcn) { dFdi_t fn = (dFdi_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], (int32_t)R_RDI); } +void dFdd(x64emu_t *emu, uintptr_t fcn) { dFdd_t fn = (dFdd_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], emu->xmm[1].d[0]); } +void dFdp(x64emu_t *emu, uintptr_t fcn) { dFdp_t fn = (dFdp_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], (void*)R_RDI); } void pFEp(x64emu_t *emu, uintptr_t fcn) { pFEp_t fn = (pFEp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI); } void pFLL(x64emu_t *emu, uintptr_t fcn) { pFLL_t fn = (pFLL_t)fcn; R_RAX=(uintptr_t)fn((uintptr_t)R_RDI, (uintptr_t)R_RSI); } +void pFpV(x64emu_t *emu, uintptr_t fcn) { pFpV_t fn = (pFpV_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (void*)(R_RSP + 8)); } void vFEpu(x64emu_t *emu, uintptr_t fcn) { vFEpu_t fn = (vFEpu_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI); } +void vFfpp(x64emu_t *emu, uintptr_t fcn) { vFfpp_t fn = (vFfpp_t)fcn; fn(emu->xmm[0].f[0], (void*)R_RDI, (void*)R_RSI); } +void vFdpp(x64emu_t *emu, uintptr_t fcn) { vFdpp_t fn = (vFdpp_t)fcn; fn(emu->xmm[0].d[0], (void*)R_RDI, (void*)R_RSI); } void iFEpp(x64emu_t *emu, uintptr_t fcn) { iFEpp_t fn = (iFEpp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI); } void iFEpV(x64emu_t *emu, uintptr_t fcn) { iFEpV_t fn = (iFEpV_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)(R_RSP + 8)); } void iFpiu(x64emu_t *emu, uintptr_t fcn) { iFpiu_t fn = (iFpiu_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } +void fFfff(x64emu_t *emu, uintptr_t fcn) { fFfff_t fn = (fFfff_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], emu->xmm[1].f[0], emu->xmm[2].f[0]); } +void fFffp(x64emu_t *emu, uintptr_t fcn) { fFffp_t fn = (fFffp_t)fcn; emu->xmm[0].f[0]=fn(emu->xmm[0].f[0], emu->xmm[1].f[0], (void*)R_RDI); } +void dFddd(x64emu_t *emu, uintptr_t fcn) { dFddd_t fn = (dFddd_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0]); } +void dFddp(x64emu_t *emu, uintptr_t fcn) { dFddp_t fn = (dFddp_t)fcn; emu->xmm[0].d[0]=fn(emu->xmm[0].d[0], emu->xmm[1].d[0], (void*)R_RDI); } void pFEpi(x64emu_t *emu, uintptr_t fcn) { pFEpi_t fn = (pFEpi_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (int32_t)R_RSI); } void pFEpp(x64emu_t *emu, uintptr_t fcn) { pFEpp_t fn = (pFEpp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI); } void vFEpup(x64emu_t *emu, uintptr_t fcn) { vFEpup_t fn = (vFEpup_t)fcn; fn(emu, (void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX); } @@ -147,5 +207,17 @@ void iFEpppp(x64emu_t *emu, uintptr_t fcn) { iFEpppp_t fn = (iFEpppp_t)fcn; R_RA void iFipppi(x64emu_t *emu, uintptr_t fcn) { iFipppi_t fn = (iFipppi_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } 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)); } +#if defined(HAVE_LD80BITS) +void DFD(x64emu_t *emu, uintptr_t fcn) { DFD_t fn = (DFD_t)fcn; long double ld=fn(*(long double*)(R_RSP + 8)); fpu_do_push(emu); ST0val = ld; } +void DFDD(x64emu_t *emu, uintptr_t fcn) { DFDD_t fn = (DFDD_t)fcn; long double ld=fn(*(long double*)(R_RSP + 8), *(long double*)(R_RSP + 24)); fpu_do_push(emu); ST0val = ld; } +void DFDp(x64emu_t *emu, uintptr_t fcn) { DFDp_t fn = (DFDp_t)fcn; long double ld=fn(*(long double*)(R_RSP + 8), (void*)R_RDI); fpu_do_push(emu); ST0val = ld; } +#endif + +#if !defined(HAVE_LD80BITS) +void KFK(x64emu_t *emu, uintptr_t fcn) { KFK_t fn = (KFK_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8))); fpu_do_push(emu); ST0val = db; } +void KFKK(x64emu_t *emu, uintptr_t fcn) { KFKK_t fn = (KFKK_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), FromLD((void*)(R_RSP + 24))); fpu_do_push(emu); ST0val = db; } +void KFKp(x64emu_t *emu, uintptr_t fcn) { KFKp_t fn = (KFKp_t)fcn; double db=fn(FromLD((void*)(R_RSP + 8)), (void*)R_RDI); fpu_do_push(emu); ST0val = db; } +#endif + void iFEv(x64emu_t *emu, uintptr_t fcn) { iFE_t fn = (iFE_t)fcn; R_RAX=fn(emu); } void pFEv(x64emu_t *emu, uintptr_t fcn) { pFE_t fn = (pFE_t)fcn; R_RAX=(uintptr_t)fn(emu); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index e7bb5765..00897837 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -34,10 +34,18 @@ void vFE(x64emu_t *emu, uintptr_t fnc); void vFv(x64emu_t *emu, uintptr_t fnc); void vFp(x64emu_t *emu, uintptr_t fnc); void iFE(x64emu_t *emu, uintptr_t fnc); +void iFv(x64emu_t *emu, uintptr_t fnc); void iFi(x64emu_t *emu, uintptr_t fnc); void iFu(x64emu_t *emu, uintptr_t fnc); +void iFf(x64emu_t *emu, uintptr_t fnc); +void iFd(x64emu_t *emu, uintptr_t fnc); void iFp(x64emu_t *emu, uintptr_t fnc); +void IFf(x64emu_t *emu, uintptr_t fnc); +void IFd(x64emu_t *emu, uintptr_t fnc); void IFp(x64emu_t *emu, uintptr_t fnc); +void UFV(x64emu_t *emu, uintptr_t fnc); +void fFf(x64emu_t *emu, uintptr_t fnc); +void dFd(x64emu_t *emu, uintptr_t fnc); void dFp(x64emu_t *emu, uintptr_t fnc); void lFp(x64emu_t *emu, uintptr_t fnc); void LFv(x64emu_t *emu, uintptr_t fnc); @@ -50,12 +58,28 @@ void iFip(x64emu_t *emu, uintptr_t fnc); void iFup(x64emu_t *emu, uintptr_t fnc); void iFLL(x64emu_t *emu, uintptr_t fnc); void iFLp(x64emu_t *emu, uintptr_t fnc); +void iFpi(x64emu_t *emu, uintptr_t fnc); +void fFif(x64emu_t *emu, uintptr_t fnc); +void fFfi(x64emu_t *emu, uintptr_t fnc); +void fFff(x64emu_t *emu, uintptr_t fnc); +void fFfp(x64emu_t *emu, uintptr_t fnc); +void dFid(x64emu_t *emu, uintptr_t fnc); +void dFdi(x64emu_t *emu, uintptr_t fnc); +void dFdd(x64emu_t *emu, uintptr_t fnc); +void dFdp(x64emu_t *emu, uintptr_t fnc); void pFEp(x64emu_t *emu, uintptr_t fnc); void pFLL(x64emu_t *emu, uintptr_t fnc); +void pFpV(x64emu_t *emu, uintptr_t fnc); void vFEpu(x64emu_t *emu, uintptr_t fnc); +void vFfpp(x64emu_t *emu, uintptr_t fnc); +void vFdpp(x64emu_t *emu, uintptr_t fnc); void iFEpp(x64emu_t *emu, uintptr_t fnc); void iFEpV(x64emu_t *emu, uintptr_t fnc); void iFpiu(x64emu_t *emu, uintptr_t fnc); +void fFfff(x64emu_t *emu, uintptr_t fnc); +void fFffp(x64emu_t *emu, uintptr_t fnc); +void dFddd(x64emu_t *emu, uintptr_t fnc); +void dFddp(x64emu_t *emu, uintptr_t fnc); void pFEpi(x64emu_t *emu, uintptr_t fnc); void pFEpp(x64emu_t *emu, uintptr_t fnc); void vFEpup(x64emu_t *emu, uintptr_t fnc); @@ -69,6 +93,18 @@ void iFEpppp(x64emu_t *emu, uintptr_t fnc); void iFipppi(x64emu_t *emu, uintptr_t fnc); void iFEpippppp(x64emu_t *emu, uintptr_t fnc); +#if defined(HAVE_LD80BITS) +void DFD(x64emu_t *emu, uintptr_t fnc); +void DFDD(x64emu_t *emu, uintptr_t fnc); +void DFDp(x64emu_t *emu, uintptr_t fnc); +#endif + +#if !defined(HAVE_LD80BITS) +void KFK(x64emu_t *emu, uintptr_t fnc); +void KFKK(x64emu_t *emu, uintptr_t fnc); +void KFKp(x64emu_t *emu, uintptr_t fnc); +#endif + void iFEv(x64emu_t *emu, uintptr_t fnc); void pFEv(x64emu_t *emu, uintptr_t fnc); |