Changes that get rid of the OSFlags and derive a new class of this format <architectu...
authorKorey Sewell <ksewell@umich.edu>
Thu, 13 Apr 2006 09:42:18 +0000 (05:42 -0400)
committerKorey Sewell <ksewell@umich.edu>
Thu, 13 Apr 2006 09:42:18 +0000 (05:42 -0400)
This class is derived from the original <OS> class and is used to define information that
is both architecure and OS specific (for example, the AlphaLinux class is derived from the
Linux class and defined in arch/alpha/linux/linux.hh).

SConscript:
    no need to compile linux.cc and tru64.cc now, since openFlagsTable has been moved
arch/alpha/SConscript:
    compile linux.cc and tru64.cc within alpha arch.
arch/alpha/linux/process.cc:
    template syscall functions on AlphaLinux instead of Linux ... AlphaLinux is derived off of Linux
arch/alpha/tru64/process.cc:
    template syscall functions on AlphaTru64 instead of Linux ... AlphaTru64 is derived off of Linux
    moved tableFunc syscall function into this file
arch/mips/SConscript:
    compile mips_linux.cc for openFlags table
arch/mips/isa_traits.hh:
    remove constants from here
arch/mips/linux_process.cc:
    template syscall functions on MipsLinux instead of Linux ... MipsLinux is derived off of Linux
kern/linux/linux.hh:
    remove OSFlags
kern/tru64/tru64.hh:
    remove OSFlags def., openFlagTable, and tableFunc ...
sim/syscall_emul.hh:
    go back to using "OS" instead of "OSFlags"
arch/alpha/linux/linux.cc:
    defines openFlagTable
arch/alpha/linux/linux.hh:
arch/alpha/tru64/tru64.hh:
    Alpha Linux constants placed here in class derived from Linux class
arch/alpha/tru64/tru64.cc:
    defines openFlagTable for AlphaTru64
arch/mips/mips_linux.cc:
    MIPS Linux open flag table
arch/mips/mips_linux.hh:
    Mips Linux constants placed here in class derived from Linux class

--HG--
extra : convert_revision : e6c1c2c895429c28fd141732e223e897ab19315e

16 files changed:
SConscript
arch/alpha/SConscript
arch/alpha/linux/linux.cc [new file with mode: 0644]
arch/alpha/linux/linux.hh [new file with mode: 0644]
arch/alpha/linux/process.cc
arch/alpha/tru64/process.cc
arch/alpha/tru64/tru64.cc [new file with mode: 0644]
arch/alpha/tru64/tru64.hh [new file with mode: 0644]
arch/mips/SConscript
arch/mips/isa_traits.hh
arch/mips/linux_process.cc
arch/mips/mips_linux.cc [new file with mode: 0644]
arch/mips/mips_linux.hh [new file with mode: 0644]
kern/linux/linux.hh
kern/tru64/tru64.hh
sim/syscall_emul.hh

index dd2df370330013a274cb0164bf19f9c37a15cf58..05515562f68437bf7e5a0b58fd560195204e7d4b 100644 (file)
@@ -257,17 +257,16 @@ turbolaser_sources = Split('''
 
 # Syscall emulation (non-full-system) sources
 syscall_emulation_sources = Split('''
-        kern/linux/linux.cc
         mem/translating_port.cc
         mem/page_table.cc
        sim/process.cc
        sim/syscall_emul.cc
         ''')
 
-if env['TARGET_ISA'] == 'alpha':
-    syscall_emulation_sources += Split('''
-        kern/tru64/tru64.cc
-        ''')
+#if env['TARGET_ISA'] == 'alpha':
+#    syscall_emulation_sources += Split('''
+#        kern/tru64/tru64.cc
+#        ''')
 
 alpha_eio_sources = Split('''
        encumbered/eio/exolex.cc
index ed7fd34044f33972997c53372bab26dd0844446d..1b20f8b1f4e207ad771deca592fbfabf7eb8df3a 100644 (file)
@@ -65,7 +65,9 @@ full_system_sources = Split('''
 
 # Syscall emulation (non-full-system) sources
 syscall_emulation_sources = Split('''
+        linux/linux.cc
        linux/process.cc
+        tru64/tru64.cc
        tru64/process.cc
        process.cc
        ''')
diff --git a/arch/alpha/linux/linux.cc b/arch/alpha/linux/linux.cc
new file mode 100644 (file)
index 0000000..f123ae1
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "arch/alpha/linux/linux.hh"
+
+// open(2) flags translation table
+OpenFlagTransTable AlphaLinux::openFlagTable[] = {
+#ifdef _MSC_VER
+  { AlphaLinux::TGT_O_RDONLY,  _O_RDONLY },
+  { AlphaLinux::TGT_O_WRONLY,  _O_WRONLY },
+  { AlphaLinux::TGT_O_RDWR,    _O_RDWR },
+  { AlphaLinux::TGT_O_APPEND,  _O_APPEND },
+  { AlphaLinux::TGT_O_CREAT,   _O_CREAT },
+  { AlphaLinux::TGT_O_TRUNC,   _O_TRUNC },
+  { AlphaLinux::TGT_O_EXCL,    _O_EXCL },
+#ifdef _O_NONBLOCK
+  { AlphaLinux::TGT_O_NONBLOCK,        _O_NONBLOCK },
+#endif
+#ifdef _O_NOCTTY
+  { AlphaLinux::TGT_O_NOCTTY,  _O_NOCTTY },
+#endif
+#ifdef _O_SYNC
+  { AlphaLinux::TGT_O_SYNC,    _O_SYNC },
+#endif
+#else /* !_MSC_VER */
+  { AlphaLinux::TGT_O_RDONLY,  O_RDONLY },
+  { AlphaLinux::TGT_O_WRONLY,  O_WRONLY },
+  { AlphaLinux::TGT_O_RDWR,    O_RDWR },
+  { AlphaLinux::TGT_O_APPEND,  O_APPEND },
+  { AlphaLinux::TGT_O_CREAT,   O_CREAT },
+  { AlphaLinux::TGT_O_TRUNC,   O_TRUNC },
+  { AlphaLinux::TGT_O_EXCL,    O_EXCL },
+  { AlphaLinux::TGT_O_NONBLOCK,        O_NONBLOCK },
+  { AlphaLinux::TGT_O_NOCTTY,  O_NOCTTY },
+#ifdef O_SYNC
+  { AlphaLinux::TGT_O_SYNC,    O_SYNC },
+#endif
+#endif /* _MSC_VER */
+};
+
+const int AlphaLinux::NUM_OPEN_FLAGS =
+        (sizeof(AlphaLinux::openFlagTable)/sizeof(AlphaLinux::openFlagTable[0]));
+
+
+
diff --git a/arch/alpha/linux/linux.hh b/arch/alpha/linux/linux.hh
new file mode 100644 (file)
index 0000000..9a1d59e
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ALPHA_ALPHA_LINUX_HH
+#define __ALPHA_ALPHA_LINUX_HH
+
+#include "kern/linux/linux.hh"
+
+/* AlphaLinux class contains static constants/definitions/misc.
+ * structures which are specific to the Linux OS AND the Alpha
+ * architecture
+ */
+class AlphaLinux : public Linux
+{
+  public:
+
+    /// This table maps the target open() flags to the corresponding
+    /// host open() flags.
+    static OpenFlagTransTable openFlagTable[];
+
+    /// Number of entries in openFlagTable[].
+    static const int NUM_OPEN_FLAGS;
+
+    //@{
+    /// open(2) flag values.
+    static const int TGT_O_RDONLY      = 00000000;     //!< O_RDONLY
+    static const int TGT_O_WRONLY      = 00000001;     //!< O_WRONLY
+    static const int TGT_O_RDWR                = 00000002;     //!< O_RDWR
+    static const int TGT_O_NONBLOCK     = 00000004;    //!< O_NONBLOCK
+    static const int TGT_O_APPEND      = 00000010;     //!< O_APPEND
+    static const int TGT_O_CREAT       = 00001000;     //!< O_CREAT
+    static const int TGT_O_TRUNC       = 00002000;     //!< O_TRUNC
+    static const int TGT_O_EXCL                = 00004000;     //!< O_EXCL
+    static const int TGT_O_NOCTTY      = 00010000;     //!< O_NOCTTY
+    static const int TGT_O_SYNC                = 00040000;     //!< O_SYNC
+    static const int TGT_O_DRD         = 00100000;     //!< O_DRD
+    static const int TGT_O_DIRECTIO     = 00200000;    //!< O_DIRECTIO
+    static const int TGT_O_CACHE       = 00400000;     //!< O_CACHE
+    static const int TGT_O_DSYNC       = 02000000;     //!< O_DSYNC
+    static const int TGT_O_RSYNC       = 04000000;     //!< O_RSYNC
+    //@}
+
+    /// For mmap().
+    static const unsigned TGT_MAP_ANONYMOUS = 0x10;
+
+    //@{
+    /// For getsysinfo().
+    static const unsigned GSI_PLATFORM_NAME = 103;  //!< platform name as string
+    static const unsigned GSI_CPU_INFO      = 59;   //!< CPU information
+    static const unsigned GSI_PROC_TYPE     = 60;   //!< get proc_type
+    static const unsigned GSI_MAX_CPU       = 30;   //!< max # cpu's on this machine
+    static const unsigned GSI_CPUS_IN_BOX   = 55;   //!< number of CPUs in system
+    static const unsigned GSI_PHYSMEM       = 19;   //!< Physical memory in KB
+    static const unsigned GSI_CLK_TCK       = 42;   //!< clock freq in Hz
+    //@}
+
+    //@{
+    /// For getrusage().
+    static const int TGT_RUSAGE_SELF     = 0;
+    static const int TGT_RUSAGE_CHILDREN = -1;
+    static const int TGT_RUSAGE_BOTH     = -2;
+    //@}
+
+    //@{
+    /// For setsysinfo().
+    static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
+    //@}
+
+    //@{
+    /// ioctl() command codes.
+    static const unsigned TIOCGETP   = 0x40067408;
+    static const unsigned TIOCSETP   = 0x80067409;
+    static const unsigned TIOCSETN   = 0x8006740a;
+    static const unsigned TIOCSETC   = 0x80067411;
+    static const unsigned TIOCGETC   = 0x40067412;
+    static const unsigned FIONREAD   = 0x4004667f;
+    static const unsigned TIOCISATTY = 0x2000745e;
+    static const unsigned TIOCGETS   = 0x402c7413;
+    static const unsigned TIOCGETA   = 0x40127417;
+    //@}
+
+    /// For table().
+    static const int TBL_SYSINFO = 12;
+};
+
+#endif
index 4bc28356362fc3d96d4aeb3eb41c7181eb7d3ed8..9f4f65db81fbf1698b8cac528a6e22018faa115b 100644 (file)
@@ -26,6 +26,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "arch/alpha/linux/linux.hh"
 #include "arch/alpha/linux/process.hh"
 #include "arch/alpha/isa_traits.hh"
 
@@ -132,7 +133,7 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 12 */ SyscallDesc("chdir", unimplementedFunc),
     /* 13 */ SyscallDesc("fchdir", unimplementedFunc),
     /* 14 */ SyscallDesc("mknod", unimplementedFunc),
-    /* 15 */ SyscallDesc("chmod", chmodFunc<Linux>),
+    /* 15 */ SyscallDesc("chmod", chmodFunc<AlphaLinux>),
     /* 16 */ SyscallDesc("chown", chownFunc),
     /* 17 */ SyscallDesc("brk", obreakFunc),
     /* 18 */ SyscallDesc("osf_getfsstat", unimplementedFunc),
@@ -162,7 +163,7 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 42 */ SyscallDesc("pipe", pipePseudoFunc),
     /* 43 */ SyscallDesc("osf_set_program_attributes", unimplementedFunc),
     /* 44 */ SyscallDesc("osf_profil", unimplementedFunc),
-    /* 45 */ SyscallDesc("open", openFunc<Linux>),
+    /* 45 */ SyscallDesc("open", openFunc<AlphaLinux>),
     /* 46 */ SyscallDesc("osf_old_sigaction", unimplementedFunc),
     /* 47 */ SyscallDesc("getxgid", getgidPseudoFunc),
     /* 48 */ SyscallDesc("osf_sigprocmask", ignoreFunc),
@@ -171,7 +172,7 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 51 */ SyscallDesc("acct", unimplementedFunc),
     /* 52 */ SyscallDesc("sigpending", unimplementedFunc),
     /* 53 */ SyscallDesc("osf_classcntl", unimplementedFunc),
-    /* 54 */ SyscallDesc("ioctl", ioctlFunc<Linux>),
+    /* 54 */ SyscallDesc("ioctl", ioctlFunc<AlphaLinux>),
     /* 55 */ SyscallDesc("osf_reboot", unimplementedFunc),
     /* 56 */ SyscallDesc("osf_revoke", unimplementedFunc),
     /* 57 */ SyscallDesc("symlink", unimplementedFunc),
@@ -184,11 +185,11 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 64 */ SyscallDesc("getpagesize", getpagesizeFunc),
     /* 65 */ SyscallDesc("osf_mremap", unimplementedFunc),
     /* 66 */ SyscallDesc("vfork", unimplementedFunc),
-    /* 67 */ SyscallDesc("stat", statFunc<Linux>),
-    /* 68 */ SyscallDesc("lstat", lstatFunc<Linux>),
+    /* 67 */ SyscallDesc("stat", statFunc<AlphaLinux>),
+    /* 68 */ SyscallDesc("lstat", lstatFunc<AlphaLinux>),
     /* 69 */ SyscallDesc("osf_sbrk", unimplementedFunc),
     /* 70 */ SyscallDesc("osf_sstk", unimplementedFunc),
-    /* 71 */ SyscallDesc("mmap", mmapFunc<Linux>),
+    /* 71 */ SyscallDesc("mmap", mmapFunc<AlphaLinux>),
     /* 72 */ SyscallDesc("osf_old_vadvise", unimplementedFunc),
     /* 73 */ SyscallDesc("munmap", munmapFunc),
     /* 74 */ SyscallDesc("mprotect", ignoreFunc),
@@ -208,7 +209,7 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 88 */ SyscallDesc("sethostname", unimplementedFunc),
     /* 89 */ SyscallDesc("getdtablesize", unimplementedFunc),
     /* 90 */ SyscallDesc("dup2", unimplementedFunc),
-    /* 91 */ SyscallDesc("fstat", fstatFunc<Linux>),
+    /* 91 */ SyscallDesc("fstat", fstatFunc<AlphaLinux>),
     /* 92 */ SyscallDesc("fcntl", fcntlFunc),
     /* 93 */ SyscallDesc("osf_select", unimplementedFunc),
     /* 94 */ SyscallDesc("poll", unimplementedFunc),
@@ -238,10 +239,10 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 118 */ SyscallDesc("getsockopt", unimplementedFunc),
     /* 119 */ SyscallDesc("numa_syscalls", unimplementedFunc),
     /* 120 */ SyscallDesc("readv", unimplementedFunc),
-    /* 121 */ SyscallDesc("writev", writevFunc<Linux>),
+    /* 121 */ SyscallDesc("writev", writevFunc<AlphaLinux>),
     /* 122 */ SyscallDesc("osf_settimeofday", unimplementedFunc),
     /* 123 */ SyscallDesc("fchown", fchownFunc),
-    /* 124 */ SyscallDesc("fchmod", fchmodFunc<Linux>),
+    /* 124 */ SyscallDesc("fchmod", fchmodFunc<AlphaLinux>),
     /* 125 */ SyscallDesc("recvfrom", unimplementedFunc),
     /* 126 */ SyscallDesc("setreuid", unimplementedFunc),
     /* 127 */ SyscallDesc("setregid", unimplementedFunc),
@@ -261,7 +262,7 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 141 */ SyscallDesc("getpeername", unimplementedFunc),
     /* 142 */ SyscallDesc("osf_gethostid", unimplementedFunc),
     /* 143 */ SyscallDesc("osf_sethostid", unimplementedFunc),
-    /* 144 */ SyscallDesc("getrlimit", getrlimitFunc<Linux>),
+    /* 144 */ SyscallDesc("getrlimit", getrlimitFunc<AlphaLinux>),
     /* 145 */ SyscallDesc("setrlimit", ignoreFunc),
     /* 146 */ SyscallDesc("osf_old_killpg", unimplementedFunc),
     /* 147 */ SyscallDesc("setsid", unimplementedFunc),
@@ -479,12 +480,12 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 356 */ SyscallDesc("rt_sigqueueinfo", unimplementedFunc),
     /* 357 */ SyscallDesc("rt_sigsuspend", unimplementedFunc),
     /* 358 */ SyscallDesc("select", unimplementedFunc),
-    /* 359 */ SyscallDesc("gettimeofday", gettimeofdayFunc<Linux>),
+    /* 359 */ SyscallDesc("gettimeofday", gettimeofdayFunc<AlphaLinux>),
     /* 360 */ SyscallDesc("settimeofday", unimplementedFunc),
     /* 361 */ SyscallDesc("getitimer", unimplementedFunc),
     /* 362 */ SyscallDesc("setitimer", unimplementedFunc),
-    /* 363 */ SyscallDesc("utimes", utimesFunc<Linux>),
-    /* 364 */ SyscallDesc("getrusage", getrusageFunc<Linux>),
+    /* 363 */ SyscallDesc("utimes", utimesFunc<AlphaLinux>),
+    /* 364 */ SyscallDesc("getrusage", getrusageFunc<AlphaLinux>),
     /* 365 */ SyscallDesc("wait4", unimplementedFunc),
     /* 366 */ SyscallDesc("adjtimex", unimplementedFunc),
     /* 367 */ SyscallDesc("getcwd", unimplementedFunc),
@@ -546,8 +547,8 @@ SyscallDesc AlphaLinuxProcess::syscallDescs[] = {
     /* 423 */ SyscallDesc("semtimedop", unimplementedFunc),
     /* 424 */ SyscallDesc("tgkill", unimplementedFunc),
     /* 425 */ SyscallDesc("stat64", unimplementedFunc),
-    /* 426 */ SyscallDesc("lstat64", lstat64Func<Linux>),
-    /* 427 */ SyscallDesc("fstat64", fstat64Func<Linux>),
+    /* 426 */ SyscallDesc("lstat64", lstat64Func<AlphaLinux>),
+    /* 427 */ SyscallDesc("fstat64", fstat64Func<AlphaLinux>),
     /* 428 */ SyscallDesc("vserver", unimplementedFunc),
     /* 429 */ SyscallDesc("mbind", unimplementedFunc),
     /* 430 */ SyscallDesc("get_mempolicy", unimplementedFunc),
index f795cc8fecc6ec4155868f6e77fd2405b534d38e..55f75f7d03cd05a08ed0d8f8b2defe84f15d58f8 100644 (file)
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "arch/alpha/tru64/tru64.hh"
 #include "arch/alpha/isa_traits.hh"
 #include "arch/alpha/tru64/process.hh"
+
 #include "cpu/exec_context.hh"
 #include "kern/tru64/tru64.hh"
+
 #include "sim/process.hh"
 #include "sim/syscall_emul.hh"
 
@@ -41,7 +44,7 @@ static SyscallReturn
 unameFunc(SyscallDesc *desc, int callnum, Process *process,
           ExecContext *xc)
 {
-    TypedBufferArg<Tru64::utsname> name(xc->getSyscallArg(0));
+    TypedBufferArg<AlphaTru64::utsname> name(xc->getSyscallArg(0));
 
     strcpy(name->sysname, "OSF1");
     strcpy(name->nodename, "m5.eecs.umich.edu");
@@ -63,29 +66,29 @@ getsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
 
     switch (op) {
 
-      case Tru64::OSFlags::GSI_MAX_CPU: {
+      case AlphaTru64::GSI_MAX_CPU: {
           TypedBufferArg<uint32_t> max_cpu(xc->getSyscallArg(1));
           *max_cpu = htog((uint32_t)process->numCpus());
           max_cpu.copyOut(xc->getMemPort());
           return 1;
       }
 
-      case Tru64::OSFlags::GSI_CPUS_IN_BOX: {
+      case AlphaTru64::GSI_CPUS_IN_BOX: {
           TypedBufferArg<uint32_t> cpus_in_box(xc->getSyscallArg(1));
           *cpus_in_box = htog((uint32_t)process->numCpus());
           cpus_in_box.copyOut(xc->getMemPort());
           return 1;
       }
 
-      case Tru64::OSFlags::GSI_PHYSMEM: {
+      case AlphaTru64::GSI_PHYSMEM: {
           TypedBufferArg<uint64_t> physmem(xc->getSyscallArg(1));
           *physmem = htog((uint64_t)1024 * 1024);      // physical memory in KB
           physmem.copyOut(xc->getMemPort());
           return 1;
       }
 
-      case Tru64::OSFlags::GSI_CPU_INFO: {
-          TypedBufferArg<Tru64::cpu_info> infop(xc->getSyscallArg(1));
+      case AlphaTru64::GSI_CPU_INFO: {
+          TypedBufferArg<AlphaTru64::cpu_info> infop(xc->getSyscallArg(1));
 
           infop->current_cpu = htog(0);
           infop->cpus_in_box = htog(process->numCpus());
@@ -101,14 +104,14 @@ getsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
           return 1;
       }
 
-      case Tru64::OSFlags::GSI_PROC_TYPE: {
+      case AlphaTru64::GSI_PROC_TYPE: {
           TypedBufferArg<uint64_t> proc_type(xc->getSyscallArg(1));
           *proc_type = htog((uint64_t)11);
           proc_type.copyOut(xc->getMemPort());
           return 1;
       }
 
-      case Tru64::OSFlags::GSI_PLATFORM_NAME: {
+      case AlphaTru64::GSI_PLATFORM_NAME: {
           BufferArg bufArg(xc->getSyscallArg(1), nbytes);
           strncpy((char *)bufArg.bufferPtr(),
                   "COMPAQ Professional Workstation XP1000",
@@ -117,7 +120,7 @@ getsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
           return 1;
       }
 
-      case Tru64::OSFlags::GSI_CLK_TCK: {
+      case AlphaTru64::GSI_CLK_TCK: {
           TypedBufferArg<uint64_t> clk_hz(xc->getSyscallArg(1));
           *clk_hz = htog((uint64_t)1024);
           clk_hz.copyOut(xc->getMemPort());
@@ -140,7 +143,7 @@ setsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
     unsigned op = xc->getSyscallArg(0);
 
     switch (op) {
-      case Tru64::OSFlags::SSI_IEEE_FP_CONTROL:
+      case AlphaTru64::SSI_IEEE_FP_CONTROL:
         warn("setsysinfo: ignoring ieee_set_fp_control() arg 0x%x\n",
              xc->getSyscallArg(1));
         break;
@@ -154,8 +157,48 @@ setsysinfoFunc(SyscallDesc *desc, int callnum, Process *process,
 }
 
 
+/// Target table() handler.
+static
+SyscallReturn tableFunc(SyscallDesc *desc, int callnum,Process *process,
+                        ExecContext *xc)
+{
+    using namespace std;
+    using namespace TheISA;
+
+    int id = xc->getSyscallArg(0);             // table ID
+    int index = xc->getSyscallArg(1);  // index into table
+    // arg 2 is buffer pointer; type depends on table ID
+    int nel = xc->getSyscallArg(3);            // number of elements
+    int lel = xc->getSyscallArg(4);            // expected element size
+
+    switch (id) {
+      case AlphaTru64::TBL_SYSINFO: {
+          if (index != 0 || nel != 1 || lel != sizeof(Tru64::tbl_sysinfo))
+              return -EINVAL;
+          TypedBufferArg<Tru64::tbl_sysinfo> elp(xc->getSyscallArg(2));
+
+          const int clk_hz = one_million;
+          elp->si_user = htog(curTick / (Clock::Frequency / clk_hz));
+          elp->si_nice = htog(0);
+          elp->si_sys = htog(0);
+          elp->si_idle = htog(0);
+          elp->wait = htog(0);
+          elp->si_hz = htog(clk_hz);
+          elp->si_phz = htog(clk_hz);
+          elp->si_boottime = htog(seconds_since_epoch); // seconds since epoch?
+          elp->si_max_procs = htog(process->numCpus());
+          elp.copyOut(xc->getMemPort());
+          return 0;
+      }
+
+      default:
+        cerr << "table(): id " << id << " unknown." << endl;
+        return -EINVAL;
+    }
+}
+
 SyscallDesc AlphaTru64Process::syscallDescs[] = {
-    /* 0 */ SyscallDesc("syscall (#0)", Tru64::indirectSyscallFunc,
+    /* 0 */ SyscallDesc("syscall (#0)", AlphaTru64::indirectSyscallFunc,
                         SyscallDesc::SuppressReturnValue),
     /* 1 */ SyscallDesc("exit", exitFunc),
     /* 2 */ SyscallDesc("fork", unimplementedFunc),
@@ -201,7 +244,7 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 42 */ SyscallDesc("pipe", unimplementedFunc),
     /* 43 */ SyscallDesc("set_program_attributes", unimplementedFunc),
     /* 44 */ SyscallDesc("profil", unimplementedFunc),
-    /* 45 */ SyscallDesc("open", openFunc<Tru64>),
+    /* 45 */ SyscallDesc("open", openFunc<AlphaTru64>),
     /* 46 */ SyscallDesc("obsolete osigaction", unimplementedFunc),
     /* 47 */ SyscallDesc("getgid", getgidPseudoFunc),
     /* 48 */ SyscallDesc("sigprocmask", ignoreFunc),
@@ -210,7 +253,7 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 51 */ SyscallDesc("acct", unimplementedFunc),
     /* 52 */ SyscallDesc("sigpending", unimplementedFunc),
     /* 53 */ SyscallDesc("classcntl", unimplementedFunc),
-    /* 54 */ SyscallDesc("ioctl", ioctlFunc<Tru64>),
+    /* 54 */ SyscallDesc("ioctl", ioctlFunc<AlphaTru64>),
     /* 55 */ SyscallDesc("reboot", unimplementedFunc),
     /* 56 */ SyscallDesc("revoke", unimplementedFunc),
     /* 57 */ SyscallDesc("symlink", unimplementedFunc),
@@ -223,11 +266,11 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 64 */ SyscallDesc("getpagesize", getpagesizeFunc),
     /* 65 */ SyscallDesc("mremap", unimplementedFunc),
     /* 66 */ SyscallDesc("vfork", unimplementedFunc),
-    /* 67 */ SyscallDesc("pre_F64_stat", statFunc<Tru64::PreF64>),
-    /* 68 */ SyscallDesc("pre_F64_lstat", lstatFunc<Tru64::PreF64>),
+    /* 67 */ SyscallDesc("pre_F64_stat", statFunc<AlphaTru64::PreF64>),
+    /* 68 */ SyscallDesc("pre_F64_lstat", lstatFunc<AlphaTru64::PreF64>),
     /* 69 */ SyscallDesc("sbrk", unimplementedFunc),
     /* 70 */ SyscallDesc("sstk", unimplementedFunc),
-    /* 71 */ SyscallDesc("mmap", mmapFunc<Tru64>),
+    /* 71 */ SyscallDesc("mmap", mmapFunc<AlphaTru64>),
     /* 72 */ SyscallDesc("ovadvise", unimplementedFunc),
     /* 73 */ SyscallDesc("munmap", munmapFunc),
     /* 74 */ SyscallDesc("mprotect", ignoreFunc),
@@ -241,13 +284,13 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 82 */ SyscallDesc("setpgrp", unimplementedFunc),
     /* 83 */ SyscallDesc("setitimer", unimplementedFunc),
     /* 84 */ SyscallDesc("old_wait", unimplementedFunc),
-    /* 85 */ SyscallDesc("table", Tru64::tableFunc),
+    /* 85 */ SyscallDesc("table", tableFunc),
     /* 86 */ SyscallDesc("getitimer", unimplementedFunc),
     /* 87 */ SyscallDesc("gethostname", gethostnameFunc),
     /* 88 */ SyscallDesc("sethostname", unimplementedFunc),
     /* 89 */ SyscallDesc("getdtablesize", unimplementedFunc),
     /* 90 */ SyscallDesc("dup2", unimplementedFunc),
-    /* 91 */ SyscallDesc("pre_F64_fstat", fstatFunc<Tru64::PreF64>),
+    /* 91 */ SyscallDesc("pre_F64_fstat", fstatFunc<AlphaTru64::PreF64>),
     /* 92 */ SyscallDesc("fcntl", fcntlFunc),
     /* 93 */ SyscallDesc("select", unimplementedFunc),
     /* 94 */ SyscallDesc("poll", unimplementedFunc),
@@ -259,7 +302,7 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 100 */ SyscallDesc("getpriority", unimplementedFunc),
     /* 101 */ SyscallDesc("old_send", unimplementedFunc),
     /* 102 */ SyscallDesc("old_recv", unimplementedFunc),
-    /* 103 */ SyscallDesc("sigreturn", Tru64::sigreturnFunc,
+    /* 103 */ SyscallDesc("sigreturn", AlphaTru64::sigreturnFunc,
                           SyscallDesc::SuppressReturnValue),
     /* 104 */ SyscallDesc("bind", unimplementedFunc),
     /* 105 */ SyscallDesc("setsockopt", unimplementedFunc),
@@ -273,8 +316,8 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 113 */ SyscallDesc("old_recvmsg", unimplementedFunc),
     /* 114 */ SyscallDesc("old_sendmsg", unimplementedFunc),
     /* 115 */ SyscallDesc("obsolete vtrace", unimplementedFunc),
-    /* 116 */ SyscallDesc("gettimeofday", gettimeofdayFunc<Tru64>),
-    /* 117 */ SyscallDesc("getrusage", getrusageFunc<Tru64>),
+    /* 116 */ SyscallDesc("gettimeofday", gettimeofdayFunc<AlphaTru64>),
+    /* 117 */ SyscallDesc("getrusage", getrusageFunc<AlphaTru64>),
     /* 118 */ SyscallDesc("getsockopt", unimplementedFunc),
     /* 119 */ SyscallDesc("numa_syscalls", unimplementedFunc),
     /* 120 */ SyscallDesc("readv", unimplementedFunc),
@@ -301,7 +344,7 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 141 */ SyscallDesc("old_getpeername", unimplementedFunc),
     /* 142 */ SyscallDesc("gethostid", unimplementedFunc),
     /* 143 */ SyscallDesc("sethostid", unimplementedFunc),
-    /* 144 */ SyscallDesc("getrlimit", getrlimitFunc<Tru64>),
+    /* 144 */ SyscallDesc("getrlimit", getrlimitFunc<AlphaTru64>),
     /* 145 */ SyscallDesc("setrlimit", ignoreFunc),
     /* 146 */ SyscallDesc("old_killpg", unimplementedFunc),
     /* 147 */ SyscallDesc("setsid", unimplementedFunc),
@@ -316,9 +359,9 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 156 */ SyscallDesc("sigaction", ignoreFunc),
     /* 157 */ SyscallDesc("sigwaitprim", unimplementedFunc),
     /* 158 */ SyscallDesc("nfssvc", unimplementedFunc),
-    /* 159 */ SyscallDesc("getdirentries", Tru64::getdirentriesFunc),
-    /* 160 */ SyscallDesc("pre_F64_statfs", statfsFunc<Tru64::PreF64>),
-    /* 161 */ SyscallDesc("pre_F64_fstatfs", fstatfsFunc<Tru64::PreF64>),
+    /* 159 */ SyscallDesc("getdirentries", AlphaTru64::getdirentriesFunc),
+    /* 160 */ SyscallDesc("pre_F64_statfs", statfsFunc<AlphaTru64::PreF64>),
+    /* 161 */ SyscallDesc("pre_F64_fstatfs", fstatfsFunc<AlphaTru64::PreF64>),
     /* 162 */ SyscallDesc("unknown #162", unimplementedFunc),
     /* 163 */ SyscallDesc("async_daemon", unimplementedFunc),
     /* 164 */ SyscallDesc("getfh", unimplementedFunc),
@@ -381,11 +424,11 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
     /* 221 */ SyscallDesc("unknown #221", unimplementedFunc),
     /* 222 */ SyscallDesc("security", unimplementedFunc),
     /* 223 */ SyscallDesc("kloadcall", unimplementedFunc),
-    /* 224 */ SyscallDesc("stat", statFunc<Tru64::F64>),
-    /* 225 */ SyscallDesc("lstat", lstatFunc<Tru64::F64>),
-    /* 226 */ SyscallDesc("fstat", fstatFunc<Tru64::F64>),
-    /* 227 */ SyscallDesc("statfs", statfsFunc<Tru64::F64>),
-    /* 228 */ SyscallDesc("fstatfs", fstatfsFunc<Tru64::F64>),
+    /* 224 */ SyscallDesc("stat", statFunc<AlphaTru64::F64>),
+    /* 225 */ SyscallDesc("lstat", lstatFunc<AlphaTru64::F64>),
+    /* 226 */ SyscallDesc("fstat", fstatFunc<AlphaTru64::F64>),
+    /* 227 */ SyscallDesc("statfs", statfsFunc<AlphaTru64::F64>),
+    /* 228 */ SyscallDesc("fstatfs", fstatfsFunc<AlphaTru64::F64>),
     /* 229 */ SyscallDesc("getfsstat", unimplementedFunc),
     /* 230 */ SyscallDesc("gettimeofday64", unimplementedFunc),
     /* 231 */ SyscallDesc("settimeofday64", unimplementedFunc),
@@ -430,13 +473,13 @@ SyscallDesc AlphaTru64Process::syscallDescs[] = {
 
 SyscallDesc AlphaTru64Process::machSyscallDescs[] = {
     /* 0 */  SyscallDesc("kern_invalid", unimplementedFunc),
-    /* 1 */  SyscallDesc("m5_mutex_lock", Tru64::m5_mutex_lockFunc),
-    /* 2 */  SyscallDesc("m5_mutex_trylock", Tru64::m5_mutex_trylockFunc),
-    /* 3 */  SyscallDesc("m5_mutex_unlock", Tru64::m5_mutex_unlockFunc),
-    /* 4 */  SyscallDesc("m5_cond_signal", Tru64::m5_cond_signalFunc),
-    /* 5 */  SyscallDesc("m5_cond_broadcast", Tru64::m5_cond_broadcastFunc),
-    /* 6 */  SyscallDesc("m5_cond_wait", Tru64::m5_cond_waitFunc),
-    /* 7 */  SyscallDesc("m5_thread_exit", Tru64::m5_thread_exitFunc),
+    /* 1 */  SyscallDesc("m5_mutex_lock", AlphaTru64::m5_mutex_lockFunc),
+    /* 2 */  SyscallDesc("m5_mutex_trylock", AlphaTru64::m5_mutex_trylockFunc),
+    /* 3 */  SyscallDesc("m5_mutex_unlock", AlphaTru64::m5_mutex_unlockFunc),
+    /* 4 */  SyscallDesc("m5_cond_signal", AlphaTru64::m5_cond_signalFunc),
+    /* 5 */  SyscallDesc("m5_cond_broadcast", AlphaTru64::m5_cond_broadcastFunc),
+    /* 6 */  SyscallDesc("m5_cond_wait", AlphaTru64::m5_cond_waitFunc),
+    /* 7 */  SyscallDesc("m5_thread_exit", AlphaTru64::m5_thread_exitFunc),
     /* 8 */  SyscallDesc("kern_invalid", unimplementedFunc),
     /* 9 */  SyscallDesc("kern_invalid", unimplementedFunc),
     /* 10 */ SyscallDesc("task_self", unimplementedFunc),
@@ -453,22 +496,22 @@ SyscallDesc AlphaTru64Process::machSyscallDescs[] = {
     /* 21 */ SyscallDesc("msg_receive_trap", unimplementedFunc),
     /* 22 */ SyscallDesc("msg_rpc_trap", unimplementedFunc),
     /* 23 */ SyscallDesc("kern_invalid", unimplementedFunc),
-    /* 24 */ SyscallDesc("nxm_block", Tru64::nxm_blockFunc),
-    /* 25 */ SyscallDesc("nxm_unblock", Tru64::nxm_unblockFunc),
+    /* 24 */ SyscallDesc("nxm_block", AlphaTru64::nxm_blockFunc),
+    /* 25 */ SyscallDesc("nxm_unblock", AlphaTru64::nxm_unblockFunc),
     /* 26 */ SyscallDesc("kern_invalid", unimplementedFunc),
     /* 27 */ SyscallDesc("kern_invalid", unimplementedFunc),
     /* 28 */ SyscallDesc("kern_invalid", unimplementedFunc),
     /* 29 */ SyscallDesc("nxm_thread_destroy", unimplementedFunc),
     /* 30 */ SyscallDesc("lw_wire", unimplementedFunc),
     /* 31 */ SyscallDesc("lw_unwire", unimplementedFunc),
-    /* 32 */ SyscallDesc("nxm_thread_create", Tru64::nxm_thread_createFunc),
-    /* 33 */ SyscallDesc("nxm_task_init", Tru64::nxm_task_initFunc),
+    /* 32 */ SyscallDesc("nxm_thread_create", AlphaTru64::nxm_thread_createFunc),
+    /* 33 */ SyscallDesc("nxm_task_init", AlphaTru64::nxm_task_initFunc),
     /* 34 */ SyscallDesc("kern_invalid", unimplementedFunc),
-    /* 35 */ SyscallDesc("nxm_idle", Tru64::nxm_idleFunc),
+    /* 35 */ SyscallDesc("nxm_idle", AlphaTru64::nxm_idleFunc),
     /* 36 */ SyscallDesc("nxm_wakeup_idle", unimplementedFunc),
     /* 37 */ SyscallDesc("nxm_set_pthid", unimplementedFunc),
     /* 38 */ SyscallDesc("nxm_thread_kill", unimplementedFunc),
-    /* 39 */ SyscallDesc("nxm_thread_block", Tru64::nxm_thread_blockFunc),
+    /* 39 */ SyscallDesc("nxm_thread_block", AlphaTru64::nxm_thread_blockFunc),
     /* 40 */ SyscallDesc("nxm_thread_wakeup", unimplementedFunc),
     /* 41 */ SyscallDesc("init_process", unimplementedFunc),
     /* 42 */ SyscallDesc("nxm_get_binding", unimplementedFunc),
@@ -476,7 +519,7 @@ SyscallDesc AlphaTru64Process::machSyscallDescs[] = {
     /* 44 */ SyscallDesc("nxm_resched", unimplementedFunc),
     /* 45 */ SyscallDesc("nxm_set_cancel", unimplementedFunc),
     /* 46 */ SyscallDesc("nxm_set_binding", unimplementedFunc),
-    /* 47 */ SyscallDesc("stack_create", Tru64::stack_createFunc),
+    /* 47 */ SyscallDesc("stack_create", AlphaTru64::stack_createFunc),
     /* 48 */ SyscallDesc("nxm_get_state", unimplementedFunc),
     /* 49 */ SyscallDesc("nxm_thread_suspend", unimplementedFunc),
     /* 50 */ SyscallDesc("nxm_thread_resume", unimplementedFunc),
@@ -488,7 +531,7 @@ SyscallDesc AlphaTru64Process::machSyscallDescs[] = {
     /* 56 */ SyscallDesc("host_priv_self", unimplementedFunc),
     /* 57 */ SyscallDesc("kern_invalid", unimplementedFunc),
     /* 58 */ SyscallDesc("kern_invalid", unimplementedFunc),
-    /* 59 */ SyscallDesc("swtch_pri", Tru64::swtch_priFunc),
+    /* 59 */ SyscallDesc("swtch_pri", AlphaTru64::swtch_priFunc),
     /* 60 */ SyscallDesc("swtch", unimplementedFunc),
     /* 61 */ SyscallDesc("thread_switch", unimplementedFunc),
     /* 62 */ SyscallDesc("semop_fast", unimplementedFunc),
@@ -496,7 +539,7 @@ SyscallDesc AlphaTru64Process::machSyscallDescs[] = {
     /* 64 */ SyscallDesc("nxm_pshared_block", unimplementedFunc),
     /* 65 */ SyscallDesc("nxm_pshared_unblock", unimplementedFunc),
     /* 66 */ SyscallDesc("nxm_pshared_destroy", unimplementedFunc),
-    /* 67 */ SyscallDesc("nxm_swtch_pri", Tru64::swtch_priFunc),
+    /* 67 */ SyscallDesc("nxm_swtch_pri", AlphaTru64::swtch_priFunc),
     /* 68 */ SyscallDesc("lw_syscall", unimplementedFunc),
     /* 69 */ SyscallDesc("kern_invalid", unimplementedFunc),
     /* 70 */ SyscallDesc("mach_sctimes_0", unimplementedFunc),
diff --git a/arch/alpha/tru64/tru64.cc b/arch/alpha/tru64/tru64.cc
new file mode 100644 (file)
index 0000000..4a3e653
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "arch/alpha/tru64/tru64.hh"
+
+// open(2) flags translation table
+OpenFlagTransTable AlphaTru64::openFlagTable[] = {
+#ifdef _MSC_VER
+  { AlphaTru64::TGT_O_RDONLY,  _O_RDONLY },
+  { AlphaTru64::TGT_O_WRONLY,  _O_WRONLY },
+  { AlphaTru64::TGT_O_RDWR,    _O_RDWR },
+  { AlphaTru64::TGT_O_APPEND,  _O_APPEND },
+  { AlphaTru64::TGT_O_CREAT,   _O_CREAT },
+  { AlphaTru64::TGT_O_TRUNC,   _O_TRUNC },
+  { AlphaTru64::TGT_O_EXCL,    _O_EXCL },
+#ifdef _O_NONBLOCK
+  { AlphaTru64::TGT_O_NONBLOCK,        _O_NONBLOCK },
+#endif
+#ifdef _O_NOCTTY
+  { AlphaTru64::TGT_O_NOCTTY,  _O_NOCTTY },
+#endif
+#ifdef _O_SYNC
+  { AlphaTru64::TGT_O_SYNC,    _O_SYNC },
+#endif
+#else /* !_MSC_VER */
+  { AlphaTru64::TGT_O_RDONLY,  O_RDONLY },
+  { AlphaTru64::TGT_O_WRONLY,  O_WRONLY },
+  { AlphaTru64::TGT_O_RDWR,    O_RDWR },
+  { AlphaTru64::TGT_O_APPEND,  O_APPEND },
+  { AlphaTru64::TGT_O_CREAT,   O_CREAT },
+  { AlphaTru64::TGT_O_TRUNC,   O_TRUNC },
+  { AlphaTru64::TGT_O_EXCL,    O_EXCL },
+  { AlphaTru64::TGT_O_NONBLOCK,        O_NONBLOCK },
+  { AlphaTru64::TGT_O_NOCTTY,  O_NOCTTY },
+#ifdef O_SYNC
+  { AlphaTru64::TGT_O_SYNC,    O_SYNC },
+#endif
+#endif /* _MSC_VER */
+};
+
+const int AlphaTru64::NUM_OPEN_FLAGS =
+        (sizeof(AlphaTru64::openFlagTable)/sizeof(AlphaTru64::openFlagTable[0]));
+
+
+
diff --git a/arch/alpha/tru64/tru64.hh b/arch/alpha/tru64/tru64.hh
new file mode 100644 (file)
index 0000000..63eff65
--- /dev/null
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __ALPHA_ALPHA_TRU64_HH
+#define __ALPHA_ALPHA_TRU64_HH
+
+#include "kern/tru64/tru64.hh"
+
+class AlphaTru64 : public Tru64
+{
+
+  public:
+    /// This table maps the target open() flags to the corresponding
+    /// host open() flags.
+    static OpenFlagTransTable openFlagTable[];
+
+    /// Number of entries in openFlagTable[].
+    static const int NUM_OPEN_FLAGS;
+
+    //@{
+    /// open(2) flag values.
+    static const int TGT_O_RDONLY      = 00000000;     //!< O_RDONLY
+    static const int TGT_O_WRONLY      = 00000001;     //!< O_WRONLY
+    static const int TGT_O_RDWR                = 00000002;     //!< O_RDWR
+    static const int TGT_O_NONBLOCK     = 00000004;    //!< O_NONBLOCK
+    static const int TGT_O_APPEND      = 00000010;     //!< O_APPEND
+    static const int TGT_O_CREAT       = 00001000;     //!< O_CREAT
+    static const int TGT_O_TRUNC       = 00002000;     //!< O_TRUNC
+    static const int TGT_O_EXCL                = 00004000;     //!< O_EXCL
+    static const int TGT_O_NOCTTY      = 00010000;     //!< O_NOCTTY
+    static const int TGT_O_SYNC                = 00040000;     //!< O_SYNC
+    static const int TGT_O_DRD         = 00100000;     //!< O_DRD
+    static const int TGT_O_DIRECTIO     = 00200000;    //!< O_DIRECTIO
+    static const int TGT_O_CACHE       = 00400000;     //!< O_CACHE
+    static const int TGT_O_DSYNC       = 02000000;     //!< O_DSYNC
+    static const int TGT_O_RSYNC       = 04000000;     //!< O_RSYNC
+    //@}
+
+    /// For mmap().
+    static const unsigned TGT_MAP_ANONYMOUS = 0x10;
+
+    //@{
+    /// For getsysinfo().
+    static const unsigned GSI_PLATFORM_NAME = 103;  //!< platform name as string
+    static const unsigned GSI_CPU_INFO = 59;   //!< CPU information
+    static const unsigned GSI_PROC_TYPE = 60;  //!< get proc_type
+    static const unsigned GSI_MAX_CPU = 30;         //!< max # cpu's on this machine
+    static const unsigned GSI_CPUS_IN_BOX = 55;        //!< number of CPUs in system
+    static const unsigned GSI_PHYSMEM = 19;            //!< Physical memory in KB
+    static const unsigned GSI_CLK_TCK = 42;            //!< clock freq in Hz
+    //@}
+
+    //@{
+    /// For getrusage().
+    static const int TGT_RUSAGE_THREAD = 1;
+    static const int TGT_RUSAGE_SELF = 0;
+    static const int TGT_RUSAGE_CHILDREN = -1;
+    //@}
+
+    //@{
+    /// For setsysinfo().
+    static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
+    //@}
+
+    //@{
+    /// ioctl() command codes.
+    static const unsigned TIOCGETP   = 0x40067408;
+    static const unsigned TIOCSETP   = 0x80067409;
+    static const unsigned TIOCSETN   = 0x8006740a;
+    static const unsigned TIOCSETC   = 0x80067411;
+    static const unsigned TIOCGETC   = 0x40067412;
+    static const unsigned FIONREAD   = 0x4004667f;
+    static const unsigned TIOCISATTY = 0x2000745e;
+    static const unsigned TIOCGETS   = 0x402c7413;
+    static const unsigned TIOCGETA   = 0x40127417;
+    //@}
+
+    //@{
+    /// For table().
+    static const int TBL_SYSINFO = 12;
+    //@}
+};
+
+
+
+#endif
index 73d588f843cb681bc9a589a42a1d1d393af54047..06b313203c1995e9067bb8a49cefe9cb6f7bec02 100644 (file)
@@ -57,6 +57,7 @@ full_system_sources = Split('''
 
 # Syscall emulation (non-full-system) sources
 syscall_emulation_sources = Split('''
+        mips_linux.cc
        linux_process.cc
         process.cc
        ''')
index 62ed7acf0db787b1bfbc6577a0b7e3f8cc3a8dd0..1f4ccbd90a16a826d1d4dd75647c7e835e1c2d37 100644 (file)
@@ -163,45 +163,6 @@ namespace MipsISA
         MiscReg_DepTag = 67
     };
 
-    struct OSFlags
-    {
-        //@{
-        /// open(2) flag values.
-        static const int TGT_O_RDONLY  = 00000000;     //!< O_RDONLY
-        static const int TGT_O_WRONLY  = 00000001;     //!< O_WRONLY
-        static const int TGT_O_RDWR    = 00000002;     //!< O_RDWR
-        static const int TGT_O_NONBLOCK = 00000004;    //!< O_NONBLOCK
-        static const int TGT_O_APPEND  = 00000010;     //!< O_APPEND
-        static const int TGT_O_CREAT   = 00001000;     //!< O_CREAT
-        static const int TGT_O_TRUNC   = 00002000;     //!< O_TRUNC
-        static const int TGT_O_EXCL    = 00004000;     //!< O_EXCL
-        static const int TGT_O_NOCTTY  = 00010000;     //!< O_NOCTTY
-        static const int TGT_O_SYNC    = 00040000;     //!< O_SYNC
-        static const int TGT_O_DRD     = 00100000;     //!< O_DRD
-        static const int TGT_O_DIRECTIO = 00200000;    //!< O_DIRECTIO
-        static const int TGT_O_CACHE   = 00400000;     //!< O_CACHE
-        static const int TGT_O_DSYNC   = 02000000;     //!< O_DSYNC
-        static const int TGT_O_RSYNC   = 04000000;     //!< O_RSYNC
-        //@}
-
-        /// For mmap().
-        static const unsigned TGT_MAP_ANONYMOUS = 0x800;
-
-        //@{
-        /// ioctl() command codes.
-        static const unsigned TIOCGETP   = 0x40067408;
-        static const unsigned TIOCSETP   = 0x80067409;
-        static const unsigned TIOCSETN   = 0x8006740a;
-        static const unsigned TIOCSETC   = 0x80067411;
-        static const unsigned TIOCGETC   = 0x40067412;
-        static const unsigned FIONREAD   = 0x4004667f;
-        static const unsigned TIOCISATTY = 0x2000745e;
-        static const unsigned TIOCGETS   = 0x402c7413;
-        static const unsigned TIOCGETA   = 0x40127417;
-        //@}
-
-    };
-
     typedef uint64_t IntReg;
     class IntRegFile
     {
index 2d02b09e1343be784daffbe58642e6932bf93ba9..89407548a35648670abb26bf710b739d9f453a62 100644 (file)
@@ -26,6 +26,7 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "arch/mips/mips_linux.hh"
 #include "arch/mips/linux_process.hh"
 #include "arch/mips/isa_traits.hh"
 
@@ -120,7 +121,7 @@ SyscallDesc MipsLinuxProcess::syscallDescs[] = {
     /*  2 */ SyscallDesc("fork", unimplementedFunc),
     /*  3 */ SyscallDesc("read", readFunc),
     /*  4 */ SyscallDesc("write", writeFunc),
-    /*  5 */ SyscallDesc("open", openFunc<Linux>),
+    /*  5 */ SyscallDesc("open", openFunc<MipsLinux>),
     /*  6 */ SyscallDesc("close", closeFunc),
     /*  7 */ SyscallDesc("waitpid", unimplementedFunc),
     /*  8 */ SyscallDesc("creat", unimplementedFunc),
@@ -130,7 +131,7 @@ SyscallDesc MipsLinuxProcess::syscallDescs[] = {
     /* 12 */ SyscallDesc("chdir", unimplementedFunc),
     /* 13 */ SyscallDesc("time", unimplementedFunc),
     /* 14 */ SyscallDesc("mknod", unimplementedFunc),
-    /* 15 */ SyscallDesc("chmod", chmodFunc<Linux>),
+    /* 15 */ SyscallDesc("chmod", chmodFunc<MipsLinux>),
     /* 16 */ SyscallDesc("lchown", chownFunc),
     /* 17 */ SyscallDesc("break", obreakFunc), /*obreak*/
     /* 18 */ SyscallDesc("unused#18", unimplementedFunc),
@@ -160,7 +161,7 @@ SyscallDesc MipsLinuxProcess::syscallDescs[] = {
     /* 42 */ SyscallDesc("pipe", unimplementedFunc),
     /* 43 */ SyscallDesc("times", unimplementedFunc),
     /* 44 */ SyscallDesc("prof", unimplementedFunc),
-    /* 45 */ SyscallDesc("brk", obreakFunc),/*openFunc<Linux>*/
+    /* 45 */ SyscallDesc("brk", obreakFunc),/*openFunc<MipsLinux>*/
     /* 46 */ SyscallDesc("setgid", unimplementedFunc),
     /* 47 */ SyscallDesc("getgid", getgidFunc),
     /* 48 */ SyscallDesc("signal", ignoreFunc),
@@ -169,7 +170,7 @@ SyscallDesc MipsLinuxProcess::syscallDescs[] = {
     /* 51 */ SyscallDesc("acct", unimplementedFunc),
     /* 52 */ SyscallDesc("umount2", unimplementedFunc),
     /* 53 */ SyscallDesc("lock", unimplementedFunc),
-    /* 54 */ SyscallDesc("ioctl", ioctlFunc<Linux>),
+    /* 54 */ SyscallDesc("ioctl", ioctlFunc<MipsLinux>),
     /* 55 */ SyscallDesc("fcntl", unimplementedFunc),
     /* 56 */ SyscallDesc("mpx", unimplementedFunc),
     /* 57 */ SyscallDesc("setpgid", unimplementedFunc),
@@ -205,7 +206,7 @@ SyscallDesc MipsLinuxProcess::syscallDescs[] = {
     /* 87 */ SyscallDesc("swapon", gethostnameFunc),
     /* 88 */ SyscallDesc("reboot", unimplementedFunc),
     /* 89 */ SyscallDesc("readdir", unimplementedFunc),
-    /* 90 */ SyscallDesc("mmap", mmapFunc<Linux>),
+    /* 90 */ SyscallDesc("mmap", mmapFunc<MipsLinux>),
     /* 91 */ SyscallDesc("munmap",munmapFunc),
     /* 92 */ SyscallDesc("truncate", fcntlFunc),
     /* 93 */ SyscallDesc("ftruncate", unimplementedFunc),
@@ -221,9 +222,9 @@ SyscallDesc MipsLinuxProcess::syscallDescs[] = {
     /* 103 */ SyscallDesc("syslog", unimplementedFunc),
     /* 104 */ SyscallDesc("setitimer", unimplementedFunc),
     /* 105 */ SyscallDesc("getitimer", unimplementedFunc),
-    /* 106 */ SyscallDesc("stat",  statFunc<Linux>),
+    /* 106 */ SyscallDesc("stat",  statFunc<MipsLinux>),
     /* 107 */ SyscallDesc("lstat", unimplementedFunc),
-    /* 108 */ SyscallDesc("fstat", fstatFunc<Linux>),
+    /* 108 */ SyscallDesc("fstat", fstatFunc<MipsLinux>),
     /* 109 */ SyscallDesc("unused#109", unimplementedFunc),
     /* 110 */ SyscallDesc("iopl", unimplementedFunc),
     /* 111 */ SyscallDesc("vhangup", unimplementedFunc),
@@ -259,9 +260,9 @@ SyscallDesc MipsLinuxProcess::syscallDescs[] = {
     /* 141 */ SyscallDesc("getdents", unimplementedFunc),
     /* 142 */ SyscallDesc("newselect", unimplementedFunc),
     /* 143 */ SyscallDesc("flock", unimplementedFunc),
-    /* 144 */ SyscallDesc("msync", unimplementedFunc),/*getrlimitFunc<Linux>*/
+    /* 144 */ SyscallDesc("msync", unimplementedFunc),/*getrlimitFunc<MipsLinux>*/
     /* 145 */ SyscallDesc("readv", unimplementedFunc),
-    /* 146 */ SyscallDesc("writev", writevFunc<Linux>),
+    /* 146 */ SyscallDesc("writev", writevFunc<MipsLinux>),
     /* 147 */ SyscallDesc("cacheflush", unimplementedFunc),
     /* 148 */ SyscallDesc("cachectl", unimplementedFunc),
     /* 149 */ SyscallDesc("sysmips", unimplementedFunc),
@@ -329,8 +330,8 @@ SyscallDesc MipsLinuxProcess::syscallDescs[] = {
     /* 211 */ SyscallDesc("truncate64", unimplementedFunc),
     /* 212 */ SyscallDesc("ftruncate64", unimplementedFunc),
     /* 213 */ SyscallDesc("stat64", unimplementedFunc),
-    /* 214 */ SyscallDesc("lstat64", lstat64Func<Linux>),
-    /* 215 */ SyscallDesc("fstat64", fstat64Func<Linux>),
+    /* 214 */ SyscallDesc("lstat64", lstat64Func<MipsLinux>),
+    /* 215 */ SyscallDesc("fstat64", fstat64Func<MipsLinux>),
     /* 216 */ SyscallDesc("pivot_root", unimplementedFunc),
     /* 217 */ SyscallDesc("mincore", unimplementedFunc),
     /* 218 */ SyscallDesc("madvise", unimplementedFunc),
diff --git a/arch/mips/mips_linux.cc b/arch/mips/mips_linux.cc
new file mode 100644 (file)
index 0000000..7a9e664
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "arch/mips/mips_linux.hh"
+
+// open(2) flags translation table
+OpenFlagTransTable MipsLinux::openFlagTable[] = {
+#ifdef _MSC_VER
+  { MipsLinux::TGT_O_RDONLY,   _O_RDONLY },
+  { MipsLinux::TGT_O_WRONLY,   _O_WRONLY },
+  { MipsLinux::TGT_O_RDWR,     _O_RDWR },
+  { MipsLinux::TGT_O_APPEND,   _O_APPEND },
+  { MipsLinux::TGT_O_CREAT,    _O_CREAT },
+  { MipsLinux::TGT_O_TRUNC,    _O_TRUNC },
+  { MipsLinux::TGT_O_EXCL,     _O_EXCL },
+#ifdef _O_NONBLOCK
+  { MipsLinux::TGT_O_NONBLOCK, _O_NONBLOCK },
+#endif
+#ifdef _O_NOCTTY
+  { MipsLinux::TGT_O_NOCTTY,   _O_NOCTTY },
+#endif
+#ifdef _O_SYNC
+  { MipsLinux::TGT_O_SYNC,     _O_SYNC },
+#endif
+#else /* !_MSC_VER */
+  { MipsLinux::TGT_O_RDONLY,   O_RDONLY },
+  { MipsLinux::TGT_O_WRONLY,   O_WRONLY },
+  { MipsLinux::TGT_O_RDWR,     O_RDWR },
+  { MipsLinux::TGT_O_APPEND,   O_APPEND },
+  { MipsLinux::TGT_O_CREAT,    O_CREAT },
+  { MipsLinux::TGT_O_TRUNC,    O_TRUNC },
+  { MipsLinux::TGT_O_EXCL,     O_EXCL },
+  { MipsLinux::TGT_O_NONBLOCK, O_NONBLOCK },
+  { MipsLinux::TGT_O_NOCTTY,   O_NOCTTY },
+#ifdef O_SYNC
+  { MipsLinux::TGT_O_SYNC,     O_SYNC },
+#endif
+#endif /* _MSC_VER */
+};
+
+const int MipsLinux::NUM_OPEN_FLAGS =
+        (sizeof(MipsLinux::openFlagTable)/sizeof(MipsLinux::openFlagTable[0]));
+
+
+
diff --git a/arch/mips/mips_linux.hh b/arch/mips/mips_linux.hh
new file mode 100644 (file)
index 0000000..b142a77
--- /dev/null
@@ -0,0 +1,107 @@
+/*
+ * Copyright (c) 2003-2005 The Regents of The University of Michigan
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met: redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer;
+ * redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution;
+ * neither the name of the copyright holders nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MIPS_MIPS_LINUX_HH
+#define __MIPS_MIPS_LINUX_HH
+
+#include "kern/linux/linux.hh"
+
+class MipsLinux : public Linux
+{
+  public:
+
+    /// This table maps the target open() flags to the corresponding
+    /// host open() flags.
+    static OpenFlagTransTable openFlagTable[];
+
+    /// Number of entries in openFlagTable[].
+    static const int NUM_OPEN_FLAGS;
+
+    //@{
+    /// open(2) flag values.
+    static const int TGT_O_RDONLY      = 00000000;     //!< O_RDONLY
+    static const int TGT_O_WRONLY      = 00000001;     //!< O_WRONLY
+    static const int TGT_O_RDWR        = 00000002;     //!< O_RDWR
+    static const int TGT_O_NONBLOCK = 00000004;        //!< O_NONBLOCK
+    static const int TGT_O_APPEND      = 00000010;     //!< O_APPEND
+    static const int TGT_O_CREAT       = 00001000;     //!< O_CREAT
+    static const int TGT_O_TRUNC       = 00002000;     //!< O_TRUNC
+    static const int TGT_O_EXCL        = 00004000;     //!< O_EXCL
+    static const int TGT_O_NOCTTY      = 00010000;     //!< O_NOCTTY
+    static const int TGT_O_SYNC        = 00040000;     //!< O_SYNC
+    static const int TGT_O_DRD = 00100000;     //!< O_DRD
+    static const int TGT_O_DIRECTIO = 00200000;        //!< O_DIRECTIO
+    static const int TGT_O_CACHE       = 00400000;     //!< O_CACHE
+    static const int TGT_O_DSYNC       = 02000000;     //!< O_DSYNC
+    static const int TGT_O_RSYNC       = 04000000;     //!< O_RSYNC
+    //@}
+
+    /// For mmap().
+    static const unsigned TGT_MAP_ANONYMOUS = 0x10;
+
+    //@{
+    /// For getsysinfo().
+    static const unsigned GSI_PLATFORM_NAME = 103;  //!< platform name as string
+    static const unsigned GSI_CPU_INFO = 59;   //!< CPU information
+    static const unsigned GSI_PROC_TYPE = 60;  //!< get proc_type
+    static const unsigned GSI_MAX_CPU = 30;         //!< max # cpu's on this machine
+    static const unsigned GSI_CPUS_IN_BOX = 55;        //!< number of CPUs in system
+    static const unsigned GSI_PHYSMEM = 19;            //!< Physical memory in KB
+    static const unsigned GSI_CLK_TCK = 42;            //!< clock freq in Hz
+    //@}
+
+    //@{
+    /// For getrusage().
+    static const int TGT_RUSAGE_SELF = 0;
+    static const int TGT_RUSAGE_CHILDREN = -1;
+    static const int TGT_RUSAGE_BOTH = -2;
+    //@}
+
+    //@{
+    /// For setsysinfo().
+    static const unsigned SSI_IEEE_FP_CONTROL = 14; //!< ieee_set_fp_control()
+    //@}
+
+    //@{
+    /// ioctl() command codes.
+    static const unsigned TIOCGETP   = 0x40067408;
+    static const unsigned TIOCSETP   = 0x80067409;
+    static const unsigned TIOCSETN   = 0x8006740a;
+    static const unsigned TIOCSETC   = 0x80067411;
+    static const unsigned TIOCGETC   = 0x40067412;
+    static const unsigned FIONREAD   = 0x4004667f;
+    static const unsigned TIOCISATTY = 0x2000745e;
+    static const unsigned TIOCGETS   = 0x402c7413;
+    static const unsigned TIOCGETA   = 0x40127417;
+    //@}
+
+    /// For table().
+    static const int TBL_SYSINFO = 12;
+};
+
+#endif
index 93d92a85b33e5867bd318724627de11ffb6af336..bab460333d771421562f4b88b8c034cabba8c5db 100644 (file)
@@ -44,8 +44,8 @@ class Linux {};
 #include <sys/types.h>
 #include <unistd.h>
 
-#include "sim/syscall_emul.hh"
 #include "arch/isa_traits.hh"
+#include "sim/syscall_emul.hh"
 
 class TranslatingPort;
 
@@ -67,8 +67,6 @@ class Linux {
     typedef uint32_t gid_t;
     //@}
 
-    typedef TheISA::OSFlags OSFlags;
-
 #if BSD_HOST
     typedef struct stat hst_stat;
     typedef struct stat hst_stat64;
@@ -77,14 +75,6 @@ class Linux {
     typedef struct stat64 hst_stat64;
 #endif
 
-
-    /// This table maps the target open() flags to the corresponding
-    /// host open() flags.
-    static OpenFlagTransTable openFlagTable[];
-
-    /// Number of entries in openFlagTable[].
-    static const int NUM_OPEN_FLAGS;
-
     /// Stat buffer.  Note that we can't call it 'stat' since that
     /// gets #defined to something else on some systems.
     struct tgt_stat {
index ce9a67199a225a4db52525b8c7d88d0d6db287d2..3bd0f39f0d93e4ec62c7a85bb846dab6806167ab 100644 (file)
@@ -70,8 +70,6 @@ class Tru64 {
 
   public:
 
-    typedef TheISA::OSFlags OSFlags;
-
     //@{
     /// Basic Tru64 types.
     typedef uint64_t size_t;
@@ -87,13 +85,6 @@ class Tru64 {
     typedef quad fsid_t;
     //@}
 
-    /// This table maps the target open() flags to the corresponding
-    /// host open() flags.
-    static OpenFlagTransTable openFlagTable[];
-
-    /// Number of entries in openFlagTable[].
-    static const int NUM_OPEN_FLAGS;
-
     /// Stat buffer.  Note that Tru64 v5.0+ use a new "F64" stat
     /// structure, and a new set of syscall numbers for stat calls.
     /// On some hosts (notably Linux) define st_atime, st_mtime, and
@@ -684,45 +675,6 @@ class Tru64 {
         return 0;
     }
 
-    /// Target table() handler.
-    static SyscallReturn
-    tableFunc(SyscallDesc *desc, int callnum, Process *process,
-              ExecContext *xc)
-    {
-        using namespace std;
-        using namespace TheISA;
-
-        int id = xc->getSyscallArg(0);         // table ID
-        int index = xc->getSyscallArg(1);      // index into table
-        // arg 2 is buffer pointer; type depends on table ID
-        int nel = xc->getSyscallArg(3);                // number of elements
-        int lel = xc->getSyscallArg(4);                // expected element size
-
-        switch (id) {
-          case Tru64::OSFlags::TBL_SYSINFO: {
-              if (index != 0 || nel != 1 || lel != sizeof(Tru64::tbl_sysinfo))
-                  return -EINVAL;
-              TypedBufferArg<Tru64::tbl_sysinfo> elp(xc->getSyscallArg(2));
-
-              const int clk_hz = one_million;
-              elp->si_user = htog(curTick / (Clock::Frequency / clk_hz));
-              elp->si_nice = htog(0);
-              elp->si_sys = htog(0);
-              elp->si_idle = htog(0);
-              elp->wait = htog(0);
-              elp->si_hz = htog(clk_hz);
-              elp->si_phz = htog(clk_hz);
-              elp->si_boottime = htog(seconds_since_epoch); // seconds since epoch?
-              elp->si_max_procs = htog(process->numCpus());
-              elp.copyOut(xc->getMemPort());
-              return 0;
-          }
-
-          default:
-            cerr << "table(): id " << id << " unknown." << endl;
-            return -EINVAL;
-        }
-    }
 
     //
     // Mach syscalls -- identified by negated syscall numbers
index bab29ca6a9dbecd661296418628546e87b32669d..00f016410511ae3b0fc5d98579cd65c9f7e7f1ef 100644 (file)
@@ -348,14 +348,14 @@ ioctlFunc(SyscallDesc *desc, int callnum, Process *process,
     }
 
     switch (req) {
-      case OS::OSFlags::TIOCISATTY:
-      case OS::OSFlags::TIOCGETP:
-      case OS::OSFlags::TIOCSETP:
-      case OS::OSFlags::TIOCSETN:
-      case OS::OSFlags::TIOCSETC:
-      case OS::OSFlags::TIOCGETC:
-      case OS::OSFlags::TIOCGETS:
-      case OS::OSFlags::TIOCGETA:
+      case OS::TIOCISATTY:
+      case OS::TIOCGETP:
+      case OS::TIOCSETP:
+      case OS::TIOCSETN:
+      case OS::TIOCSETC:
+      case OS::TIOCGETC:
+      case OS::TIOCGETS:
+      case OS::TIOCGETA:
         return -ENOTTY;
 
       default:
@@ -719,7 +719,7 @@ mmapFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc)
     p->pTable->allocate(start, length);
     p->mmap_end += length;
 
-    if (!(flags & OS::OSFlags::TGT_MAP_ANONYMOUS)) {
+    if (!(flags & OS::TGT_MAP_ANONYMOUS)) {
         warn("allowing mmap of file @ fd %d. "
              "This will break if not /dev/zero.", xc->getSyscallArg(4));
     }
@@ -810,7 +810,7 @@ getrusageFunc(SyscallDesc *desc, int callnum, Process *process,
     int who = xc->getSyscallArg(0);    // THREAD, SELF, or CHILDREN
     TypedBufferArg<typename OS::rusage> rup(xc->getSyscallArg(1));
 
-    if (who != OS::OSFlags::TGT_RUSAGE_SELF) {
+    if (who != OS::TGT_RUSAGE_SELF) {
         // don't really handle THREAD or CHILDREN, but just warn and
         // plow ahead
         warn("getrusage() only supports RUSAGE_SELF.  Parameter %d ignored.",
@@ -843,4 +843,7 @@ getrusageFunc(SyscallDesc *desc, int callnum, Process *process,
     return 0;
 }
 
+
+
+
 #endif // __SIM_SYSCALL_EMUL_HH__