diff options
author | David Oehmke <doehmke@umich.edu> | 2004-02-05 12:16:17 -0500 |
---|---|---|
committer | David Oehmke <doehmke@umich.edu> | 2004-02-05 12:16:17 -0500 |
commit | 95c248c2139ff8d3568e1c92319727777f19920f (patch) | |
tree | 97497d04270a5288a02ea8576aa220ed90fced52 /sim/syscall_emul.cc | |
parent | 98948b2e572d10faf1ac91f977837cf2e8a903c3 (diff) | |
download | gem5-95c248c2139ff8d3568e1c92319727777f19920f.tar.xz |
Modify the emulated system calls to support running the SPEC Int
benchmarks for alpha-linux.
arch/alpha/alpha_linux_process.cc:
Added some more ioctl commands to ignore.
Set unlink and rename to the new functions.
Ignore setrlimit, times and rt_sigaction.
Should eventually provide a function for times.
arch/alpha/alpha_tru64_process.cc:
Added some more ioctl commands to ignore.
Set unlink and rename to the new functions.
Ignore setrlimit.
sim/syscall_emul.cc:
Added implementations for unlink and rename.
sim/syscall_emul.hh:
Added unlink and rename functions.
Added a couple more ioctl requests to ignore.
Print out the PC of any ioctl commands that fail.
--HG--
extra : convert_revision : 8af21c7fa7d0645d3f9324c9ce70ad33590c3c8e
Diffstat (limited to 'sim/syscall_emul.cc')
-rw-r--r-- | sim/syscall_emul.cc | 28 |
1 files changed, 28 insertions, 0 deletions
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; +} |