Merge ehallnor@zizzer:/bk/m5 into zazzer.eecs.umich.edu:/z/ehallnor/m5
--HG-- extra : convert_revision : 158117a2cba91b8cb04f41a418155149bcbba777
This commit is contained in:
commit
bdfb5de4b2
4 changed files with 50 additions and 9 deletions
|
@ -139,6 +139,8 @@ class Linux {
|
||||||
static const unsigned TIOCGETC = 0x40067412;
|
static const unsigned TIOCGETC = 0x40067412;
|
||||||
static const unsigned FIONREAD = 0x4004667f;
|
static const unsigned FIONREAD = 0x4004667f;
|
||||||
static const unsigned TIOCISATTY = 0x2000745e;
|
static const unsigned TIOCISATTY = 0x2000745e;
|
||||||
|
static const unsigned TIOCGETS = 0x402c7413;
|
||||||
|
static const unsigned TIOCGETA = 0x40127417;
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
/// Resource enumeration for getrlimit().
|
/// Resource enumeration for getrlimit().
|
||||||
|
@ -421,7 +423,7 @@ SyscallDesc Linux::syscallDescs[] = {
|
||||||
/* 7 */ SyscallDesc("osf_wait4", unimplementedFunc),
|
/* 7 */ SyscallDesc("osf_wait4", unimplementedFunc),
|
||||||
/* 8 */ SyscallDesc("osf_old_creat", unimplementedFunc),
|
/* 8 */ SyscallDesc("osf_old_creat", unimplementedFunc),
|
||||||
/* 9 */ SyscallDesc("link", unimplementedFunc),
|
/* 9 */ SyscallDesc("link", unimplementedFunc),
|
||||||
/* 10 */ SyscallDesc("unlink", unimplementedFunc),
|
/* 10 */ SyscallDesc("unlink", unlinkFunc),
|
||||||
/* 11 */ SyscallDesc("osf_execve", unimplementedFunc),
|
/* 11 */ SyscallDesc("osf_execve", unimplementedFunc),
|
||||||
/* 12 */ SyscallDesc("chdir", unimplementedFunc),
|
/* 12 */ SyscallDesc("chdir", unimplementedFunc),
|
||||||
/* 13 */ SyscallDesc("fchdir", unimplementedFunc),
|
/* 13 */ SyscallDesc("fchdir", unimplementedFunc),
|
||||||
|
@ -539,7 +541,7 @@ SyscallDesc Linux::syscallDescs[] = {
|
||||||
/* 125 */ SyscallDesc("recvfrom", unimplementedFunc),
|
/* 125 */ SyscallDesc("recvfrom", unimplementedFunc),
|
||||||
/* 126 */ SyscallDesc("setreuid", unimplementedFunc),
|
/* 126 */ SyscallDesc("setreuid", unimplementedFunc),
|
||||||
/* 127 */ SyscallDesc("setregid", unimplementedFunc),
|
/* 127 */ SyscallDesc("setregid", unimplementedFunc),
|
||||||
/* 128 */ SyscallDesc("rename", unimplementedFunc),
|
/* 128 */ SyscallDesc("rename", renameFunc),
|
||||||
/* 129 */ SyscallDesc("truncate", unimplementedFunc),
|
/* 129 */ SyscallDesc("truncate", unimplementedFunc),
|
||||||
/* 130 */ SyscallDesc("ftruncate", unimplementedFunc),
|
/* 130 */ SyscallDesc("ftruncate", unimplementedFunc),
|
||||||
/* 131 */ SyscallDesc("flock", unimplementedFunc),
|
/* 131 */ SyscallDesc("flock", unimplementedFunc),
|
||||||
|
@ -556,7 +558,7 @@ SyscallDesc Linux::syscallDescs[] = {
|
||||||
/* 142 */ SyscallDesc("osf_gethostid", unimplementedFunc),
|
/* 142 */ SyscallDesc("osf_gethostid", unimplementedFunc),
|
||||||
/* 143 */ SyscallDesc("osf_sethostid", unimplementedFunc),
|
/* 143 */ SyscallDesc("osf_sethostid", unimplementedFunc),
|
||||||
/* 144 */ SyscallDesc("getrlimit", getrlimitFunc<Linux>),
|
/* 144 */ SyscallDesc("getrlimit", getrlimitFunc<Linux>),
|
||||||
/* 145 */ SyscallDesc("setrlimit", unimplementedFunc),
|
/* 145 */ SyscallDesc("setrlimit", ignoreFunc),
|
||||||
/* 146 */ SyscallDesc("osf_old_killpg", unimplementedFunc),
|
/* 146 */ SyscallDesc("osf_old_killpg", unimplementedFunc),
|
||||||
/* 147 */ SyscallDesc("setsid", unimplementedFunc),
|
/* 147 */ SyscallDesc("setsid", unimplementedFunc),
|
||||||
/* 148 */ SyscallDesc("quotactl", unimplementedFunc),
|
/* 148 */ SyscallDesc("quotactl", unimplementedFunc),
|
||||||
|
@ -737,7 +739,7 @@ SyscallDesc Linux::syscallDescs[] = {
|
||||||
/* 320 */ SyscallDesc("was sys_idle", unimplementedFunc),
|
/* 320 */ SyscallDesc("was sys_idle", unimplementedFunc),
|
||||||
/* 321 */ SyscallDesc("oldumount", unimplementedFunc),
|
/* 321 */ SyscallDesc("oldumount", unimplementedFunc),
|
||||||
/* 322 */ SyscallDesc("swapon", unimplementedFunc),
|
/* 322 */ SyscallDesc("swapon", unimplementedFunc),
|
||||||
/* 323 */ SyscallDesc("times", unimplementedFunc),
|
/* 323 */ SyscallDesc("times", ignoreFunc),
|
||||||
/* 324 */ SyscallDesc("personality", unimplementedFunc),
|
/* 324 */ SyscallDesc("personality", unimplementedFunc),
|
||||||
/* 325 */ SyscallDesc("setfsuid", unimplementedFunc),
|
/* 325 */ SyscallDesc("setfsuid", unimplementedFunc),
|
||||||
/* 326 */ SyscallDesc("setfsgid", unimplementedFunc),
|
/* 326 */ SyscallDesc("setfsgid", unimplementedFunc),
|
||||||
|
@ -766,7 +768,7 @@ SyscallDesc Linux::syscallDescs[] = {
|
||||||
/* 349 */ SyscallDesc("pread", unimplementedFunc),
|
/* 349 */ SyscallDesc("pread", unimplementedFunc),
|
||||||
/* 350 */ SyscallDesc("pwrite", unimplementedFunc),
|
/* 350 */ SyscallDesc("pwrite", unimplementedFunc),
|
||||||
/* 351 */ SyscallDesc("rt_sigreturn", unimplementedFunc),
|
/* 351 */ SyscallDesc("rt_sigreturn", unimplementedFunc),
|
||||||
/* 352 */ SyscallDesc("rt_sigaction", unimplementedFunc),
|
/* 352 */ SyscallDesc("rt_sigaction", ignoreFunc),
|
||||||
/* 353 */ SyscallDesc("rt_sigprocmask", unimplementedFunc),
|
/* 353 */ SyscallDesc("rt_sigprocmask", unimplementedFunc),
|
||||||
/* 354 */ SyscallDesc("rt_sigpending", unimplementedFunc),
|
/* 354 */ SyscallDesc("rt_sigpending", unimplementedFunc),
|
||||||
/* 355 */ SyscallDesc("rt_sigtimedwait", unimplementedFunc),
|
/* 355 */ SyscallDesc("rt_sigtimedwait", unimplementedFunc),
|
||||||
|
|
|
@ -171,6 +171,9 @@ class Tru64 {
|
||||||
static const unsigned TIOCGETC = 0x40067412;
|
static const unsigned TIOCGETC = 0x40067412;
|
||||||
static const unsigned FIONREAD = 0x4004667f;
|
static const unsigned FIONREAD = 0x4004667f;
|
||||||
static const unsigned TIOCISATTY = 0x2000745e;
|
static const unsigned TIOCISATTY = 0x2000745e;
|
||||||
|
// TIOCGETS not defined in tru64, so I made up a number
|
||||||
|
static const unsigned TIOCGETS = 0x40000000;
|
||||||
|
static const unsigned TIOCGETA = 0x402c7413;
|
||||||
//@}
|
//@}
|
||||||
|
|
||||||
/// Resource enumeration for getrlimit().
|
/// Resource enumeration for getrlimit().
|
||||||
|
@ -1356,7 +1359,7 @@ SyscallDesc Tru64::syscallDescs[] = {
|
||||||
/* 7 */ SyscallDesc("wait4", unimplementedFunc),
|
/* 7 */ SyscallDesc("wait4", unimplementedFunc),
|
||||||
/* 8 */ SyscallDesc("old_creat", unimplementedFunc),
|
/* 8 */ SyscallDesc("old_creat", unimplementedFunc),
|
||||||
/* 9 */ SyscallDesc("link", unimplementedFunc),
|
/* 9 */ SyscallDesc("link", unimplementedFunc),
|
||||||
/* 10 */ SyscallDesc("unlink", unimplementedFunc),
|
/* 10 */ SyscallDesc("unlink", unlinkFunc),
|
||||||
/* 11 */ SyscallDesc("execv", unimplementedFunc),
|
/* 11 */ SyscallDesc("execv", unimplementedFunc),
|
||||||
/* 12 */ SyscallDesc("chdir", unimplementedFunc),
|
/* 12 */ SyscallDesc("chdir", unimplementedFunc),
|
||||||
/* 13 */ SyscallDesc("fchdir", unimplementedFunc),
|
/* 13 */ SyscallDesc("fchdir", unimplementedFunc),
|
||||||
|
@ -1475,7 +1478,7 @@ SyscallDesc Tru64::syscallDescs[] = {
|
||||||
/* 125 */ SyscallDesc("old_recvfrom", unimplementedFunc),
|
/* 125 */ SyscallDesc("old_recvfrom", unimplementedFunc),
|
||||||
/* 126 */ SyscallDesc("setreuid", unimplementedFunc),
|
/* 126 */ SyscallDesc("setreuid", unimplementedFunc),
|
||||||
/* 127 */ SyscallDesc("setregid", unimplementedFunc),
|
/* 127 */ SyscallDesc("setregid", unimplementedFunc),
|
||||||
/* 128 */ SyscallDesc("rename", unimplementedFunc),
|
/* 128 */ SyscallDesc("rename", renameFunc),
|
||||||
/* 129 */ SyscallDesc("truncate", unimplementedFunc),
|
/* 129 */ SyscallDesc("truncate", unimplementedFunc),
|
||||||
/* 130 */ SyscallDesc("ftruncate", unimplementedFunc),
|
/* 130 */ SyscallDesc("ftruncate", unimplementedFunc),
|
||||||
/* 131 */ SyscallDesc("flock", unimplementedFunc),
|
/* 131 */ SyscallDesc("flock", unimplementedFunc),
|
||||||
|
@ -1492,7 +1495,7 @@ SyscallDesc Tru64::syscallDescs[] = {
|
||||||
/* 142 */ SyscallDesc("gethostid", unimplementedFunc),
|
/* 142 */ SyscallDesc("gethostid", unimplementedFunc),
|
||||||
/* 143 */ SyscallDesc("sethostid", unimplementedFunc),
|
/* 143 */ SyscallDesc("sethostid", unimplementedFunc),
|
||||||
/* 144 */ SyscallDesc("getrlimit", getrlimitFunc<Tru64>),
|
/* 144 */ SyscallDesc("getrlimit", getrlimitFunc<Tru64>),
|
||||||
/* 145 */ SyscallDesc("setrlimit", unimplementedFunc),
|
/* 145 */ SyscallDesc("setrlimit", ignoreFunc),
|
||||||
/* 146 */ SyscallDesc("old_killpg", unimplementedFunc),
|
/* 146 */ SyscallDesc("old_killpg", unimplementedFunc),
|
||||||
/* 147 */ SyscallDesc("setsid", unimplementedFunc),
|
/* 147 */ SyscallDesc("setsid", unimplementedFunc),
|
||||||
/* 148 */ SyscallDesc("quotactl", unimplementedFunc),
|
/* 148 */ SyscallDesc("quotactl", unimplementedFunc),
|
||||||
|
|
|
@ -185,4 +185,32 @@ gethostnameFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc)
|
||||||
return 0;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -191,6 +191,12 @@ int munmapFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc);
|
||||||
/// Target gethostname() handler.
|
/// Target gethostname() handler.
|
||||||
int gethostnameFunc(SyscallDesc *desc, int num, Process *p, ExecContext *xc);
|
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
|
// 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::TIOCSETN:
|
||||||
case OS::TIOCSETC:
|
case OS::TIOCSETC:
|
||||||
case OS::TIOCGETC:
|
case OS::TIOCGETC:
|
||||||
|
case OS::TIOCGETS:
|
||||||
|
case OS::TIOCGETA:
|
||||||
return -ENOTTY;
|
return -ENOTTY;
|
||||||
|
|
||||||
default:
|
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());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue