about summary refs log tree commit diff stats
path: root/src/libtools/myalign.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libtools/myalign.c')
-rwxr-xr-xsrc/libtools/myalign.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/libtools/myalign.c b/src/libtools/myalign.c
index eee1d49f..82d57361 100755
--- a/src/libtools/myalign.c
+++ b/src/libtools/myalign.c
@@ -6,6 +6,7 @@
 #include <sys/epoll.h>
 #include <fts.h>
 #include <sys/stat.h>
+#include <sys/sem.h>
 
 #include "x64emu.h"
 #include "emu/x64emu_private.h"
@@ -747,3 +748,36 @@ void AlignEpollEvent(void* dest, void* source, int nbr)
         --nbr;
     }
 }
+
+struct __attribute__((packed)) x64_semid_ds {
+    struct ipc_perm sem_perm;
+    time_t sem_otime;
+    unsigned long _reserved1;
+    time_t sem_ctime;
+    unsigned long _reserved2;
+    unsigned long sem_nsems;
+    unsigned long _reserved3;
+    unsigned long _reserved4;
+};
+
+void UnalignSemidDs(void *dest, const void* source)
+{
+    struct x64_semid_ds *x64_struct = (struct x64_semid_ds*)dest;
+    const struct semid_ds *arm_struct = (const struct semid_ds*)source;
+
+    x64_struct->sem_perm = arm_struct->sem_perm;
+    x64_struct->sem_otime = arm_struct->sem_otime;
+    x64_struct->sem_ctime = arm_struct->sem_ctime;
+    x64_struct->sem_nsems = arm_struct->sem_nsems;
+}
+
+void AlignSemidDs(void *dest, const void* source)
+{
+    const struct x64_semid_ds *x64_struct = (const struct x64_semid_ds*)source;
+    struct semid_ds *arm_struct = (struct semid_ds*)dest;
+
+    arm_struct->sem_perm = x64_struct->sem_perm;
+    arm_struct->sem_otime = x64_struct->sem_otime;
+    arm_struct->sem_ctime = x64_struct->sem_ctime;
+    arm_struct->sem_nsems = x64_struct->sem_nsems;
+}