SE mode: Make keeping track of the number of syscalls less hacky.
authorGabe Black <gblack@eecs.umich.edu>
Sun, 19 Apr 2009 11:15:32 +0000 (04:15 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sun, 19 Apr 2009 11:15:32 +0000 (04:15 -0700)
src/arch/sparc/linux/process.cc
src/arch/sparc/linux/process.hh
src/arch/sparc/linux/syscalls.cc
src/arch/x86/linux/process.cc
src/arch/x86/linux/process.hh
src/arch/x86/linux/syscalls.cc

index 2078c1dced3e4f28120ee937af519b6a2fc345a7..28aa1e50c817e53e7cde0d30bd836665ac47ccce 100644 (file)
@@ -60,18 +60,6 @@ SparcLinuxProcess::getDesc32(int callnum)
     return &syscall32Descs[callnum];
 }
 
-SparcLinuxProcess::SparcLinuxProcess() :
-    Num_Syscall_Descs(284), //sizeof(syscallDescs) / sizeof(SyscallDesc)),
-    Num_Syscall32_Descs(299) //sizeof(syscall32Descs) / sizeof(SyscallDesc))
-{
-    // The sparc syscall table must be <= 284 entries because that is all there
-    // is space for.
-    assert(Num_Syscall_Descs <= 284);
-    // The sparc 32 bit syscall table bust be <= 299 entries because that is
-    // all there is space for.
-    assert(Num_Syscall_Descs <= 299);
-}
-
 Sparc32LinuxProcess::Sparc32LinuxProcess(LiveProcessParams * params,
                                          ObjectFile *objFile)
     : Sparc32LiveProcess(params, objFile)
index a76b4b3b20554fc2f56c694314e97e776f921cff..f3b569168384116e5dc661be1b1b65f098d48df9 100644 (file)
@@ -43,8 +43,6 @@ namespace SparcISA {
 class SparcLinuxProcess
 {
   public:
-    SparcLinuxProcess();
-
      /// Array of syscall descriptors, indexed by call number.
     static SyscallDesc syscallDescs[];
 
@@ -55,8 +53,8 @@ class SparcLinuxProcess
     SyscallDesc* getDesc(int callnum);
     SyscallDesc* getDesc32(int callnum);
 
-    const int Num_Syscall_Descs;
-    const int Num_Syscall32_Descs;
+    static const int Num_Syscall_Descs;
+    static const int Num_Syscall32_Descs;
 };
 
 /// A process with emulated SPARC/Linux syscalls.
index 8496fca13d0df9e32b7a37cc0ca8ba973735daaf..d9651c85c69f373358b5bdc14465b1c19d2fa642 100644 (file)
@@ -390,6 +390,9 @@ SyscallDesc SparcLinuxProcess::syscall32Descs[] = {
     /* 299 */ SyscallDesc("unshare", unimplementedFunc)
 };
 
+const int SparcLinuxProcess::Num_Syscall32_Descs =
+    sizeof(SparcLinuxProcess::syscall32Descs) / sizeof(SyscallDesc);
+
 SyscallDesc SparcLinuxProcess::syscallDescs[] = {
     /*  0 */ SyscallDesc("restart_syscall", unimplementedFunc),
     /*  1 */ SyscallDesc("exit", exitFunc),
@@ -677,4 +680,7 @@ SyscallDesc SparcLinuxProcess::syscallDescs[] = {
     /* 283 */ SyscallDesc("keyctl", unimplementedFunc)
 };
 
+const int SparcLinuxProcess::Num_Syscall_Descs =
+    sizeof(SparcLinuxProcess::syscallDescs) / sizeof(SyscallDesc);
+
 } // namespace SparcISA
index da22d9851f98bac9fe86d52cec3aec696a6551b3..1d109ae27f7215f0dcf0760f30124366101c1d8f 100644 (file)
@@ -70,10 +70,10 @@ using namespace X86ISA;
 
 X86_64LinuxProcess::X86_64LinuxProcess(LiveProcessParams * params,
         ObjectFile *objFile)
-    : X86_64LiveProcess(params, objFile, syscallDescs, 273)
+    : X86_64LiveProcess(params, objFile, syscallDescs, numSyscalls)
 {}
 
 I386LinuxProcess::I386LinuxProcess(LiveProcessParams * params,
         ObjectFile *objFile)
-    : I386LiveProcess(params, objFile, syscallDescs, 324)
+    : I386LiveProcess(params, objFile, syscallDescs, numSyscalls)
 {}
index ca3606ef0ce0b51fe17f054a68d78157965e2359..8ea5e6f01b66a91e1902c35c3f61ee2e92b10280 100644 (file)
@@ -69,6 +69,7 @@ class X86_64LinuxProcess : public X86_64LiveProcess
   protected:
      /// Array of syscall descriptors, indexed by call number.
     static SyscallDesc syscallDescs[];
+    static const int numSyscalls;
 
   public:
     /// Constructor.
@@ -80,6 +81,7 @@ class I386LinuxProcess : public I386LiveProcess
   protected:
      /// Array of syscall descriptors, indexed by call number.
     static SyscallDesc syscallDescs[];
+    static const int numSyscalls;
 
   public:
     /// Constructor.
index 09235ec94d12781e4be82ad63e96d2a8a0fe244f..49a7d8b77957e09fb17055a2121f77fbce1a6f4e 100644 (file)
@@ -503,6 +503,9 @@ SyscallDesc X86_64LinuxProcess::syscallDescs[] = {
     /* 272 */ SyscallDesc("unshare", unimplementedFunc)
 };
 
+const int X86_64LinuxProcess::numSyscalls = 
+    sizeof(X86_64LinuxProcess::syscallDescs) / sizeof(SyscallDesc);
+
 SyscallDesc I386LinuxProcess::syscallDescs[] = {
     /*   0 */ SyscallDesc("restart_syscall", unimplementedFunc),
     /*   1 */ SyscallDesc("exit", unimplementedFunc),
@@ -829,3 +832,6 @@ SyscallDesc I386LinuxProcess::syscallDescs[] = {
     /* 322 */ SyscallDesc("timerfd", unimplementedFunc),
     /* 323 */ SyscallDesc("eventfd", unimplementedFunc)
 };
+
+const int I386LinuxProcess::numSyscalls = 
+    sizeof(I386LinuxProcess::syscallDescs) / sizeof(SyscallDesc);