diff options
| author | ptitSeb <sebastien.chev@gmail.com> | 2021-03-25 14:13:05 +0100 |
|---|---|---|
| committer | ptitSeb <sebastien.chev@gmail.com> | 2021-03-25 14:13:05 +0100 |
| commit | 178537116b1c36ce08a7123914460c8b2292c2ee (patch) | |
| tree | bec12fd3554161412f1fb0883e0d6f152d45d99e /src | |
| parent | 11cfae2a984359483b88971fbde3a4e454979ce5 (diff) | |
| download | box64-178537116b1c36ce08a7123914460c8b2292c2ee.tar.gz box64-178537116b1c36ce08a7123914460c8b2292c2ee.zip | |
Added a few more wrapped functions
Diffstat (limited to 'src')
| -rwxr-xr-x | src/library_list.h | 2 | ||||
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 11 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 22 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 11 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibc_private.h | 22 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibpthread_private.h | 4 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibresolv.c | 23 | ||||
| -rwxr-xr-x | src/wrapped/wrappedlibresolv_private.h | 107 |
8 files changed, 188 insertions, 14 deletions
diff --git a/src/library_list.h b/src/library_list.h index 7c37cd9b..0b715adb 100755 --- a/src/library_list.h +++ b/src/library_list.h @@ -81,7 +81,7 @@ GO("libalure.so.1", alure) //GO("libcrypt.so.1", libcrypt) //GO("libutil.so.1", util) //GO("libuuid.so.1", libuuid) -//GO("libresolv.so.2", libresolv) +GO("libresolv.so.2", libresolv) GO("libpulse-simple.so.0", pulsesimple) GO("libpulse.so.0", pulse) //GO("libsndfile.so.1", libsndfile) diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index b7a2e4d5..b1aa1b05 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -63,6 +63,7 @@ #() vFid #() vFip #() vFWW +#() vFWp #() vFui #() vFuu #() vFuf @@ -72,6 +73,7 @@ #() vFff #() vFfp #() vFdd +#() vFLp #() vFpi #() vFpu #() vFpf @@ -83,6 +85,7 @@ #() cFpp #() iFEp #() iFii +#() iFiI #() iFiu #() iFip #() iFIi @@ -305,6 +308,7 @@ #() pFIpi #() pFuii #() pFupi +#() pFupL #() pFUpi #() pFpii #() pFpiu @@ -408,6 +412,7 @@ #() iFipui #() iFippi #() iFippu +#() iFippL #() iFippp #() iFuipp #() iFuuff @@ -431,6 +436,7 @@ #() iFpuLp #() iFpupV #() iFpLpi +#() iFpLpL #() iFppii #() iFppiu #() iFppiL @@ -606,11 +612,13 @@ #() iFppipp #() iFppupi #() iFppLpi +#() iFppLpp #() iFpppii #() iFpppiL #() iFpppip #() iFpppLi #() iFppppi +#() iFppppL #() iFppppp #() IFppIII #() uFEppuu @@ -633,6 +641,7 @@ #() pFEppii #() pFEppip #() pFEpppp +#() pFipipL #() pFuiiiu #() pFuiipp #() pFpiiuu @@ -726,6 +735,7 @@ #() iFpipppp #() iFpupuui #() iFppiiuu +#() iFppiipi #() iFppipiL #() iFppIppp #() iFppuiii @@ -913,6 +923,7 @@ #() iFEpppipppp #() iFiiiiiiiip #() iFiiiipiiip +#() iFipiipippi #() iFdddpppppp #() iFpipLpiiip #() iFppiuiippL diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index c793f52a..2bdaddbb 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -96,6 +96,7 @@ typedef void (*vFif_t)(int32_t, float); typedef void (*vFid_t)(int32_t, double); typedef void (*vFip_t)(int32_t, void*); typedef void (*vFWW_t)(uint16_t, uint16_t); +typedef void (*vFWp_t)(uint16_t, void*); typedef void (*vFui_t)(uint32_t, int32_t); typedef void (*vFuu_t)(uint32_t, uint32_t); typedef void (*vFuf_t)(uint32_t, float); @@ -105,6 +106,7 @@ typedef void (*vFfi_t)(float, int32_t); typedef void (*vFff_t)(float, float); typedef void (*vFfp_t)(float, void*); typedef void (*vFdd_t)(double, double); +typedef void (*vFLp_t)(uintptr_t, void*); typedef void (*vFpi_t)(void*, int32_t); typedef void (*vFpu_t)(void*, uint32_t); typedef void (*vFpf_t)(void*, float); @@ -116,6 +118,7 @@ typedef void (*vFSi_t)(void*, int32_t); typedef int8_t (*cFpp_t)(void*, void*); typedef int32_t (*iFEp_t)(x64emu_t*, void*); typedef int32_t (*iFii_t)(int32_t, int32_t); +typedef int32_t (*iFiI_t)(int32_t, int64_t); typedef int32_t (*iFiu_t)(int32_t, uint32_t); typedef int32_t (*iFip_t)(int32_t, void*); typedef int32_t (*iFIi_t)(int64_t, int32_t); @@ -338,6 +341,7 @@ typedef void* (*pFipp_t)(int32_t, void*, void*); typedef void* (*pFIpi_t)(int64_t, void*, int32_t); typedef void* (*pFuii_t)(uint32_t, int32_t, int32_t); typedef void* (*pFupi_t)(uint32_t, void*, int32_t); +typedef void* (*pFupL_t)(uint32_t, void*, uintptr_t); typedef void* (*pFUpi_t)(uint64_t, void*, int32_t); typedef void* (*pFpii_t)(void*, int32_t, int32_t); typedef void* (*pFpiu_t)(void*, int32_t, uint32_t); @@ -441,6 +445,7 @@ typedef int32_t (*iFipii_t)(int32_t, void*, int32_t, int32_t); typedef int32_t (*iFipui_t)(int32_t, void*, uint32_t, int32_t); typedef int32_t (*iFippi_t)(int32_t, void*, void*, int32_t); typedef int32_t (*iFippu_t)(int32_t, void*, void*, uint32_t); +typedef int32_t (*iFippL_t)(int32_t, void*, void*, uintptr_t); typedef int32_t (*iFippp_t)(int32_t, void*, void*, void*); typedef int32_t (*iFuipp_t)(uint32_t, int32_t, void*, void*); typedef int32_t (*iFuuff_t)(uint32_t, uint32_t, float, float); @@ -464,6 +469,7 @@ 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 (*iFpupV_t)(void*, uint32_t, void*, 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); @@ -639,11 +645,13 @@ 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 (*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); typedef int32_t (*iFpppiL_t)(void*, void*, void*, int32_t, uintptr_t); typedef int32_t (*iFpppip_t)(void*, void*, void*, int32_t, void*); typedef int32_t (*iFpppLi_t)(void*, void*, void*, uintptr_t, int32_t); typedef int32_t (*iFppppi_t)(void*, void*, void*, void*, int32_t); +typedef int32_t (*iFppppL_t)(void*, void*, void*, void*, uintptr_t); typedef int32_t (*iFppppp_t)(void*, void*, void*, void*, void*); typedef int64_t (*IFppIII_t)(void*, void*, int64_t, int64_t, int64_t); typedef uint32_t (*uFEppuu_t)(x64emu_t*, void*, void*, uint32_t, uint32_t); @@ -666,6 +674,7 @@ typedef void* (*pFEpupp_t)(x64emu_t*, void*, uint32_t, void*, void*); typedef void* (*pFEppii_t)(x64emu_t*, void*, void*, int32_t, int32_t); typedef void* (*pFEppip_t)(x64emu_t*, void*, void*, int32_t, void*); typedef void* (*pFEpppp_t)(x64emu_t*, void*, void*, void*, void*); +typedef void* (*pFipipL_t)(int32_t, void*, int32_t, void*, uintptr_t); typedef void* (*pFuiiiu_t)(uint32_t, int32_t, int32_t, int32_t, uint32_t); typedef void* (*pFuiipp_t)(uint32_t, int32_t, int32_t, void*, void*); typedef void* (*pFpiiuu_t)(void*, int32_t, int32_t, uint32_t, uint32_t); @@ -759,6 +768,7 @@ typedef int32_t (*iFpiippp_t)(void*, int32_t, int32_t, void*, void*, void*); typedef int32_t (*iFpipppp_t)(void*, int32_t, void*, void*, void*, void*); typedef int32_t (*iFpupuui_t)(void*, uint32_t, void*, uint32_t, uint32_t, int32_t); typedef int32_t (*iFppiiuu_t)(void*, void*, int32_t, int32_t, uint32_t, uint32_t); +typedef int32_t (*iFppiipi_t)(void*, void*, int32_t, int32_t, void*, int32_t); typedef int32_t (*iFppipiL_t)(void*, void*, int32_t, void*, int32_t, uintptr_t); typedef int32_t (*iFppIppp_t)(void*, void*, int64_t, void*, void*, void*); typedef int32_t (*iFppuiii_t)(void*, void*, uint32_t, int32_t, int32_t, int32_t); @@ -946,6 +956,7 @@ typedef int32_t (*iFEpiiiiipi_t)(x64emu_t*, void*, int32_t, int32_t, int32_t, in typedef int32_t (*iFEpppipppp_t)(x64emu_t*, void*, void*, void*, int32_t, void*, void*, void*, void*); typedef int32_t (*iFiiiiiiiip_t)(int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFiiiipiiip_t)(int32_t, int32_t, int32_t, int32_t, void*, int32_t, int32_t, int32_t, void*); +typedef int32_t (*iFipiipippi_t)(int32_t, void*, int32_t, int32_t, void*, int32_t, void*, void*, int32_t); typedef int32_t (*iFdddpppppp_t)(double, double, double, void*, void*, void*, void*, void*, void*); typedef int32_t (*iFpipLpiiip_t)(void*, int32_t, void*, uintptr_t, void*, int32_t, int32_t, int32_t, void*); typedef int32_t (*iFppiuiippL_t)(void*, void*, int32_t, uint32_t, int32_t, int32_t, void*, void*, uintptr_t); @@ -1110,6 +1121,7 @@ void vFif(x64emu_t *emu, uintptr_t fcn) { vFif_t fn = (vFif_t)fcn; fn((int32_t)R void vFid(x64emu_t *emu, uintptr_t fcn) { vFid_t fn = (vFid_t)fcn; fn((int32_t)R_RDI, emu->xmm[0].d[0]); } void vFip(x64emu_t *emu, uintptr_t fcn) { vFip_t fn = (vFip_t)fcn; fn((int32_t)R_RDI, (void*)R_RSI); } void vFWW(x64emu_t *emu, uintptr_t fcn) { vFWW_t fn = (vFWW_t)fcn; fn((uint16_t)R_RDI, (uint16_t)R_RSI); } +void vFWp(x64emu_t *emu, uintptr_t fcn) { vFWp_t fn = (vFWp_t)fcn; fn((uint16_t)R_RDI, (void*)R_RSI); } void vFui(x64emu_t *emu, uintptr_t fcn) { vFui_t fn = (vFui_t)fcn; fn((uint32_t)R_RDI, (int32_t)R_RSI); } void vFuu(x64emu_t *emu, uintptr_t fcn) { vFuu_t fn = (vFuu_t)fcn; fn((uint32_t)R_RDI, (uint32_t)R_RSI); } void vFuf(x64emu_t *emu, uintptr_t fcn) { vFuf_t fn = (vFuf_t)fcn; fn((uint32_t)R_RDI, emu->xmm[0].f[0]); } @@ -1119,6 +1131,7 @@ void vFfi(x64emu_t *emu, uintptr_t fcn) { vFfi_t fn = (vFfi_t)fcn; fn(emu->xmm[0 void vFff(x64emu_t *emu, uintptr_t fcn) { vFff_t fn = (vFff_t)fcn; fn(emu->xmm[0].f[0], emu->xmm[1].f[0]); } void vFfp(x64emu_t *emu, uintptr_t fcn) { vFfp_t fn = (vFfp_t)fcn; fn(emu->xmm[0].f[0], (void*)R_RDI); } void vFdd(x64emu_t *emu, uintptr_t fcn) { vFdd_t fn = (vFdd_t)fcn; fn(emu->xmm[0].d[0], emu->xmm[1].d[0]); } +void vFLp(x64emu_t *emu, uintptr_t fcn) { vFLp_t fn = (vFLp_t)fcn; fn((uintptr_t)R_RDI, (void*)R_RSI); } void vFpi(x64emu_t *emu, uintptr_t fcn) { vFpi_t fn = (vFpi_t)fcn; fn((void*)R_RDI, (int32_t)R_RSI); } void vFpu(x64emu_t *emu, uintptr_t fcn) { vFpu_t fn = (vFpu_t)fcn; fn((void*)R_RDI, (uint32_t)R_RSI); } void vFpf(x64emu_t *emu, uintptr_t fcn) { vFpf_t fn = (vFpf_t)fcn; fn((void*)R_RDI, emu->xmm[0].f[0]); } @@ -1130,6 +1143,7 @@ void vFSi(x64emu_t *emu, uintptr_t fcn) { vFSi_t fn = (vFSi_t)fcn; fn(io_convert void cFpp(x64emu_t *emu, uintptr_t fcn) { cFpp_t fn = (cFpp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI); } void iFEp(x64emu_t *emu, uintptr_t fcn) { iFEp_t fn = (iFEp_t)fcn; R_RAX=fn(emu, (void*)R_RDI); } void iFii(x64emu_t *emu, uintptr_t fcn) { iFii_t fn = (iFii_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI); } +void iFiI(x64emu_t *emu, uintptr_t fcn) { iFiI_t fn = (iFiI_t)fcn; R_RAX=fn((int32_t)R_RDI, (int64_t)R_RSI); } void iFiu(x64emu_t *emu, uintptr_t fcn) { iFiu_t fn = (iFiu_t)fcn; R_RAX=fn((int32_t)R_RDI, (uint32_t)R_RSI); } void iFip(x64emu_t *emu, uintptr_t fcn) { iFip_t fn = (iFip_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI); } void iFIi(x64emu_t *emu, uintptr_t fcn) { iFIi_t fn = (iFIi_t)fcn; R_RAX=fn((int64_t)R_RDI, (int32_t)R_RSI); } @@ -1352,6 +1366,7 @@ void pFipp(x64emu_t *emu, uintptr_t fcn) { pFipp_t fn = (pFipp_t)fcn; R_RAX=(uin void pFIpi(x64emu_t *emu, uintptr_t fcn) { pFIpi_t fn = (pFIpi_t)fcn; R_RAX=(uintptr_t)fn((int64_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void pFuii(x64emu_t *emu, uintptr_t fcn) { pFuii_t fn = (pFuii_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } void pFupi(x64emu_t *emu, uintptr_t fcn) { pFupi_t fn = (pFupi_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } +void pFupL(x64emu_t *emu, uintptr_t fcn) { pFupL_t fn = (pFupL_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX); } void pFUpi(x64emu_t *emu, uintptr_t fcn) { pFUpi_t fn = (pFUpi_t)fcn; R_RAX=(uintptr_t)fn((uint64_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX); } void pFpii(x64emu_t *emu, uintptr_t fcn) { pFpii_t fn = (pFpii_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX); } void pFpiu(x64emu_t *emu, uintptr_t fcn) { pFpiu_t fn = (pFpiu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (uint32_t)R_RDX); } @@ -1455,6 +1470,7 @@ void iFipii(x64emu_t *emu, uintptr_t fcn) { iFipii_t fn = (iFipii_t)fcn; R_RAX=f void iFipui(x64emu_t *emu, uintptr_t fcn) { iFipui_t fn = (iFipui_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX); } void iFippi(x64emu_t *emu, uintptr_t fcn) { iFippi_t fn = (iFippi_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void iFippu(x64emu_t *emu, uintptr_t fcn) { iFippu_t fn = (iFippu_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uint32_t)R_RCX); } +void iFippL(x64emu_t *emu, uintptr_t fcn) { iFippL_t fn = (iFippL_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void iFippp(x64emu_t *emu, uintptr_t fcn) { iFippp_t fn = (iFippp_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } void iFuipp(x64emu_t *emu, uintptr_t fcn) { iFuipp_t fn = (iFuipp_t)fcn; R_RAX=fn((uint32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void iFuuff(x64emu_t *emu, uintptr_t fcn) { iFuuff_t fn = (iFuuff_t)fcn; R_RAX=fn((uint32_t)R_RDI, (uint32_t)R_RSI, emu->xmm[0].f[0], emu->xmm[1].f[0]); } @@ -1478,6 +1494,7 @@ void iFpuLL(x64emu_t *emu, uintptr_t fcn) { iFpuLL_t fn = (iFpuLL_t)fcn; R_RAX=f 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 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 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); } @@ -1653,11 +1670,13 @@ void iFppipi(x64emu_t *emu, uintptr_t fcn) { iFppipi_t fn = (iFppipi_t)fcn; R_RA 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 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); } void iFpppiL(x64emu_t *emu, uintptr_t fcn) { iFpppiL_t fn = (iFpppiL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (uintptr_t)R_R8); } void iFpppip(x64emu_t *emu, uintptr_t fcn) { iFpppip_t fn = (iFpppip_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void iFpppLi(x64emu_t *emu, uintptr_t fcn) { iFpppLi_t fn = (iFpppLi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } void iFppppi(x64emu_t *emu, uintptr_t fcn) { iFppppi_t fn = (iFppppi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } +void iFppppL(x64emu_t *emu, uintptr_t fcn) { iFppppL_t fn = (iFppppL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void iFppppp(x64emu_t *emu, uintptr_t fcn) { iFppppp_t fn = (iFppppp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8); } void IFppIII(x64emu_t *emu, uintptr_t fcn) { IFppIII_t fn = (IFppIII_t)fcn; R_RAX=(uint64_t)fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (int64_t)R_RCX, (int64_t)R_R8); } void uFEppuu(x64emu_t *emu, uintptr_t fcn) { uFEppuu_t fn = (uFEppuu_t)fcn; R_RAX=(uint32_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX); } @@ -1680,6 +1699,7 @@ void pFEpupp(x64emu_t *emu, uintptr_t fcn) { pFEpupp_t fn = (pFEpupp_t)fcn; R_RA void pFEppii(x64emu_t *emu, uintptr_t fcn) { pFEppii_t fn = (pFEppii_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX); } void pFEppip(x64emu_t *emu, uintptr_t fcn) { pFEppip_t fn = (pFEppip_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void pFEpppp(x64emu_t *emu, uintptr_t fcn) { pFEpppp_t fn = (pFEpppp_t)fcn; R_RAX=(uintptr_t)fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void pFipipL(x64emu_t *emu, uintptr_t fcn) { pFipipL_t fn = (pFipipL_t)fcn; R_RAX=(uintptr_t)fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (uintptr_t)R_R8); } void pFuiiiu(x64emu_t *emu, uintptr_t fcn) { pFuiiiu_t fn = (pFuiiiu_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8); } void pFuiipp(x64emu_t *emu, uintptr_t fcn) { pFuiipp_t fn = (pFuiipp_t)fcn; R_RAX=(uintptr_t)fn((uint32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (void*)R_R8); } void pFpiiuu(x64emu_t *emu, uintptr_t fcn) { pFpiiuu_t fn = (pFpiiuu_t)fcn; R_RAX=(uintptr_t)fn((void*)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8); } @@ -1773,6 +1793,7 @@ void iFpiippp(x64emu_t *emu, uintptr_t fcn) { iFpiippp_t fn = (iFpiippp_t)fcn; R void iFpipppp(x64emu_t *emu, uintptr_t fcn) { iFpipppp_t fn = (iFpipppp_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void iFpupuui(x64emu_t *emu, uintptr_t fcn) { iFpupuui_t fn = (iFpupuui_t)fcn; R_RAX=fn((void*)R_RDI, (uint32_t)R_RSI, (void*)R_RDX, (uint32_t)R_RCX, (uint32_t)R_R8, (int32_t)R_R9); } void iFppiiuu(x64emu_t *emu, uintptr_t fcn) { iFppiiuu_t fn = (iFppiiuu_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (uint32_t)R_R8, (uint32_t)R_R9); } +void iFppiipi(x64emu_t *emu, uintptr_t fcn) { iFppiipi_t fn = (iFppiipi_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9); } void iFppipiL(x64emu_t *emu, uintptr_t fcn) { iFppipiL_t fn = (iFppipiL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX, (int32_t)R_R8, (uintptr_t)R_R9); } void iFppIppp(x64emu_t *emu, uintptr_t fcn) { iFppIppp_t fn = (iFppIppp_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int64_t)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } 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, (int32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9); } @@ -1960,6 +1981,7 @@ void iFEpiiiiipi(x64emu_t *emu, uintptr_t fcn) { iFEpiiiiipi_t fn = (iFEpiiiiipi void iFEpppipppp(x64emu_t *emu, uintptr_t fcn) { iFEpppipppp_t fn = (iFEpppipppp_t)fcn; R_RAX=fn(emu, (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8, (void*)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16)); } void iFiiiiiiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiiiiiip_t fn = (iFiiiiiiiip_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), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } void iFiiiipiiip(x64emu_t *emu, uintptr_t fcn) { iFiiiipiiip_t fn = (iFiiiipiiip_t)fcn; R_RAX=fn((int32_t)R_RDI, (int32_t)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } +void iFipiipippi(x64emu_t *emu, uintptr_t fcn) { iFipiipippi_t fn = (iFipiipippi_t)fcn; R_RAX=fn((int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(int32_t*)(R_RSP + 24)); } void iFdddpppppp(x64emu_t *emu, uintptr_t fcn) { iFdddpppppp_t fn = (iFdddpppppp_t)fcn; R_RAX=fn(emu->xmm[0].d[0], emu->xmm[1].d[0], emu->xmm[2].d[0], (void*)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (void*)R_R8, (void*)R_R9); } void iFpipLpiiip(x64emu_t *emu, uintptr_t fcn) { iFpipLpiiip_t fn = (iFpipLpiiip_t)fcn; R_RAX=fn((void*)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8, (int32_t)R_R9, *(int32_t*)(R_RSP + 8), *(int32_t*)(R_RSP + 16), *(void**)(R_RSP + 24)); } void iFppiuiippL(x64emu_t *emu, uintptr_t fcn) { iFppiuiippL_t fn = (iFppiuiippL_t)fcn; R_RAX=fn((void*)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8, (int32_t)R_R9, *(void**)(R_RSP + 8), *(void**)(R_RSP + 16), *(uintptr_t*)(R_RSP + 24)); } diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 748898ad..d90dfa9e 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -93,6 +93,7 @@ void vFif(x64emu_t *emu, uintptr_t fnc); void vFid(x64emu_t *emu, uintptr_t fnc); void vFip(x64emu_t *emu, uintptr_t fnc); void vFWW(x64emu_t *emu, uintptr_t fnc); +void vFWp(x64emu_t *emu, uintptr_t fnc); void vFui(x64emu_t *emu, uintptr_t fnc); void vFuu(x64emu_t *emu, uintptr_t fnc); void vFuf(x64emu_t *emu, uintptr_t fnc); @@ -102,6 +103,7 @@ void vFfi(x64emu_t *emu, uintptr_t fnc); void vFff(x64emu_t *emu, uintptr_t fnc); void vFfp(x64emu_t *emu, uintptr_t fnc); void vFdd(x64emu_t *emu, uintptr_t fnc); +void vFLp(x64emu_t *emu, uintptr_t fnc); void vFpi(x64emu_t *emu, uintptr_t fnc); void vFpu(x64emu_t *emu, uintptr_t fnc); void vFpf(x64emu_t *emu, uintptr_t fnc); @@ -113,6 +115,7 @@ void vFSi(x64emu_t *emu, uintptr_t fnc); void cFpp(x64emu_t *emu, uintptr_t fnc); void iFEp(x64emu_t *emu, uintptr_t fnc); void iFii(x64emu_t *emu, uintptr_t fnc); +void iFiI(x64emu_t *emu, uintptr_t fnc); void iFiu(x64emu_t *emu, uintptr_t fnc); void iFip(x64emu_t *emu, uintptr_t fnc); void iFIi(x64emu_t *emu, uintptr_t fnc); @@ -335,6 +338,7 @@ void pFipp(x64emu_t *emu, uintptr_t fnc); void pFIpi(x64emu_t *emu, uintptr_t fnc); void pFuii(x64emu_t *emu, uintptr_t fnc); void pFupi(x64emu_t *emu, uintptr_t fnc); +void pFupL(x64emu_t *emu, uintptr_t fnc); void pFUpi(x64emu_t *emu, uintptr_t fnc); void pFpii(x64emu_t *emu, uintptr_t fnc); void pFpiu(x64emu_t *emu, uintptr_t fnc); @@ -438,6 +442,7 @@ void iFipii(x64emu_t *emu, uintptr_t fnc); void iFipui(x64emu_t *emu, uintptr_t fnc); void iFippi(x64emu_t *emu, uintptr_t fnc); void iFippu(x64emu_t *emu, uintptr_t fnc); +void iFippL(x64emu_t *emu, uintptr_t fnc); void iFippp(x64emu_t *emu, uintptr_t fnc); void iFuipp(x64emu_t *emu, uintptr_t fnc); void iFuuff(x64emu_t *emu, uintptr_t fnc); @@ -461,6 +466,7 @@ void iFpuLL(x64emu_t *emu, uintptr_t fnc); void iFpuLp(x64emu_t *emu, uintptr_t fnc); void iFpupV(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); @@ -636,11 +642,13 @@ 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 iFppLpi(x64emu_t *emu, uintptr_t fnc); +void iFppLpp(x64emu_t *emu, uintptr_t fnc); void iFpppii(x64emu_t *emu, uintptr_t fnc); void iFpppiL(x64emu_t *emu, uintptr_t fnc); void iFpppip(x64emu_t *emu, uintptr_t fnc); void iFpppLi(x64emu_t *emu, uintptr_t fnc); void iFppppi(x64emu_t *emu, uintptr_t fnc); +void iFppppL(x64emu_t *emu, uintptr_t fnc); void iFppppp(x64emu_t *emu, uintptr_t fnc); void IFppIII(x64emu_t *emu, uintptr_t fnc); void uFEppuu(x64emu_t *emu, uintptr_t fnc); @@ -663,6 +671,7 @@ void pFEpupp(x64emu_t *emu, uintptr_t fnc); void pFEppii(x64emu_t *emu, uintptr_t fnc); void pFEppip(x64emu_t *emu, uintptr_t fnc); void pFEpppp(x64emu_t *emu, uintptr_t fnc); +void pFipipL(x64emu_t *emu, uintptr_t fnc); void pFuiiiu(x64emu_t *emu, uintptr_t fnc); void pFuiipp(x64emu_t *emu, uintptr_t fnc); void pFpiiuu(x64emu_t *emu, uintptr_t fnc); @@ -756,6 +765,7 @@ void iFpiippp(x64emu_t *emu, uintptr_t fnc); void iFpipppp(x64emu_t *emu, uintptr_t fnc); void iFpupuui(x64emu_t *emu, uintptr_t fnc); void iFppiiuu(x64emu_t *emu, uintptr_t fnc); +void iFppiipi(x64emu_t *emu, uintptr_t fnc); void iFppipiL(x64emu_t *emu, uintptr_t fnc); void iFppIppp(x64emu_t *emu, uintptr_t fnc); void iFppuiii(x64emu_t *emu, uintptr_t fnc); @@ -943,6 +953,7 @@ void iFEpiiiiipi(x64emu_t *emu, uintptr_t fnc); void iFEpppipppp(x64emu_t *emu, uintptr_t fnc); void iFiiiiiiiip(x64emu_t *emu, uintptr_t fnc); void iFiiiipiiip(x64emu_t *emu, uintptr_t fnc); +void iFipiipippi(x64emu_t *emu, uintptr_t fnc); void iFdddpppppp(x64emu_t *emu, uintptr_t fnc); void iFpipLpiiip(x64emu_t *emu, uintptr_t fnc); void iFppiuiippL(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedlibc_private.h b/src/wrapped/wrappedlibc_private.h index 1ecabe4c..082a1570 100755 --- a/src/wrapped/wrappedlibc_private.h +++ b/src/wrapped/wrappedlibc_private.h @@ -102,7 +102,7 @@ GO(catopen, pFpi) GO(cfgetispeed, uFp) GO(cfgetospeed, uFp) GO(cfmakeraw, vFp) -GO(cfree, vFp) +GO2(cfree, vFp, free) GO(cfsetispeed, iFpu) GO(cfsetospeed, iFpu) GO(cfsetspeed, iFpi) @@ -243,7 +243,7 @@ GOW(duplocale, pFp) //GO(endusershell, //GOW(endutent, //GO(endutxent, -//DATAB(__environ, +DATAB(__environ, sizeof(void*)) //GO(envz_add, //GO(envz_entry, //GO(envz_get, @@ -425,7 +425,7 @@ GOW(ftello64, IFp) //GO(ftime, //GO(ftok, //GOW(ftruncate, -//GOW(ftruncate64, +GOW(ftruncate64, iFiI) //GOW(ftrylockfile, //GOW(fts64_children, //GOW(fts64_close, @@ -481,7 +481,7 @@ GO(__getcwd_chk, pFpLL) GO(getdate, pFp) //DATAB(getdate_err, //GOW(getdate_r, -//GOW(__getdelim, +GOW(__getdelim, iFppip) //GOW(getdelim, //GOW(getdirentries, //GO(getdirentries64, @@ -586,7 +586,7 @@ GOW(getrlimit64, iFip) //GO(getrpcent, //GO(getrpcent_r, //GO(getrpcport, -//GOW(getrusage, +GOW(getrusage, iFip) //GOW(gets, //GO(__gets_chk, //GO(getsecretkey, @@ -642,9 +642,9 @@ GOW(getwc, uFp) //GO(globfree, //GOW(globfree64, //GOW(glob_pattern_p, -//GO(gmtime, -//GO(__gmtime_r, -//GOW(gmtime_r, +GO(gmtime, pFp) +GO(__gmtime_r, pFpp) +GOW(gmtime_r, pFpp) //GOW(gnu_dev_major, //GOW(gnu_dev_makedev, //GOW(gnu_dev_minor, @@ -1076,7 +1076,7 @@ GOW(localtime_r, pFpp) //DATAB(locs, //GOW(_longjmp, vFEpi) GOM(longjmp, vFEpi) //weak -//GO(__longjmp_chk, +GOM(__longjmp_chk, vFEpi) //GO(lrand48, //GO(lrand48_r, //GO(lremovexattr, @@ -1486,7 +1486,7 @@ GOW(recvmsg, lFipi) //GOW(regerror, GO(regexec, iFppLpi) //GOW(regfree, -//GO(__register_atfork, +GOM(__register_atfork, iFEpppp) //GOW(register_printf_function, //GOW(register_printf_modifier, //GOW(register_printf_specifier, @@ -1527,7 +1527,7 @@ GOW(rewinddir, vFp) //GO(rexec_af, //DATAB(rexecoptions, //GOI(rindex, -//GOW(rmdir, +GOW(rmdir, iFp) //DATAB(rpc_createerr, //GO(_rpc_dtablesize, //GO(__rpc_thread_createerr, diff --git a/src/wrapped/wrappedlibpthread_private.h b/src/wrapped/wrappedlibpthread_private.h index 7eaa6858..1b25b659 100755 --- a/src/wrapped/wrappedlibpthread_private.h +++ b/src/wrapped/wrappedlibpthread_private.h @@ -153,8 +153,8 @@ GO(pthread_rwlock_rdlock, iFp) //GO(pthread_rwlock_trywrlock, iFp) //GO(__pthread_rwlock_unlock, iFp) //GO2(pthread_rwlock_unlock, iFp, __pthread_rwlock_unlock) // not always defined -//GO(__pthread_rwlock_wrlock, iFp) -//GO2(pthread_rwlock_wrlock, iFp, __pthread_rwlock_wrlock) // not always defined +GO(__pthread_rwlock_wrlock, iFp) +GO(pthread_rwlock_wrlock, iFp) GO(pthread_self, LFv) //GOM(pthread_setaffinity_np, iFELup) GO(pthread_setcancelstate, iFip) diff --git a/src/wrapped/wrappedlibresolv.c b/src/wrapped/wrappedlibresolv.c new file mode 100644 index 00000000..36af9fbc --- /dev/null +++ b/src/wrapped/wrappedlibresolv.c @@ -0,0 +1,23 @@ +#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" + +const char* libresolvName = "libresolv.so.2"; +#define LIBNAME libresolv + +#include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibresolv_private.h b/src/wrapped/wrappedlibresolv_private.h new file mode 100755 index 00000000..8f0ae7b8 --- /dev/null +++ b/src/wrapped/wrappedlibresolv_private.h @@ -0,0 +1,107 @@ +#if !(defined(GO) && defined(GOM) && defined(GO2) && defined(DATA)) +#error meh! +#endif + +GO(__b64_ntop, iFpLpL) +GO(__b64_pton, iFppL) +GO(__dn_comp, iFppipp) +GO(__dn_count_labels, iFp) +GO(__dn_expand, iFppppi) +GOW(dn_expand, iFppppi) +GO(__dn_skipname, iFpp) +GO(__fp_nquery, vFpip) +GO(__fp_query, vFpp) +//GO(__fp_resstat +//GO(_gethtbyaddr +//GO(_gethtbyname +//GO(_gethtbyname2 +//GO(_gethtent +//GO(_getlong +//GO(_getshort +GO(__hostalias, pFp) +GO(inet_neta, pFupL) +GO(inet_net_ntop, pFipipL) +GO(inet_net_pton, iFippL) +GO(__loc_aton, iFpp) +GO(__loc_ntoa, pFpp) +GO(ns_datetosecs, uFpp) +//GO(ns_format_ttl +GO(__ns_get16, uFp) +GOW(ns_get16, uFp) +GO(__ns_get32, LFp) +GOW(ns_get32, LFp) +GO(ns_initparse, iFpip) +//GO(ns_makecanon +//GO(ns_msg_getflag +GO(ns_name_compress, iFppLpp) +GO(ns_name_ntol, iFppL) +GO(__ns_name_ntop, iFppL) +GOW(ns_name_ntop,iFppL) +GO(ns_name_pack, iFppipp) +GO(ns_name_pton, iFppL) +GO(ns_name_rollback, iFpp) +GO(ns_name_skip, iFpp) +GO(ns_name_uncompress, iFppppL) +GO(__ns_name_unpack, iFppppL) +GOW(ns_name_unpack, iFppppL) +GO(ns_parserr, iFpiip) +//GO(ns_parse_ttl +GO(ns_put16, vFup) +GO(ns_put32, vFLp) +//GO(ns_samedomain +//GO(ns_samename +GO(ns_skiprr, iFppii) +//GO(ns_sprintrr +//GO(ns_sprintrrf +//GO(ns_subdomain +GO(__p_cdname, pFppp) +GO(__p_cdnname, pFppip) +GO(__p_class, pFi) +//DATA(__p_class_syms, 4) +GO(__p_fqname, pFppp) +GO(__p_fqnname, pFppipi) +GO(__p_option, pFL) +GO(__p_query, vFp) +GO(__p_rcode, pFi) +//GO(__p_secstodate +GO(__p_time, pFL) +GO(__p_type, pFi) +//DATA(__p_type_syms, 4) +GO(__putlong, vFLp) +GO(__putshort, vFWp) +GO(__res_close, vFv) +//GO(__res_context_hostalias +//GO(__res_context_query +//GO(__res_context_search +GO(__res_dnok, iFp) +//GO(res_gethostbyaddr +//GO(res_gethostbyname +//GO(res_gethostbyname2 +GO(__res_hnok, iFp) +//GO(__res_hostalias +GO(__res_isourserver, iFp) +GO(__res_mailok, iFp) +GO(__res_mkquery, iFipiipippi) +GOW(res_mkquery, iFipiipippi) +GO(__res_nameinquery, iFpiipp) +//GO(__res_nmkquery +//GO(__res_nquery +//GO(__res_nquerydomain +GO(__res_nsearch, iFppiipi) +//GO(__res_nsend +//DATA(_res_opcodes, 4) +GO(__res_ownok, iFp) +GO(__res_queriesmatch, iFpppp) +GO(__res_query, iFpiipi) +GOW(res_query, iFpiipi) +GO(__res_querydomain, iFppiipi) +GOW(res_querydomain, iFppiipi) +GO(__res_search, iFpiipi) +GOW(res_search, iFpiipi) +GO(__res_send, iFpipi) +//GO(res_send_setqhook +//GO(res_send_setrhook +//GO(_sethtent +GO(__sym_ntop, pFpip) +GO(__sym_ntos, pFpip) +GO(__sym_ston, iFppp) |