summaryrefslogtreecommitdiff
path: root/src/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86')
-rw-r--r--src/arch/x86/linux/syscalls.cc8
-rw-r--r--src/arch/x86/regfile.cc12
2 files changed, 15 insertions, 5 deletions
diff --git a/src/arch/x86/linux/syscalls.cc b/src/arch/x86/linux/syscalls.cc
index 49a7d8b77..4d7bca95c 100644
--- a/src/arch/x86/linux/syscalls.cc
+++ b/src/arch/x86/linux/syscalls.cc
@@ -267,7 +267,7 @@ SyscallDesc X86_64LinuxProcess::syscallDescs[] = {
/* 36 */ SyscallDesc("getitimer", unimplementedFunc),
/* 37 */ SyscallDesc("alarm", unimplementedFunc),
/* 38 */ SyscallDesc("setitimer", unimplementedFunc),
- /* 39 */ SyscallDesc("getpid", unimplementedFunc),
+ /* 39 */ SyscallDesc("getpid", getpidFunc),
/* 40 */ SyscallDesc("sendfile", unimplementedFunc),
/* 41 */ SyscallDesc("socket", unimplementedFunc),
/* 42 */ SyscallDesc("connect", unimplementedFunc),
@@ -284,7 +284,7 @@ SyscallDesc X86_64LinuxProcess::syscallDescs[] = {
/* 53 */ SyscallDesc("socketpair", unimplementedFunc),
/* 54 */ SyscallDesc("setsockopt", unimplementedFunc),
/* 55 */ SyscallDesc("getsockopt", unimplementedFunc),
- /* 56 */ SyscallDesc("clone", unimplementedFunc),
+ /* 56 */ SyscallDesc("clone", cloneFunc),
/* 57 */ SyscallDesc("fork", unimplementedFunc),
/* 58 */ SyscallDesc("vfork", unimplementedFunc),
/* 59 */ SyscallDesc("execve", unimplementedFunc),
@@ -430,7 +430,7 @@ SyscallDesc X86_64LinuxProcess::syscallDescs[] = {
/* 199 */ SyscallDesc("fremovexattr", unimplementedFunc),
/* 200 */ SyscallDesc("tkill", unimplementedFunc),
/* 201 */ SyscallDesc("time", unimplementedFunc),
- /* 202 */ SyscallDesc("futex", unimplementedFunc),
+ /* 202 */ SyscallDesc("futex", ignoreFunc),
/* 203 */ SyscallDesc("sched_setaffinity", unimplementedFunc),
/* 204 */ SyscallDesc("sched_getaffinity", unimplementedFunc),
/* 205 */ SyscallDesc("set_thread_area", unimplementedFunc),
@@ -459,7 +459,7 @@ SyscallDesc X86_64LinuxProcess::syscallDescs[] = {
/* 228 */ SyscallDesc("clock_gettime", unimplementedFunc),
/* 229 */ SyscallDesc("clock_getres", unimplementedFunc),
/* 230 */ SyscallDesc("clock_nanosleep", unimplementedFunc),
- /* 231 */ SyscallDesc("exit_group", exitFunc),
+ /* 231 */ SyscallDesc("exit_group", exitGroupFunc),
/* 232 */ SyscallDesc("epoll_wait", unimplementedFunc),
/* 233 */ SyscallDesc("epoll_ctl", unimplementedFunc),
/* 234 */ SyscallDesc("tgkill", unimplementedFunc),
diff --git a/src/arch/x86/regfile.cc b/src/arch/x86/regfile.cc
index 7d01c4bb4..83279902e 100644
--- a/src/arch/x86/regfile.cc
+++ b/src/arch/x86/regfile.cc
@@ -250,7 +250,17 @@ RegFile::unserialize(EventManager *em, Checkpoint *cp, const string &section)
void X86ISA::copyMiscRegs(ThreadContext *src, ThreadContext *dest)
{
- panic("copyMiscRegs not implemented for x86!\n");
+ //panic("copyMiscRegs not implemented for x86!\n");
+ warn("copyMiscRegs is naively implemented for x86\n");
+ for (int i = 0; i < X86ISA::NumMiscRegs; ++i) {
+ if ( ( i != MISCREG_CR1 &&
+ !(i > MISCREG_CR4 && i < MISCREG_CR8) &&
+ !(i > MISCREG_CR8 && i <= MISCREG_CR15) ) == false) {
+ continue;
+ }
+ dest->setMiscRegNoEffect(i, src->readMiscRegNoEffect(i));
+ }
+
}
void X86ISA::copyRegs(ThreadContext *src, ThreadContext *dest)