diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/wrapped/generated/functions_list.txt | 11 | ||||
| -rw-r--r-- | src/wrapped/generated/wrappedlibrttypes.h | 11 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.c | 5 | ||||
| -rw-r--r-- | src/wrapped/generated/wrapper.h | 2 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibrt.c | 51 | ||||
| -rw-r--r-- | src/wrapped/wrappedlibrt_private.h | 12 |
6 files changed, 80 insertions, 12 deletions
diff --git a/src/wrapped/generated/functions_list.txt b/src/wrapped/generated/functions_list.txt index a2651dd5..8ae130f1 100644 --- a/src/wrapped/generated/functions_list.txt +++ b/src/wrapped/generated/functions_list.txt @@ -1433,6 +1433,7 @@ #() iFEiipp #() iFEiipV #() iFEiipA +#() iFEipip #() iFEippi #() iFEippL #() iFEippp @@ -1470,7 +1471,6 @@ #() iFipuip #() iFipuui #() iFipLup -#() iFippip #() iFippLi #() iFippLp #() iFipppi @@ -4600,8 +4600,17 @@ wrappedlibpthread: - pthread_create wrappedlibresolv: wrappedlibrt: +- iFp: + - aio_read + - aio_read64 + - aio_write + - aio_write64 +- iFip: + - aio_cancel - iFupp: - timer_create +- iFipip: + - lio_listio wrappedlibsm: - iFppp: - SmcRequestSaveYourselfPhase2 diff --git a/src/wrapped/generated/wrappedlibrttypes.h b/src/wrapped/generated/wrappedlibrttypes.h index 83b18783..b4c69426 100644 --- a/src/wrapped/generated/wrappedlibrttypes.h +++ b/src/wrapped/generated/wrappedlibrttypes.h @@ -11,9 +11,18 @@ #define ADDED_FUNCTIONS() #endif +typedef int32_t (*iFp_t)(void*); +typedef int32_t (*iFip_t)(int32_t, void*); typedef int32_t (*iFupp_t)(uint32_t, void*, void*); +typedef int32_t (*iFipip_t)(int32_t, void*, int32_t, void*); #define SUPER() ADDED_FUNCTIONS() \ - GO(timer_create, iFupp_t) + GO(aio_read, iFp_t) \ + GO(aio_read64, iFp_t) \ + GO(aio_write, iFp_t) \ + GO(aio_write64, iFp_t) \ + GO(aio_cancel, iFip_t) \ + GO(timer_create, iFupp_t) \ + GO(lio_listio, iFipip_t) #endif // __wrappedlibrtTYPES_H_ diff --git a/src/wrapped/generated/wrapper.c b/src/wrapped/generated/wrapper.c index fa68049f..8145d821 100644 --- a/src/wrapped/generated/wrapper.c +++ b/src/wrapped/generated/wrapper.c @@ -1469,6 +1469,7 @@ typedef void (*vFppppp_t)(void*, void*, void*, void*, void*); typedef int32_t (*iFEiipp_t)(x64emu_t*, int32_t, int32_t, void*, void*); typedef int32_t (*iFEiipV_t)(x64emu_t*, int32_t, int32_t, void*, void*); typedef int32_t (*iFEiipA_t)(x64emu_t*, int32_t, int32_t, void*, void*); +typedef int32_t (*iFEipip_t)(x64emu_t*, int32_t, void*, int32_t, void*); typedef int32_t (*iFEippi_t)(x64emu_t*, int32_t, void*, void*, int32_t); typedef int32_t (*iFEippL_t)(x64emu_t*, int32_t, void*, void*, uintptr_t); typedef int32_t (*iFEippp_t)(x64emu_t*, int32_t, void*, void*, void*); @@ -1506,7 +1507,6 @@ typedef int32_t (*iFipipu_t)(int32_t, void*, int32_t, void*, uint32_t); typedef int32_t (*iFipuip_t)(int32_t, void*, uint32_t, int32_t, void*); typedef int32_t (*iFipuui_t)(int32_t, void*, uint32_t, uint32_t, int32_t); typedef int32_t (*iFipLup_t)(int32_t, void*, uintptr_t, uint32_t, void*); -typedef int32_t (*iFippip_t)(int32_t, void*, void*, int32_t, void*); typedef int32_t (*iFippLi_t)(int32_t, void*, void*, uintptr_t, int32_t); typedef int32_t (*iFippLp_t)(int32_t, void*, void*, uintptr_t, void*); typedef int32_t (*iFipppi_t)(int32_t, void*, void*, void*, int32_t); @@ -4450,6 +4450,7 @@ void vFppppp(x64emu_t *emu, uintptr_t fcn) { vFppppp_t fn = (vFppppp_t)fcn; fn(( void iFEiipp(x64emu_t *emu, uintptr_t fcn) { iFEiipp_t fn = (iFEiipp_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } void iFEiipV(x64emu_t *emu, uintptr_t fcn) { iFEiipV_t fn = (iFEiipV_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)(R_RSP + 8)); } void iFEiipA(x64emu_t *emu, uintptr_t fcn) { iFEiipA_t fn = (iFEiipA_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (int32_t)R_RSI, (void*)R_RDX, (void*)R_RCX); } +void iFEipip(x64emu_t *emu, uintptr_t fcn) { iFEipip_t fn = (iFEipip_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (int32_t)R_RDX, (void*)R_RCX); } void iFEippi(x64emu_t *emu, uintptr_t fcn) { iFEippi_t fn = (iFEippi_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX); } void iFEippL(x64emu_t *emu, uintptr_t fcn) { iFEippL_t fn = (iFEippL_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX); } void iFEippp(x64emu_t *emu, uintptr_t fcn) { iFEippp_t fn = (iFEippp_t)fcn; R_RAX=(int32_t)fn(emu, (int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX); } @@ -4487,7 +4488,6 @@ void iFipipu(x64emu_t *emu, uintptr_t fcn) { iFipipu_t fn = (iFipipu_t)fcn; R_RA void iFipuip(x64emu_t *emu, uintptr_t fcn) { iFipuip_t fn = (iFipuip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void iFipuui(x64emu_t *emu, uintptr_t fcn) { iFipuui_t fn = (iFipuui_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uint32_t)R_RDX, (uint32_t)R_RCX, (int32_t)R_R8); } void iFipLup(x64emu_t *emu, uintptr_t fcn) { iFipLup_t fn = (iFipLup_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (uintptr_t)R_RDX, (uint32_t)R_RCX, (void*)R_R8); } -void iFippip(x64emu_t *emu, uintptr_t fcn) { iFippip_t fn = (iFippip_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (int32_t)R_RCX, (void*)R_R8); } void iFippLi(x64emu_t *emu, uintptr_t fcn) { iFippLi_t fn = (iFippLi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (int32_t)R_R8); } void iFippLp(x64emu_t *emu, uintptr_t fcn) { iFippLp_t fn = (iFippLp_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (uintptr_t)R_RCX, (void*)R_R8); } void iFipppi(x64emu_t *emu, uintptr_t fcn) { iFipppi_t fn = (iFipppi_t)fcn; R_RAX=(int32_t)fn((int32_t)R_RDI, (void*)R_RSI, (void*)R_RDX, (void*)R_RCX, (int32_t)R_R8); } @@ -7231,7 +7231,6 @@ int isSimpleWrapper(wrapper_t fun) { if (fun == &iFipuip) return 1; if (fun == &iFipuui) return 1; if (fun == &iFipLup) return 1; - if (fun == &iFippip) return 1; if (fun == &iFippLi) return 1; if (fun == &iFippLp) return 1; if (fun == &iFipppi) return 1; diff --git a/src/wrapped/generated/wrapper.h b/src/wrapped/generated/wrapper.h index 66cbc51f..c3c9897b 100644 --- a/src/wrapped/generated/wrapper.h +++ b/src/wrapped/generated/wrapper.h @@ -1470,6 +1470,7 @@ void vFppppp(x64emu_t *emu, uintptr_t fnc); void iFEiipp(x64emu_t *emu, uintptr_t fnc); void iFEiipV(x64emu_t *emu, uintptr_t fnc); void iFEiipA(x64emu_t *emu, uintptr_t fnc); +void iFEipip(x64emu_t *emu, uintptr_t fnc); void iFEippi(x64emu_t *emu, uintptr_t fnc); void iFEippL(x64emu_t *emu, uintptr_t fnc); void iFEippp(x64emu_t *emu, uintptr_t fnc); @@ -1507,7 +1508,6 @@ void iFipipu(x64emu_t *emu, uintptr_t fnc); void iFipuip(x64emu_t *emu, uintptr_t fnc); void iFipuui(x64emu_t *emu, uintptr_t fnc); void iFipLup(x64emu_t *emu, uintptr_t fnc); -void iFippip(x64emu_t *emu, uintptr_t fnc); void iFippLi(x64emu_t *emu, uintptr_t fnc); void iFippLp(x64emu_t *emu, uintptr_t fnc); void iFipppi(x64emu_t *emu, uintptr_t fnc); diff --git a/src/wrapped/wrappedlibrt.c b/src/wrapped/wrappedlibrt.c index f89d353f..b6042c1e 100644 --- a/src/wrapped/wrappedlibrt.c +++ b/src/wrapped/wrappedlibrt.c @@ -4,6 +4,7 @@ #include <string.h> #include <dlfcn.h> #include <signal.h> +#include <aio.h> #include "wrappedlibs.h" @@ -29,6 +30,10 @@ const char* librtName = "librt.so.1"; #define LIBNAME librt +#include "generated/wrappedlibrttypes.h" + +#include "wrappercallback.h" + #define SUPER() \ GO(0) \ GO(1) \ @@ -72,5 +77,51 @@ EXPORT int my_timer_create(x64emu_t* emu, uint32_t clockid, void* sevp, timer_t* return timer_create(clockid, &sevent, timerid); } +EXPORT int my_aio_cancel(x64emu_t emu, int fd, struct aiocb* aiocbp) +{ + if(aiocbp && aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD) + aiocbp->aio_sigevent.sigev_notify_function = findsigev_notifyFct(aiocbp->aio_sigevent.sigev_notify_function); + return my->aio_cancel(fd, aiocbp); +} +EXPORT int my_aio_read(x64emu_t emu, struct aiocb* aiocbp) +{ + if(aiocbp && aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD) + aiocbp->aio_sigevent.sigev_notify_function = findsigev_notifyFct(aiocbp->aio_sigevent.sigev_notify_function); + return my->aio_read(aiocbp); +} +EXPORT int my_aio_read64(x64emu_t emu, struct aiocb* aiocbp) +{ + if(aiocbp && aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD) + aiocbp->aio_sigevent.sigev_notify_function = findsigev_notifyFct(aiocbp->aio_sigevent.sigev_notify_function); + return my->aio_read64(aiocbp); +} +EXPORT int my_aio_write(x64emu_t emu, struct aiocb* aiocbp) +{ + if(aiocbp && aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD) + aiocbp->aio_sigevent.sigev_notify_function = findsigev_notifyFct(aiocbp->aio_sigevent.sigev_notify_function); + return my->aio_write(aiocbp); +} +EXPORT int my_aio_write64(x64emu_t emu, struct aiocb* aiocbp) +{ + if(aiocbp && aiocbp->aio_sigevent.sigev_notify == SIGEV_THREAD) + aiocbp->aio_sigevent.sigev_notify_function = findsigev_notifyFct(aiocbp->aio_sigevent.sigev_notify_function); + return my->aio_write64(aiocbp); +} +EXPORT int mylio_listio(x64emu_t* emu, int mode, struct aiocb* list[], int nent, struct sigevent* sig) +{ + struct sigevent sevent; + if(sig) { + memcpy(&sevent, sig, sizeof(sevent)); + if(sevent.sigev_notify == SIGEV_THREAD) + sevent.sigev_notify_function = findsigev_notifyFct(sevent.sigev_notify_function); + } + return my->lio_listio(mode, list, nent, sig?(&sevent):sig); +} + +#define CUSTOM_INIT \ + getMy(lib); + +#define CUSTOM_FINI \ + freeMy(); #include "wrappedlib_init.h" diff --git a/src/wrapped/wrappedlibrt_private.h b/src/wrapped/wrappedlibrt_private.h index 75eb3faa..0f908297 100644 --- a/src/wrapped/wrappedlibrt_private.h +++ b/src/wrapped/wrappedlibrt_private.h @@ -7,27 +7,27 @@ // time_t is uint32? // mqd_t is int -GO(aio_cancel, iFip) +GOM(aio_cancel, iFEip) // aio_cancel64 GO(aio_error, iFp) GO(aio_error64, iFp) GO(aio_fsync, iFip) GO(aio_fsync64, iFip) GO(aio_init, vFp) -GO(aio_read, iFp) -GO(aio_read64, iFp) +GOM(aio_read, iFEp) +GOM(aio_read64, iFEp) GO(aio_return, lFp) GO(aio_return64, lFp) GO(aio_suspend, iFpip) GO(aio_suspend64, iFpip) -GO(aio_write, iFp) -GO(aio_write64, iFp) +GOM(aio_write, iFEp) +GOM(aio_write64, iFEp) GO(clock_getcpuclockid, iFup) GO(clock_getres, iFup) GO(clock_gettime, iFup) GO(clock_nanosleep, iFuipp) GO(clock_settime, iFup) -GO(lio_listio, iFippip) +GOM(lio_listio, iFEipip) // lio_listio64 GO(mq_close, iFi) GO(mq_getattr, iFip) |