summaryrefslogtreecommitdiff
path: root/src/kern
diff options
context:
space:
mode:
Diffstat (limited to 'src/kern')
-rw-r--r--src/kern/tru64/tru64.hh251
1 files changed, 128 insertions, 123 deletions
diff --git a/src/kern/tru64/tru64.hh b/src/kern/tru64/tru64.hh
index 63d4f3a9b..87ac88007 100644
--- a/src/kern/tru64/tru64.hh
+++ b/src/kern/tru64/tru64.hh
@@ -90,71 +90,6 @@ class Tru64 : public OperatingSystem
typedef quad fsid_t;
//@}
- /// 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
- /// st_ctime as macros, so we append an X to get around this.
- struct F64_stat {
- dev_t st_dev; //!< st_dev
- int32_t st_retired1; //!< st_retired1
- mode_t st_mode; //!< st_mode
- nlink_t st_nlink; //!< st_nlink
- uint16_t st_nlink_reserved; //!< st_nlink_reserved
- uid_t st_uid; //!< st_uid
- gid_t st_gid; //!< st_gid
- dev_t st_rdev; //!< st_rdev
- dev_t st_ldev; //!< st_ldev
- off_t st_size; //!< st_size
- time_t st_retired2; //!< st_retired2
- int32_t st_uatime; //!< st_uatime
- time_t st_retired3; //!< st_retired3
- int32_t st_umtime; //!< st_umtime
- time_t st_retired4; //!< st_retired4
- int32_t st_uctime; //!< st_uctime
- int32_t st_retired5; //!< st_retired5
- int32_t st_retired6; //!< st_retired6
- uint32_t st_flags; //!< st_flags
- uint32_t st_gen; //!< st_gen
- uint64_t st_spare[4]; //!< st_spare[4]
- ino_t st_ino; //!< st_ino
- int32_t st_ino_reserved; //!< st_ino_reserved
- time_t st_atimeX; //!< st_atime
- int32_t st_atime_reserved; //!< st_atime_reserved
- time_t st_mtimeX; //!< st_mtime
- int32_t st_mtime_reserved; //!< st_mtime_reserved
- time_t st_ctimeX; //!< st_ctime
- int32_t st_ctime_reserved; //!< st_ctime_reserved
- uint64_t st_blksize; //!< st_blksize
- uint64_t st_blocks; //!< st_blocks
- };
-
-
- /// Old Tru64 v4.x stat struct.
- /// Tru64 maintains backwards compatibility with v4.x by
- /// implementing another set of stat functions using the old
- /// structure definition and binding them to the old syscall
- /// numbers.
-
- struct pre_F64_stat {
- dev_t st_dev;
- ino_t st_ino;
- mode_t st_mode;
- nlink_t st_nlink;
- uid_t st_uid __attribute__ ((aligned(sizeof(uid_t))));
- gid_t st_gid;
- dev_t st_rdev;
- off_t st_size __attribute__ ((aligned(sizeof(off_t))));
- time_t st_atimeX;
- int32_t st_uatime;
- time_t st_mtimeX;
- int32_t st_umtime;
- time_t st_ctimeX;
- int32_t st_uctime;
- uint32_t st_blksize;
- int32_t st_blocks;
- uint32_t st_flags;
- uint32_t st_gen;
- };
/// For statfs().
struct F64_statfs {
@@ -458,7 +393,7 @@ class Tru64 : public OperatingSystem
uint64_t pad2[2]; //!< pad2
};
- /// Helper function to convert a host stat buffer to a target stat
+ /*/// Helper function to convert a host stat buffer to a target stat
/// buffer. Also copies the target buffer out to the simulated
/// memory space. Used by stat(), fstat(), and lstat().
template <class T>
@@ -484,7 +419,7 @@ class Tru64 : public OperatingSystem
tgt->st_blocks = htog(host->st_blocks);
tgt.copyOut(mem);
- }
+ }*/
/// Helper function to convert a host statfs buffer to a target statfs
/// buffer. Also copies the target buffer out to the simulated
@@ -515,37 +450,7 @@ class Tru64 : public OperatingSystem
tgt.copyOut(mem);
}
- class F64 {
- public:
- static void copyOutStatBuf(TranslatingPort *mem, Addr addr,
- global_stat *host)
- {
- Tru64::copyOutStatBuf<Tru64::F64_stat>(mem, addr, host);
- }
-
- static void copyOutStatfsBuf(TranslatingPort *mem, Addr addr,
- global_statfs *host)
- {
- Tru64::copyOutStatfsBuf<Tru64::F64_statfs>(mem, addr, host);
- }
- };
-
- class PreF64 {
- public:
- static void copyOutStatBuf(TranslatingPort *mem, Addr addr,
- global_stat *host)
- {
- Tru64::copyOutStatBuf<Tru64::pre_F64_stat>(mem, addr, host);
- }
-
- static void copyOutStatfsBuf(TranslatingPort *mem, Addr addr,
- global_statfs *host)
- {
- Tru64::copyOutStatfsBuf<Tru64::pre_F64_statfs>(mem, addr, host);
- }
- };
-
- /// Helper function to convert a host stat buffer to an old pre-F64
+/* /// Helper function to convert a host stat buffer to an old pre-F64
/// (4.x) target stat buffer. Also copies the target buffer out to
/// the simulated memory space. Used by pre_F64_stat(),
/// pre_F64_fstat(), and pre_F64_lstat().
@@ -571,7 +476,7 @@ class Tru64 : public OperatingSystem
tgt->st_blocks = htog(host->st_blocks);
tgt.copyOut(mem);
- }
+ }*/
/// The target system's hostname.
@@ -580,7 +485,7 @@ class Tru64 : public OperatingSystem
/// Target getdirentries() handler.
static SyscallReturn
- getdirentriesFunc(SyscallDesc *desc, int callnum, Process *process,
+ getdirentriesFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace TheISA;
@@ -641,7 +546,7 @@ class Tru64 : public OperatingSystem
/// Target sigreturn() handler.
static SyscallReturn
- sigreturnFunc(SyscallDesc *desc, int callnum, Process *process,
+ sigreturnFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace TheISA;
@@ -674,7 +579,7 @@ class Tru64 : public OperatingSystem
/// Create a stack region for a thread.
static SyscallReturn
- stack_createFunc(SyscallDesc *desc, int callnum, Process *process,
+ stack_createFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace TheISA;
@@ -704,7 +609,7 @@ class Tru64 : public OperatingSystem
/// schedulers by creating a shared-memory region. The shared memory
/// region has several structs, some global, some per-RAD, some per-VP.
static SyscallReturn
- nxm_task_initFunc(SyscallDesc *desc, int callnum, Process *process,
+ nxm_task_initFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace std;
@@ -838,7 +743,7 @@ class Tru64 : public OperatingSystem
/// Create thread.
static SyscallReturn
- nxm_thread_createFunc(SyscallDesc *desc, int callnum, Process *process,
+ nxm_thread_createFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace std;
@@ -955,7 +860,7 @@ class Tru64 : public OperatingSystem
/// Thread idle call (like yield()).
static SyscallReturn
- nxm_idleFunc(SyscallDesc *desc, int callnum, Process *process,
+ nxm_idleFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
return 0;
@@ -963,7 +868,7 @@ class Tru64 : public OperatingSystem
/// Block thread.
static SyscallReturn
- nxm_thread_blockFunc(SyscallDesc *desc, int callnum, Process *process,
+ nxm_thread_blockFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace std;
@@ -982,7 +887,7 @@ class Tru64 : public OperatingSystem
/// block.
static SyscallReturn
- nxm_blockFunc(SyscallDesc *desc, int callnum, Process *process,
+ nxm_blockFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace std;
@@ -1005,7 +910,7 @@ class Tru64 : public OperatingSystem
/// Unblock thread.
static SyscallReturn
- nxm_unblockFunc(SyscallDesc *desc, int callnum, Process *process,
+ nxm_unblockFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace std;
@@ -1020,7 +925,7 @@ class Tru64 : public OperatingSystem
/// Switch thread priority.
static SyscallReturn
- swtch_priFunc(SyscallDesc *desc, int callnum, Process *process,
+ swtch_priFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
// Attempts to switch to another runnable thread (if there is
@@ -1037,7 +942,7 @@ class Tru64 : public OperatingSystem
/// Activate thread context waiting on a channel. Just activate one
/// by default.
static int
- activate_waiting_context(Addr uaddr, Process *process,
+ activate_waiting_context(Addr uaddr, LiveProcess *process,
bool activate_all = false)
{
using namespace std;
@@ -1068,7 +973,7 @@ class Tru64 : public OperatingSystem
/// M5 hacked-up lock acquire.
static void
- m5_lock_mutex(Addr uaddr, Process *process, ThreadContext *tc)
+ m5_lock_mutex(Addr uaddr, LiveProcess *process, ThreadContext *tc)
{
using namespace TheISA;
@@ -1089,7 +994,7 @@ class Tru64 : public OperatingSystem
/// M5 unlock call.
static void
- m5_unlock_mutex(Addr uaddr, Process *process, ThreadContext *tc)
+ m5_unlock_mutex(Addr uaddr, LiveProcess *process, ThreadContext *tc)
{
TypedBufferArg<uint64_t> lockp(uaddr);
@@ -1108,7 +1013,7 @@ class Tru64 : public OperatingSystem
/// Lock acquire syscall handler.
static SyscallReturn
- m5_mutex_lockFunc(SyscallDesc *desc, int callnum, Process *process,
+ m5_mutex_lockFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
Addr uaddr = tc->getSyscallArg(0);
@@ -1123,7 +1028,7 @@ class Tru64 : public OperatingSystem
/// Try lock (non-blocking).
static SyscallReturn
- m5_mutex_trylockFunc(SyscallDesc *desc, int callnum, Process *process,
+ m5_mutex_trylockFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace TheISA;
@@ -1145,7 +1050,7 @@ class Tru64 : public OperatingSystem
/// Unlock syscall handler.
static SyscallReturn
- m5_mutex_unlockFunc(SyscallDesc *desc, int callnum, Process *process,
+ m5_mutex_unlockFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
Addr uaddr = tc->getSyscallArg(0);
@@ -1157,7 +1062,7 @@ class Tru64 : public OperatingSystem
/// Signal ocndition.
static SyscallReturn
- m5_cond_signalFunc(SyscallDesc *desc, int callnum, Process *process,
+ m5_cond_signalFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
Addr cond_addr = tc->getSyscallArg(0);
@@ -1170,7 +1075,7 @@ class Tru64 : public OperatingSystem
/// Wake up all processes waiting on the condition variable.
static SyscallReturn
- m5_cond_broadcastFunc(SyscallDesc *desc, int callnum, Process *process,
+ m5_cond_broadcastFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
Addr cond_addr = tc->getSyscallArg(0);
@@ -1182,7 +1087,7 @@ class Tru64 : public OperatingSystem
/// Wait on a condition.
static SyscallReturn
- m5_cond_waitFunc(SyscallDesc *desc, int callnum, Process *process,
+ m5_cond_waitFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
using namespace TheISA;
@@ -1206,7 +1111,7 @@ class Tru64 : public OperatingSystem
/// Thread exit.
static SyscallReturn
- m5_thread_exitFunc(SyscallDesc *desc, int callnum, Process *process,
+ m5_thread_exitFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
assert(tc->status() == ThreadContext::Active);
@@ -1217,18 +1122,16 @@ class Tru64 : public OperatingSystem
/// Indirect syscall invocation (call #0).
static SyscallReturn
- indirectSyscallFunc(SyscallDesc *desc, int callnum, Process *process,
+ indirectSyscallFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
ThreadContext *tc)
{
int new_callnum = tc->getSyscallArg(0);
- LiveProcess *lp = dynamic_cast<LiveProcess*>(process);
- assert(lp);
for (int i = 0; i < 5; ++i)
tc->setSyscallArg(i, tc->getSyscallArg(i+1));
- SyscallDesc *new_desc = lp->getDesc(new_callnum);
+ SyscallDesc *new_desc = process->getDesc(new_callnum);
if (desc == NULL)
fatal("Syscall %d out of range", callnum);
@@ -1239,6 +1142,108 @@ class Tru64 : public OperatingSystem
}; // class Tru64
+class Tru64_F64 : public Tru64
+{
+ public:
+
+ /// 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
+ /// st_ctime as macros, so we append an X to get around this.
+ struct F64_stat {
+ dev_t st_dev; //!< st_dev
+ int32_t st_retired1; //!< st_retired1
+ mode_t st_mode; //!< st_mode
+ nlink_t st_nlink; //!< st_nlink
+ uint16_t st_nlink_reserved; //!< st_nlink_reserved
+ uid_t st_uid; //!< st_uid
+ gid_t st_gid; //!< st_gid
+ dev_t st_rdev; //!< st_rdev
+ dev_t st_ldev; //!< st_ldev
+ off_t st_size; //!< st_size
+ time_t st_retired2; //!< st_retired2
+ int32_t st_uatime; //!< st_uatime
+ time_t st_retired3; //!< st_retired3
+ int32_t st_umtime; //!< st_umtime
+ time_t st_retired4; //!< st_retired4
+ int32_t st_uctime; //!< st_uctime
+ int32_t st_retired5; //!< st_retired5
+ int32_t st_retired6; //!< st_retired6
+ uint32_t st_flags; //!< st_flags
+ uint32_t st_gen; //!< st_gen
+ uint64_t st_spare[4]; //!< st_spare[4]
+ ino_t st_ino; //!< st_ino
+ int32_t st_ino_reserved; //!< st_ino_reserved
+ time_t st_atimeX; //!< st_atime
+ int32_t st_atime_reserved; //!< st_atime_reserved
+ time_t st_mtimeX; //!< st_mtime
+ int32_t st_mtime_reserved; //!< st_mtime_reserved
+ time_t st_ctimeX; //!< st_ctime
+ int32_t st_ctime_reserved; //!< st_ctime_reserved
+ uint64_t st_blksize; //!< st_blksize
+ uint64_t st_blocks; //!< st_blocks
+ };
+
+ typedef F64_stat tgt_stat;
+/*
+ static void copyOutStatBuf(TranslatingPort *mem, Addr addr,
+ global_stat *host)
+ {
+ Tru64::copyOutStatBuf<Tru64::F64_stat>(mem, addr, host);
+ }*/
+
+ static void copyOutStatfsBuf(TranslatingPort *mem, Addr addr,
+ global_statfs *host)
+ {
+ Tru64::copyOutStatfsBuf<Tru64::F64_statfs>(mem, addr, host);
+ }
+};
+
+class Tru64_PreF64 : public Tru64
+{
+ public:
+
+ /// Old Tru64 v4.x stat struct.
+ /// Tru64 maintains backwards compatibility with v4.x by
+ /// implementing another set of stat functions using the old
+ /// structure definition and binding them to the old syscall
+ /// numbers.
+
+ struct pre_F64_stat {
+ dev_t st_dev;
+ ino_t st_ino;
+ mode_t st_mode;
+ nlink_t st_nlink;
+ uid_t st_uid __attribute__ ((aligned(sizeof(uid_t))));
+ gid_t st_gid;
+ dev_t st_rdev;
+ off_t st_size __attribute__ ((aligned(sizeof(off_t))));
+ time_t st_atimeX;
+ int32_t st_uatime;
+ time_t st_mtimeX;
+ int32_t st_umtime;
+ time_t st_ctimeX;
+ int32_t st_uctime;
+ uint32_t st_blksize;
+ int32_t st_blocks;
+ uint32_t st_flags;
+ uint32_t st_gen;
+ };
+
+ typedef pre_F64_stat tgt_stat;
+/*
+ static void copyOutStatBuf(TranslatingPort *mem, Addr addr,
+ global_stat *host)
+ {
+ Tru64::copyOutStatBuf<Tru64::pre_F64_stat>(mem, addr, host);
+ }*/
+
+ static void copyOutStatfsBuf(TranslatingPort *mem, Addr addr,
+ global_statfs *host)
+ {
+ Tru64::copyOutStatfsBuf<Tru64::pre_F64_statfs>(mem, addr, host);
+ }
+};
#endif // FULL_SYSTEM