Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / native_client / src / nonsfi / linux / linux_syscall_wrappers.h
index de8cb1e..a2631d6 100644 (file)
@@ -79,6 +79,17 @@ static inline uint32_t linux_syscall3(int syscall_number,
   return result;
 }
 
+static inline uint32_t linux_syscall4(int syscall_number,
+                                      uint32_t arg1, uint32_t arg2,
+                                      uint32_t arg3, uint32_t arg4) {
+  uint32_t result;
+  __asm__ __volatile__("int $0x80\n"
+                       : "=a"(result)
+                       : "a"(syscall_number), "b"(arg1), "c"(arg2), "d"(arg3),
+                         "S"(arg4));
+  return result;
+}
+
 static inline uint32_t linux_syscall5(int syscall_number,
                                       uint32_t arg1, uint32_t arg2,
                                       uint32_t arg3, uint32_t arg4,
@@ -179,6 +190,23 @@ static inline uint32_t linux_syscall3(int syscall_number,
   return result;
 }
 
+static inline uint32_t linux_syscall4(int syscall_number,
+                                      uint32_t arg1, uint32_t arg2,
+                                      uint32_t arg3, uint32_t arg4) {
+  register uint32_t sysno __asm__("r7") = syscall_number;
+  register uint32_t a1 __asm__("r0") = arg1;
+  register uint32_t a2 __asm__("r1") = arg2;
+  register uint32_t a3 __asm__("r2") = arg3;
+  register uint32_t a4 __asm__("r3") = arg4;
+  register uint32_t result __asm__("r0");
+  __asm__ __volatile__("svc #0\n"
+                       : "=r"(result)
+                       : "r"(sysno),
+                         "r"(a1), "r"(a2), "r"(a3), "r"(a4)
+                       : "memory");
+  return result;
+}
+
 static inline uint32_t linux_syscall5(int syscall_number,
                                       uint32_t arg1, uint32_t arg2,
                                       uint32_t arg3, uint32_t arg4,