arch: Switch SyscallDescABI in for SyscallDesc.
authorGabe Black <gabeblack@google.com>
Tue, 26 Nov 2019 07:26:08 +0000 (23:26 -0800)
committerGabe Black <gabeblack@google.com>
Sat, 8 Feb 2020 12:58:03 +0000 (12:58 +0000)
This lets system calls accept arguments by putting them in their
signatures.

Jira Issue: https://gem5.atlassian.net/browse/GEM5-187

Change-Id: Ieb32b8b5592d894e493466717613ff16e2a03768
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23191
Reviewed-by: Gabe Black <gabeblack@google.com>
Maintainer: Gabe Black <gabeblack@google.com>
Tested-by: kokoro <noreply+kokoro@google.com>
15 files changed:
src/arch/alpha/linux/process.cc
src/arch/alpha/linux/process.hh
src/arch/arm/freebsd/process.cc
src/arch/arm/linux/process.cc
src/arch/mips/linux/process.cc
src/arch/mips/linux/process.hh
src/arch/power/linux/process.cc
src/arch/power/linux/process.hh
src/arch/riscv/linux/process.cc
src/arch/riscv/linux/process.hh
src/arch/sparc/linux/process.hh
src/arch/sparc/linux/syscalls.cc
src/arch/sparc/solaris/process.cc
src/arch/sparc/solaris/process.hh
src/arch/x86/linux/process.cc

index 2a79bbd6a3b3d7886ff66f8b2a92421f33be24ce..91decc79fbe3b8a4c181ab0e5ce1750266f61d28 100644 (file)
@@ -155,7 +155,7 @@ osf_setsysinfoFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
 }
 
 
-SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
+SyscallDescABI<DefaultSyscallABI> AlphaLinuxProcess::syscallDescs[] = {
     /*  0 */ { "osf_syscall" },
     /*  1 */ { "exit", exitFunc },
     /*  2 */ { "fork" },
index 991ddbd087d021314b30382644d88219ce1cf5ea..14214f1877be7d1c0cf53a349a9a496c05a37477 100644 (file)
@@ -33,6 +33,8 @@
 
 #include "arch/alpha/process.hh"
 
+#include "sim/syscall_desc.hh"
+
 namespace AlphaISA  {
 
 /// A process with emulated Alpha/Linux syscalls.
@@ -47,7 +49,7 @@ class AlphaLinuxProcess : public AlphaProcess
     virtual SyscallDesc* getDesc(int callnum);
 
      /// Array of syscall descriptors, indexed by call number.
-    static SyscallDesc syscallDescs[];
+    static SyscallDescABI<DefaultSyscallABI> syscallDescs[];
 
     const int Num_Syscall_Descs;
 };
index 55e5f85837ce79dc649f606728d7e48a8af4f624..5a048c58277182339dc01828a7d5f135e5484e85 100644 (file)
@@ -138,7 +138,7 @@ sysctlFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
 }
 #endif
 
-static SyscallDesc syscallDescs32[] = {
+static SyscallDescABI<DefaultSyscallABI> syscallDescs32[] = {
     /*    0 */ { "unused#000" },
     /*    1 */ { "unused#001" },
     /*    2 */ { "unused#002" },
@@ -689,7 +689,7 @@ static SyscallDesc syscallDescs32[] = {
     /*  547 */ { "unused#547" },
 };
 
-static SyscallDesc syscallDescs64[] = {
+static SyscallDescABI<DefaultSyscallABI> syscallDescs64[] = {
     /*    0 */ { "unused#000" },
     /*    1 */ { "exit", exitFunc },
     /*    2 */ { "unused#002" },
index c25e9122591f42d51f7e296406006d64e617ad06..039148739d274c9c48cc3566ed1622514aac0b9e 100644 (file)
@@ -164,7 +164,7 @@ setTLSFunc64(SyscallDesc *desc, int callnum, ThreadContext *tc)
     return 0;
 }
 
-static SyscallDesc syscallDescs32[] = {
+static SyscallDescABI<DefaultSyscallABI> syscallDescs32[] = {
     /*  0 */ { "syscall" },
     /*  1 */ { "exit", exitFunc },
     /*  2 */ { "fork" },
@@ -541,7 +541,7 @@ static SyscallDesc syscallDescs32[] = {
     /* 365 */ { "sys_recvmmsg" },
 };
 
-static SyscallDesc syscallDescs64[] = {
+static SyscallDescABI<DefaultSyscallABI> syscallDescs64[] = {
     /*    0 */ { "io_setup" },
     /*    1 */ { "io_destroy" },
     /*    2 */ { "io_submit" },
@@ -1632,7 +1632,7 @@ static SyscallDesc syscallDescs64[] = {
     /* 1079 */ { "fork" }
 };
 
-static SyscallDesc privSyscallDescs32[] = {
+static SyscallDescABI<DefaultSyscallABI> privSyscallDescs32[] = {
     /*  1 */ { "breakpoint" },
     /*  2 */ { "cacheflush" },
     /*  3 */ { "usr26" },
@@ -1641,7 +1641,7 @@ static SyscallDesc privSyscallDescs32[] = {
 };
 
 // Indices 1, 3 and 4 are unallocated.
-static SyscallDesc privSyscallDescs64[] = {
+static SyscallDescABI<DefaultSyscallABI> privSyscallDescs64[] = {
     /*  1 */ { "unallocated" },
     /*  2 */ { "cacheflush" },
     /*  3 */ { "unallocated" },
index e8e96da1cda2ebe0bf1ff25c30586fb85ac2f025..0b03c9981935cc8450cc2742bc851b52561583b7 100644 (file)
@@ -168,7 +168,7 @@ setThreadAreaFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
     return 0;
 }
 
-SyscallDesc MipsLinuxProcess::syscallDescs[] = {
+SyscallDescABI<DefaultSyscallABI> MipsLinuxProcess::syscallDescs[] = {
     /*  0 */ { "syscall" },
     /*  1 */ { "exit", exitFunc },
     /*  2 */ { "fork" },
index 7fcb6f014c9472c28bdafa1f2f40796c6cf3c82d..b2ab91e165ca3dc89ffc74fee1321d6c3ae34cb5 100644 (file)
@@ -35,6 +35,7 @@
 #include "arch/mips/linux/linux.hh"
 #include "arch/mips/process.hh"
 #include "sim/eventq.hh"
+#include "sim/syscall_desc.hh"
 
 /// A process with emulated Mips/Linux syscalls.
 class MipsLinuxProcess : public MipsProcess
@@ -54,7 +55,7 @@ class MipsLinuxProcess : public MipsProcess
     void syscall(ThreadContext *tc, Fault *fault) override;
 
     /// Array of syscall descriptors, indexed by call number.
-    static SyscallDesc syscallDescs[];
+    static SyscallDescABI<DefaultSyscallABI> syscallDescs[];
     const int Num_Syscall_Descs;
 };
 
index 13407789c70bf414d121581feb23de061ae0e106..217f0bd97269b4adf39c0bd838142c45602755d7 100644 (file)
@@ -96,7 +96,7 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
     return 0;
 }
 
-SyscallDesc PowerLinuxProcess::syscallDescs[] = {
+SyscallDescABI<DefaultSyscallABI> PowerLinuxProcess::syscallDescs[] = {
     /*  0 */ { "syscall" },
     /*  1 */ { "exit", exitFunc },
     /*  2 */ { "fork" },
index ef96dae5ffe7325449eb146995d256890f48cd0e..60b38a1525cb3e385c3252cdc8cf3b51ce427867 100644 (file)
@@ -35,6 +35,8 @@
 
 #include "arch/power/process.hh"
 
+#include "sim/syscall_desc.hh"
+
 /// A process with emulated PPC/Linux syscalls.
 class PowerLinuxProcess : public PowerProcess
 {
@@ -52,7 +54,7 @@ class PowerLinuxProcess : public PowerProcess
     using Process::getSyscallArg;
 
     /// Array of syscall descriptors, indexed by call number.
-    static SyscallDesc syscallDescs[];
+    static SyscallDescABI<DefaultSyscallABI> syscallDescs[];
 
     const int Num_Syscall_Descs;
 };
index add1469c9ba89a9377d9774125889f0fb9b787a8..b20d09d31392c51ee5d47ce14e4a7a53cfbcaaf4 100644 (file)
@@ -122,7 +122,8 @@ unameFunc32(SyscallDesc *desc, int callnum, ThreadContext *tc)
     return 0;
 }
 
-std::map<int, SyscallDesc> RiscvLinuxProcess64::syscallDescs = {
+std::map<int, SyscallDescABI<DefaultSyscallABI>>
+        RiscvLinuxProcess64::syscallDescs = {
     {0,    { "io_setup" }},
     {1,    { "io_destroy" }},
     {2,    { "io_submit" }},
@@ -453,7 +454,8 @@ std::map<int, SyscallDesc> RiscvLinuxProcess64::syscallDescs = {
     {2011, { "getmainvars" }}
 };
 
-std::map<int, SyscallDesc> RiscvLinuxProcess32::syscallDescs = {
+std::map<int, SyscallDescABI<DefaultSyscallABI>>
+        RiscvLinuxProcess32::syscallDescs = {
     {0,    { "io_setup" }},
     {1,    { "io_destroy" }},
     {2,    { "io_submit" }},
index 65daca35e0e2132da5a59d3fcf1249231956e699..7a2ad280e9c0dc855b77b687e767886604c15afc 100644 (file)
@@ -39,6 +39,7 @@
 #include "arch/riscv/linux/linux.hh"
 #include "arch/riscv/process.hh"
 #include "sim/eventq.hh"
+#include "sim/syscall_desc.hh"
 
 /// A process with emulated Riscv/Linux syscalls.
 class RiscvLinuxProcess64 : public RiscvProcess64
@@ -58,7 +59,7 @@ class RiscvLinuxProcess64 : public RiscvProcess64
     void syscall(ThreadContext *tc, Fault *fault) override;
 
     /// Array of syscall descriptors, indexed by call number.
-    static std::map<int, SyscallDesc> syscallDescs;
+    static std::map<int, SyscallDescABI<DefaultSyscallABI>> syscallDescs;
 };
 
 class RiscvLinuxProcess32 : public RiscvProcess32
@@ -78,7 +79,7 @@ class RiscvLinuxProcess32 : public RiscvProcess32
     void syscall(ThreadContext *tc, Fault *fault) override;
 
     /// Array of syscall descriptors, indexed by call number.
-    static std::map<int, SyscallDesc> syscallDescs;
+    static std::map<int, SyscallDescABI<DefaultSyscallABI>> syscallDescs;
 };
 
 #endif // __RISCV_LINUX_PROCESS_HH__
index 5c673db260364f70d051d0f262c7ca597ce0961f..9b1fd065f28d3ac7990c915e13ddc8b3ab00d523 100644 (file)
@@ -34,6 +34,7 @@
 #include "arch/sparc/linux/linux.hh"
 #include "arch/sparc/process.hh"
 #include "sim/process.hh"
+#include "sim/syscall_desc.hh"
 
 namespace SparcISA {
 
@@ -44,11 +45,11 @@ class SparcLinuxProcess
 {
   public:
      /// Array of syscall descriptors, indexed by call number.
-    static SyscallDesc syscallDescs[];
+    static SyscallDescABI<DefaultSyscallABI> syscallDescs[];
 
      /// Array of 32 bit compatibility syscall descriptors,
      /// indexed by call number.
-    static SyscallDesc syscall32Descs[];
+    static SyscallDescABI<DefaultSyscallABI> syscall32Descs[];
 
     SyscallDesc* getDesc(int callnum);
     SyscallDesc* getDesc32(int callnum);
index edf53c5bf75123a65d43872f5d1402e26b0e6814..a166a51884b5e606cf015aaab93aa226ab9b2cb8 100644 (file)
@@ -88,7 +88,7 @@ getresuidFunc(SyscallDesc *desc, int num, ThreadContext *tc)
     return 0;
 }
 
-SyscallDesc SparcLinuxProcess::syscall32Descs[] = {
+SyscallDescABI<DefaultSyscallABI> SparcLinuxProcess::syscall32Descs[] = {
     /*   0 */ { "restart_syscall" },
     /*   1 */ { "exit", exitFunc }, // 32 bit
     /*   2 */ { "fork" },
@@ -394,7 +394,7 @@ SyscallDesc SparcLinuxProcess::syscall32Descs[] = {
 const int SparcLinuxProcess::Num_Syscall32_Descs =
     sizeof(SparcLinuxProcess::syscall32Descs) / sizeof(SyscallDesc);
 
-SyscallDesc SparcLinuxProcess::syscallDescs[] = {
+SyscallDescABI<DefaultSyscallABI> SparcLinuxProcess::syscallDescs[] = {
     /*  0 */ { "restart_syscall" },
     /*  1 */ { "exit", exitFunc },
     /*  2 */ { "fork" },
index 69cda53562e20977f28df5b1dd18ca075c8e409d..4c22f1e4ff8fe6601f04b25e03078258892093c2 100644 (file)
@@ -90,7 +90,7 @@ unameFunc(SyscallDesc *desc, int callnum, ThreadContext *tc)
 }
 
 
-SyscallDesc SparcSolarisProcess::syscallDescs[] = {
+SyscallDescABI<DefaultSyscallABI> SparcSolarisProcess::syscallDescs[] = {
     /* 0 */ { "syscall" },
     /* 1 */ { "exit", exitFunc },
     /* 2 */ { "fork" },
index 39e3aef17736bdcb943bc0221852c3e04a7ba34a..424b0ec609a96608031da2c1cd1173dd06bbe06d 100644 (file)
@@ -34,6 +34,7 @@
 #include "arch/sparc/solaris/solaris.hh"
 #include "arch/sparc/process.hh"
 #include "sim/process.hh"
+#include "sim/syscall_desc.hh"
 
 namespace SparcISA {
 
@@ -52,7 +53,7 @@ class SparcSolarisProcess : public Sparc64Process
     void syscall(ThreadContext *tc, Fault *fault) override;
 
      /// Array of syscall descriptors, indexed by call number.
-    static SyscallDesc syscallDescs[];
+    static SyscallDescABI<DefaultSyscallABI> syscallDescs[];
 
     const int Num_Syscall_Descs;
 };
index f793178414a4899285ac55e742f32e9a0ae4b0e1..10ee11291e38d3fa6a927ab72e59c1ccdcf06907 100644 (file)
@@ -257,7 +257,7 @@ setThreadArea32Func(SyscallDesc *desc, int callnum, ThreadContext *tc)
     return 0;
 }
 
-static SyscallDesc syscallDescs64[] = {
+static SyscallDescABI<DefaultSyscallABI> syscallDescs64[] = {
     /*   0 */ { "read", readFunc<X86Linux64> },
     /*   1 */ { "write", writeFunc<X86Linux64> },
     /*   2 */ { "open", openFunc<X86Linux64> },
@@ -597,7 +597,7 @@ X86_64LinuxProcess::clone(ThreadContext *old_tc, ThreadContext *new_tc,
     X86_64Process::clone(old_tc, new_tc, (X86_64Process*)process, flags);
 }
 
-static SyscallDesc syscallDescs32[] = {
+static SyscallDescABI<DefaultSyscallABI> syscallDescs32[] = {
     /*   0 */ { "restart_syscall" },
     /*   1 */ { "exit", exitFunc },
     /*   2 */ { "fork" },