Add a tgt_iovec structure to support writev, change the name of X86Linux to X86Linux64, add some syscalls.

--HG--
extra : convert_revision : 9c13e9c68f331fe6c4a9abd96f7aee0f064101fc
This commit is contained in:
Gabe Black 2007-07-24 15:42:11 -07:00
parent 4bb1c5ba0c
commit 93365f7d1a
3 changed files with 16 additions and 10 deletions

View file

@ -59,7 +59,7 @@
#include <fcntl.h> #include <fcntl.h>
// open(2) flags translation table // open(2) flags translation table
OpenFlagTransTable X86Linux::openFlagTable[] = { OpenFlagTransTable X86Linux64::openFlagTable[] = {
#ifdef _MSC_VER #ifdef _MSC_VER
{ TGT_O_RDONLY, _O_RDONLY }, { TGT_O_RDONLY, _O_RDONLY },
{ TGT_O_WRONLY, _O_WRONLY }, { TGT_O_WRONLY, _O_WRONLY },
@ -93,6 +93,7 @@ OpenFlagTransTable X86Linux::openFlagTable[] = {
#endif /* _MSC_VER */ #endif /* _MSC_VER */
}; };
const int X86Linux::NUM_OPEN_FLAGS = const int X86Linux64::NUM_OPEN_FLAGS =
(sizeof(X86Linux::openFlagTable)/sizeof(X86Linux::openFlagTable[0])); sizeof(X86Linux64::openFlagTable) /
sizeof(X86Linux64::openFlagTable[0]);

View file

@ -60,7 +60,7 @@
#include "kern/linux/linux.hh" #include "kern/linux/linux.hh"
class X86Linux : public Linux class X86Linux64 : public Linux
{ {
public: public:
@ -104,6 +104,11 @@ class X86Linux : public Linux
static const int NUM_OPEN_FLAGS; static const int NUM_OPEN_FLAGS;
static const unsigned TGT_MAP_ANONYMOUS = 0x20; static const unsigned TGT_MAP_ANONYMOUS = 0x20;
typedef struct {
uint64_t iov_base; // void *
uint64_t iov_len; // size_t
} tgt_iovec;
}; };
#endif #endif

View file

@ -83,7 +83,7 @@ unameFunc(SyscallDesc *desc, int callnum, LiveProcess *process,
SyscallDesc X86LinuxProcess::syscallDescs[] = { SyscallDesc X86LinuxProcess::syscallDescs[] = {
/* 0 */ SyscallDesc("read", unimplementedFunc), /* 0 */ SyscallDesc("read", unimplementedFunc),
/* 1 */ SyscallDesc("write", unimplementedFunc), /* 1 */ SyscallDesc("write", unimplementedFunc),
/* 2 */ SyscallDesc("open", openFunc<X86Linux>), /* 2 */ SyscallDesc("open", openFunc<X86Linux64>),
/* 3 */ SyscallDesc("close", unimplementedFunc), /* 3 */ SyscallDesc("close", unimplementedFunc),
/* 4 */ SyscallDesc("stat", unimplementedFunc), /* 4 */ SyscallDesc("stat", unimplementedFunc),
/* 5 */ SyscallDesc("fstat", unimplementedFunc), /* 5 */ SyscallDesc("fstat", unimplementedFunc),
@ -101,7 +101,7 @@ SyscallDesc X86LinuxProcess::syscallDescs[] = {
/* 17 */ SyscallDesc("pread64", unimplementedFunc), /* 17 */ SyscallDesc("pread64", unimplementedFunc),
/* 18 */ SyscallDesc("pwrite64", unimplementedFunc), /* 18 */ SyscallDesc("pwrite64", unimplementedFunc),
/* 19 */ SyscallDesc("readv", unimplementedFunc), /* 19 */ SyscallDesc("readv", unimplementedFunc),
/* 20 */ SyscallDesc("writev", unimplementedFunc), /* 20 */ SyscallDesc("writev", writevFunc<X86Linux64>),
/* 21 */ SyscallDesc("access", unimplementedFunc), /* 21 */ SyscallDesc("access", unimplementedFunc),
/* 22 */ SyscallDesc("pipe", unimplementedFunc), /* 22 */ SyscallDesc("pipe", unimplementedFunc),
/* 23 */ SyscallDesc("select", unimplementedFunc), /* 23 */ SyscallDesc("select", unimplementedFunc),
@ -183,13 +183,13 @@ SyscallDesc X86LinuxProcess::syscallDescs[] = {
/* 99 */ SyscallDesc("sysinfo", unimplementedFunc), /* 99 */ SyscallDesc("sysinfo", unimplementedFunc),
/* 100 */ SyscallDesc("times", unimplementedFunc), /* 100 */ SyscallDesc("times", unimplementedFunc),
/* 101 */ SyscallDesc("ptrace", unimplementedFunc), /* 101 */ SyscallDesc("ptrace", unimplementedFunc),
/* 102 */ SyscallDesc("getuid", unimplementedFunc), /* 102 */ SyscallDesc("getuid", getuidFunc),
/* 103 */ SyscallDesc("syslog", unimplementedFunc), /* 103 */ SyscallDesc("syslog", unimplementedFunc),
/* 104 */ SyscallDesc("getgid", unimplementedFunc), /* 104 */ SyscallDesc("getgid", getgidFunc),
/* 105 */ SyscallDesc("setuid", unimplementedFunc), /* 105 */ SyscallDesc("setuid", unimplementedFunc),
/* 106 */ SyscallDesc("setgid", unimplementedFunc), /* 106 */ SyscallDesc("setgid", unimplementedFunc),
/* 107 */ SyscallDesc("geteuid", unimplementedFunc), /* 107 */ SyscallDesc("geteuid", geteuidFunc),
/* 108 */ SyscallDesc("getegid", unimplementedFunc), /* 108 */ SyscallDesc("getegid", getegidFunc),
/* 109 */ SyscallDesc("setpgid", unimplementedFunc), /* 109 */ SyscallDesc("setpgid", unimplementedFunc),
/* 110 */ SyscallDesc("getppid", unimplementedFunc), /* 110 */ SyscallDesc("getppid", unimplementedFunc),
/* 111 */ SyscallDesc("getpgrp", unimplementedFunc), /* 111 */ SyscallDesc("getpgrp", unimplementedFunc),