about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rwxr-xr-xsrc/emu/x64syscall.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/emu/x64syscall.c b/src/emu/x64syscall.c
index a1c23c5b..2c94e39a 100755
--- a/src/emu/x64syscall.c
+++ b/src/emu/x64syscall.c
@@ -34,6 +34,7 @@
 #include "x64tls.h"
 
 typedef struct x64_sigaction_s x64_sigaction_t;
+typedef struct x64_stack_s x64_stack_t;
 
 
 //int32_t my_getrandom(x64emu_t* emu, void* buf, uint32_t buflen, uint32_t flags);
@@ -41,6 +42,7 @@ int of_convert(int flag);
 int32_t my_open(x64emu_t* emu, void* pathname, int32_t flags, uint32_t mode);
 
 //int my_sigaction(x64emu_t* emu, int signum, const x86_sigaction_t *act, x86_sigaction_t *oldact);
+int my_sigaltstack(x64emu_t* emu, const x64_stack_t* ss, x64_stack_t* oss);
 //int32_t my_execve(x64emu_t* emu, const char* path, char* const argv[], char* const envp[]);
 void* my_mmap64(x64emu_t* emu, void *addr, unsigned long length, int prot, int flags, int fd, int64_t offset);
 int my_munmap(x64emu_t* emu, void* addr, unsigned long length);
@@ -69,6 +71,7 @@ scwrap_t syscallwrap[] = {
     //{ 10, __NR_mprotect, 3},  // same
     //{ 11, __NR_munmap, 2},    // same
     { 5, __NR_fstat, 2},
+    //{ 131, __NR_sigaltstack, 2},  // wrapped to use my_sigaltstack
     { 186, __NR_gettid, 0 },
     { 202, __NR_futex, 6},
 };
@@ -163,6 +166,9 @@ void EXPORT x64Syscall(x64emu_t *emu)
         case 11: // sys_munmap
             R_EAX = (uint32_t)my_munmap(emu, (void*)R_RDI, R_RSI);
             break;
+        case 131: // sys_sigaltstack
+            R_EAX = (uint32_t)my_sigaltstack(emu, (void*)R_RDI, (void*)R_RSI);
+            break;
         default:
             printf_log(LOG_INFO, "Error: Unsupported Syscall 0x%02Xh (%d)\n", s, s);
             emu->quit = 1;