about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/wrapped/generated/functions_list.txt11
-rw-r--r--src/wrapped/generated/wrappedlibrttypes.h11
-rw-r--r--src/wrapped/generated/wrapper.c5
-rw-r--r--src/wrapped/generated/wrapper.h2
-rw-r--r--src/wrapped/wrappedlibrt.c51
-rw-r--r--src/wrapped/wrappedlibrt_private.h12
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)