diff options
Diffstat (limited to 'sim')
-rw-r--r-- | sim/serialize.cc | 4 | ||||
-rw-r--r-- | sim/serialize.hh | 6 | ||||
-rw-r--r-- | sim/syscall_emul.cc | 28 | ||||
-rw-r--r-- | sim/syscall_emul.hh | 10 |
4 files changed, 42 insertions, 6 deletions
diff --git a/sim/serialize.cc b/sim/serialize.cc index d836e7c20..f8d6b46bf 100644 --- a/sim/serialize.cc +++ b/sim/serialize.cc @@ -187,7 +187,7 @@ class Globals : public Serializable { public: const string name() const; - void serialize(ostream& os); + void serialize(ostream &os); void unserialize(Checkpoint *cp); }; @@ -201,7 +201,7 @@ Globals::name() const } void -Globals::serialize(ostream& os) +Globals::serialize(ostream &os) { nameOut(os); SERIALIZE_SCALAR(curTick); diff --git a/sim/serialize.hh b/sim/serialize.hh index 43dbd2c85..36622b7fe 100644 --- a/sim/serialize.hh +++ b/sim/serialize.hh @@ -103,8 +103,8 @@ objParamIn(Checkpoint *cp, const std::string §ion, class Serializable { protected: - void nameOut(std::ostream& os); - void nameOut(std::ostream& os, const std::string &_name); + void nameOut(std::ostream &os); + void nameOut(std::ostream &os, const std::string &_name); public: Serializable() {} @@ -113,7 +113,7 @@ class Serializable // manditory virtual function, so objects must provide names virtual const std::string name() const = 0; - virtual void serialize(std::ostream& os) {} + virtual void serialize(std::ostream &os) {} virtual void unserialize(Checkpoint *cp, const std::string §ion) {} static Serializable *create(Checkpoint *cp, diff --git a/sim/syscall_emul.cc b/sim/syscall_emul.cc index 9955d4421..e953a7308 100644 --- a/sim/syscall_emul.cc +++ b/sim/syscall_emul.cc @@ -185,4 +185,32 @@ gethostnameFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc) return 0; } +int +unlinkFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc) +{ + std::string path; + + if (xc->mem->readString(path, xc->getSyscallArg(0)) != No_Fault) + return -EFAULT; + + int result = unlink(path.c_str()); + return (result == -1) ? -errno : result; +} + +int +renameFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc) +{ + std::string old_name; + + if (xc->mem->readString(old_name, xc->getSyscallArg(0)) != No_Fault) + return -EFAULT; + + std::string new_name; + + if (xc->mem->readString(new_name, xc->getSyscallArg(1)) != No_Fault) + return -EFAULT; + + int result = rename(old_name.c_str(),new_name.c_str()); + return (result == -1) ? -errno : result; +} diff --git a/sim/syscall_emul.hh b/sim/syscall_emul.hh index df4038f71..b425ef83c 100644 --- a/sim/syscall_emul.hh +++ b/sim/syscall_emul.hh @@ -191,6 +191,12 @@ int munmapFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc); /// Target gethostname() handler. int gethostnameFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc); +/// Target unlink() handler. +int unlinkFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc); + +/// Target rename() handler. +int renameFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc); + ////////////////////////////////////////////////////////////////////// // // The following emulation functions are generic, but need to be @@ -223,10 +229,12 @@ ioctlFunc(SyscallDesc *desc, int callnum, Process *process, case OS::TIOCSETN: case OS::TIOCSETC: case OS::TIOCGETC: + case OS::TIOCGETS: + case OS::TIOCGETA: return -ENOTTY; default: - fatal("Unsupported ioctl call: ioctl(%d, 0x%x, ...)\n", fd, req); + fatal("Unsupported ioctl call: ioctl(%d, 0x%x, ...) @ 0x%llx\n", fd, req, xc->readPC()); } } |