From: Waldemar Kozaczuk <[email protected]>
Committer: Waldemar Kozaczuk <[email protected]>
Branch: master

syscall: expose shmat, shmctl, shmdt, shmget

Signed-off-by: Waldemar Kozaczuk <[email protected]>

---
diff --git a/linux.cc b/linux.cc
--- a/linux.cc
+++ b/linux.cc
@@ -48,6 +48,7 @@
 #include <sys/prctl.h>
 #include <sys/timerfd.h>
 #include <sys/resource.h>
+#include <sys/shm.h>
 #include <termios.h>
 #include <poll.h>
 #include "tls-switch.hh"
@@ -225,12 +226,17 @@ static int sys_sched_setaffinity(
             pid, len, reinterpret_cast<cpu_set_t *>(mask));
 }
 
+#define __NR_long_mmap __NR_mmap
+
+#define __NR_long_shmat __NR_shmat
 // Only void* return value of mmap is type casted, as syscall returns long.
 long long_mmap(void *addr, size_t length, int prot, int flags, int fd, off_t 
offset) {
     return (long) mmap(addr, length, prot, flags, fd, offset);
 }
-#define __NR_long_mmap __NR_mmap
 
+long long_shmat(int shmid, const void *shmaddr, int shmflg) {
+    return (long) shmat(shmid, shmaddr, shmflg);
+}
 
 #define SYSCALL0(fn) case (__NR_##fn): do { long ret = fn(); 
trace_syscall_##fn(ret); return ret; } while (0)
 
@@ -706,6 +712,10 @@ TRACEPOINT(trace_syscall_sys_clone3, "%d <= %p %lu", int, 
struct clone_args *, s
 TRACEPOINT(trace_syscall_prlimit64, "%d <= %u %d %p %p", int, pid_t, int, 
const struct rlimit *, struct rlimit *);
 TRACEPOINT(trace_syscall_msync, "%d <= 0x%x %lu %d", int, void *, size_t, int);
 TRACEPOINT(trace_syscall_truncate, "%d <= %s %ld", int, const char *, off_t);
+TRACEPOINT(trace_syscall_long_shmat, "0x%x <= %d 0x%x %d", long, int, const 
void *, int);
+TRACEPOINT(trace_syscall_shmctl, "%d <= %d %d %p", int, int, int, struct 
shmid_ds *);
+TRACEPOINT(trace_syscall_shmdt, "%d <= 0x%x", int, const void *)
+TRACEPOINT(trace_syscall_shmget, "%d <= %d %lu %d", int, key_t, size_t, int);
 
 OSV_LIBC_API long syscall(long number, ...)
 {
@@ -854,6 +864,10 @@ OSV_LIBC_API long syscall(long number, ...)
     SYSCALL4(prlimit64, pid_t, int, const struct rlimit *, struct rlimit *);
     SYSCALL3(msync, void *, size_t, int);
     SYSCALL2(truncate, const char *, off_t);
+    SYSCALL3(long_shmat, int, const void *, int);
+    SYSCALL3(shmctl, int, int, struct shmid_ds *);
+    SYSCALL1(shmdt, const void *);
+    SYSCALL3(shmget, key_t, size_t, int);
     }
 
     debug_always("syscall(): unimplemented system call %d\n", number);

-- 
You received this message because you are subscribed to the Google Groups "OSv 
Development" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/osv-dev/00000000000054f336060c908270%40google.com.

Reply via email to