Gabe Black has submitted this change. (
https://gem5-review.googlesource.com/c/public/gem5/+/40498 )
Change subject: arch,sim: Use VPtr<> instead of Addr in system call
signatures.
......................................................................
arch,sim: Use VPtr<> instead of Addr in system call signatures.
This tells the GuestABI mechanism that these are guest pointers and not
uint64_ts, and that they should be treated as 32 bit or 64 bit values
depending on the size of pointers in the target ABI.
Change-Id: Ia9b5447848c52668a975d8b07b11ad457e756b13
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/40498
Maintainer: Gabe Black <gabe.bl...@gmail.com>
Tested-by: kokoro <noreply+kok...@google.com>
Reviewed-by: Bobby R. Bruce <bbr...@ucdavis.edu>
---
M src/arch/arm/freebsd/se_workload.cc
M src/arch/mips/linux/se_workload.cc
M src/arch/sparc/linux/syscalls.cc
M src/sim/syscall_emul.cc
M src/sim/syscall_emul.hh
5 files changed, 120 insertions(+), 112 deletions(-)
Approvals:
Bobby R. Bruce: Looks good to me, approved
Gabe Black: Looks good to me, approved
kokoro: Regressions pass
diff --git a/src/arch/arm/freebsd/se_workload.cc
b/src/arch/arm/freebsd/se_workload.cc
index ab6b03e..661a4a9 100644
--- a/src/arch/arm/freebsd/se_workload.cc
+++ b/src/arch/arm/freebsd/se_workload.cc
@@ -83,8 +83,8 @@
#if !defined ( __GNU_LIBRARY__ )
static SyscallReturn
-sysctlFunc(SyscallDesc *desc, ThreadContext *tc, Addr namep, size_t
nameLen,
- Addr oldp, Addr oldlenp, Addr newp, size_t newlen)
+sysctlFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> namep, size_t
nameLen,
+ VPtr<> oldp, VPtr<> oldlenp, VPtr<> newp, size_t newlen)
{
uint64_t ret;
diff --git a/src/arch/mips/linux/se_workload.cc
b/src/arch/mips/linux/se_workload.cc
index 0abe263..ef12f4f 100644
--- a/src/arch/mips/linux/se_workload.cc
+++ b/src/arch/mips/linux/se_workload.cc
@@ -124,7 +124,7 @@
/// Target sys_setsysinfo() handler.
static SyscallReturn
sys_setsysinfoFunc(SyscallDesc *desc, ThreadContext *tc, unsigned op,
- Addr bufPtr, unsigned nbytes)
+ VPtr<> bufPtr, unsigned nbytes)
{
switch (op) {
@@ -147,7 +147,7 @@
}
static SyscallReturn
-setThreadAreaFunc(SyscallDesc *desc, ThreadContext *tc, Addr addr)
+setThreadAreaFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> addr)
{
tc->setMiscRegNoEffect(MISCREG_TP_VALUE, addr);
return 0;
diff --git a/src/arch/sparc/linux/syscalls.cc
b/src/arch/sparc/linux/syscalls.cc
index a00f60e..17cc705 100644
--- a/src/arch/sparc/linux/syscalls.cc
+++ b/src/arch/sparc/linux/syscalls.cc
@@ -54,7 +54,7 @@
static SyscallReturn
getresuidFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr ruid, Addr euid, Addr suid)
+ VPtr<> ruid, VPtr<> euid, VPtr<> suid)
{
const uint64_t id = htobe(100);
// Handle the EFAULT case
diff --git a/src/sim/syscall_emul.cc b/src/sim/syscall_emul.cc
index 8f04cd5..4f6716b 100644
--- a/src/sim/syscall_emul.cc
+++ b/src/sim/syscall_emul.cc
@@ -89,7 +89,7 @@
}
static void
-exitFutexWake(ThreadContext *tc, Addr addr, uint64_t tgid)
+exitFutexWake(ThreadContext *tc, VPtr<> addr, uint64_t tgid)
{
// Clear value at address pointed to by thread's childClearTID field.
BufferArg ctidBuf(addr, sizeof(long));
@@ -243,7 +243,7 @@
SyscallReturn
-brkFunc(SyscallDesc *desc, ThreadContext *tc, Addr new_brk)
+brkFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> new_brk)
{
// change brk addr to first arg
auto p = tc->getProcessPtr();
@@ -300,7 +300,7 @@
SyscallReturn
_llseekFunc(SyscallDesc *desc, ThreadContext *tc,
int tgt_fd, uint64_t offset_high, uint32_t offset_low,
- Addr result_ptr, int whence)
+ VPtr<> result_ptr, int whence)
{
auto p = tc->getProcessPtr();
@@ -325,7 +325,7 @@
SyscallReturn
-munmapFunc(SyscallDesc *desc, ThreadContext *tc, Addr start, size_t length)
+munmapFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> start, size_t
length)
{
// Even if the system is currently not capable of recycling physical
// pages, there is no reason we can't unmap them so that we trigger
@@ -348,7 +348,7 @@
SyscallReturn
gethostnameFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr buf_ptr, int name_len)
+ VPtr<> buf_ptr, int name_len)
{
BufferArg name(buf_ptr, name_len);
strncpy((char *)name.bufferPtr(), hostname, name_len);
@@ -358,7 +358,7 @@
SyscallReturn
getcwdFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr buf_ptr, unsigned long size)
+ VPtr<> buf_ptr, unsigned long size)
{
int result = 0;
auto p = tc->getProcessPtr();
@@ -388,7 +388,7 @@
SyscallReturn
readlinkFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, Addr buf_ptr, size_t bufsiz)
+ VPtr<> pathname, VPtr<> buf_ptr, size_t bufsiz)
{
std::string path;
auto p = tc->getProcessPtr();
@@ -445,7 +445,7 @@
}
SyscallReturn
-unlinkFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname)
+unlinkFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> pathname)
{
std::string path;
auto p = tc->getProcessPtr();
@@ -461,7 +461,7 @@
SyscallReturn
linkFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, Addr new_pathname)
+ VPtr<> pathname, VPtr<> new_pathname)
{
std::string path;
std::string new_path;
@@ -482,7 +482,7 @@
SyscallReturn
symlinkFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, Addr new_pathname)
+ VPtr<> pathname, VPtr<> new_pathname)
{
std::string path;
std::string new_path;
@@ -502,7 +502,7 @@
}
SyscallReturn
-mkdirFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname, mode_t mode)
+mkdirFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> pathname, mode_t
mode)
{
auto p = tc->getProcessPtr();
std::string path;
@@ -516,7 +516,8 @@
}
SyscallReturn
-renameFunc(SyscallDesc *desc, ThreadContext *tc, Addr oldpath, Addr
newpath)
+renameFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> oldpath,
+ VPtr<> newpath)
{
auto p = tc->getProcessPtr();
@@ -537,7 +538,8 @@
}
SyscallReturn
-truncateFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname, off_t
length)
+truncateFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> pathname,
+ off_t length)
{
std::string path;
auto p = tc->getProcessPtr();
@@ -568,7 +570,7 @@
SyscallReturn
truncate64Func(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, int64_t length)
+ VPtr<> pathname, int64_t length)
{
auto process = tc->getProcessPtr();
std::string path;
@@ -619,7 +621,7 @@
SyscallReturn
chownFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, uint32_t owner, uint32_t group)
+ VPtr<> pathname, uint32_t owner, uint32_t group)
{
std::string path;
auto p = tc->getProcessPtr();
@@ -789,13 +791,13 @@
}
SyscallReturn
-pipeFunc(SyscallDesc *desc, ThreadContext *tc, Addr tgt_addr)
+pipeFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> tgt_addr)
{
return pipe2Func(desc, tc, tgt_addr, 0);
}
SyscallReturn
-pipe2Func(SyscallDesc *desc, ThreadContext *tc, Addr tgt_addr, int flags)
+pipe2Func(SyscallDesc *desc, ThreadContext *tc, VPtr<> tgt_addr, int flags)
{
auto p = tc->getProcessPtr();
@@ -993,7 +995,7 @@
SyscallReturn
accessFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, mode_t mode)
+ VPtr<> pathname, mode_t mode)
{
std::string path;
auto p = tc->getProcessPtr();
@@ -1009,7 +1011,7 @@
SyscallReturn
mknodFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, mode_t mode, dev_t dev)
+ VPtr<> pathname, mode_t mode, dev_t dev)
{
auto p = tc->getProcessPtr();
std::string path;
@@ -1023,7 +1025,7 @@
}
SyscallReturn
-chdirFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname)
+chdirFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> pathname)
{
auto p = tc->getProcessPtr();
std::string path;
@@ -1050,7 +1052,7 @@
}
SyscallReturn
-rmdirFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname)
+rmdirFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> pathname)
{
auto p = tc->getProcessPtr();
std::string path;
@@ -1067,7 +1069,7 @@
template<typename DE, int SYS_NUM>
static SyscallReturn
getdentsImpl(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, unsigned count)
+ int tgt_fd, VPtr<> buf_ptr, unsigned count)
{
auto p = tc->getProcessPtr();
@@ -1109,7 +1111,7 @@
#if defined(SYS_getdents)
SyscallReturn
getdentsFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, unsigned count)
+ int tgt_fd, VPtr<> buf_ptr, unsigned count)
{
typedef struct linux_dirent {
unsigned long d_ino;
@@ -1126,7 +1128,7 @@
#if defined(SYS_getdents64)
SyscallReturn
getdents64Func(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, unsigned count)
+ int tgt_fd, VPtr<> buf_ptr, unsigned count)
{
typedef struct linux_dirent64 {
ino64_t d_ino;
@@ -1157,7 +1159,7 @@
SyscallReturn
bindFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, int addrlen)
+ int tgt_fd, VPtr<> buf_ptr, int addrlen)
{
auto p = tc->getProcessPtr();
@@ -1193,7 +1195,7 @@
SyscallReturn
connectFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, int addrlen)
+ int tgt_fd, VPtr<> buf_ptr, int addrlen)
{
auto p = tc->getProcessPtr();
@@ -1214,8 +1216,8 @@
SyscallReturn
recvfromFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr bufrPtr, size_t bufrLen, int flags,
- Addr addrPtr, Addr addrlenPtr)
+ int tgt_fd, VPtr<> bufrPtr, size_t bufrLen, int flags,
+ VPtr<> addrPtr, VPtr<> addrlenPtr)
{
auto p = tc->getProcessPtr();
@@ -1274,8 +1276,8 @@
SyscallReturn
sendtoFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr bufrPtr, size_t bufrLen, int flags,
- Addr addrPtr, socklen_t addrLen)
+ int tgt_fd, VPtr<> bufrPtr, size_t bufrLen, int flags,
+ VPtr<> addrPtr, socklen_t addrLen)
{
auto p = tc->getProcessPtr();
@@ -1306,7 +1308,7 @@
SyscallReturn
recvmsgFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr msgPtr, int flags)
+ int tgt_fd, VPtr<> msgPtr, int flags)
{
auto p = tc->getProcessPtr();
@@ -1444,7 +1446,7 @@
SyscallReturn
sendmsgFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr msgPtr, int flags)
+ int tgt_fd, VPtr<> msgPtr, int flags)
{
auto p = tc->getProcessPtr();
@@ -1511,7 +1513,8 @@
SyscallReturn
getsockoptFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, int level, int optname, Addr valPtr, Addr
lenPtr)
+ int tgt_fd, int level, int optname, VPtr<> valPtr,
+ VPtr<> lenPtr)
{
// union of all possible return value types from getsockopt
union val {
@@ -1549,7 +1552,7 @@
SyscallReturn
getsocknameFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr addrPtr, Addr lenPtr)
+ int tgt_fd, VPtr<> addrPtr, VPtr<> lenPtr)
{
auto p = tc->getProcessPtr();
@@ -1586,7 +1589,7 @@
SyscallReturn
getpeernameFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr sockAddrPtr, Addr addrlenPtr)
+ int tgt_fd, VPtr<> sockAddrPtr, VPtr<> addrlenPtr)
{
auto p = tc->getProcessPtr();
@@ -1613,7 +1616,8 @@
SyscallReturn
setsockoptFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, int level, int optname, Addr valPtr, socklen_t
len)
+ int tgt_fd, int level, int optname, VPtr<> valPtr,
+ socklen_t len)
{
auto p = tc->getProcessPtr();
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index d6afec8..0872b0f 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -152,7 +152,7 @@
SyscallReturn getpagesizeFunc(SyscallDesc *desc, ThreadContext *tc);
/// Target brk() handler: set brk address.
-SyscallReturn brkFunc(SyscallDesc *desc, ThreadContext *tc, Addr new_brk);
+SyscallReturn brkFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<>
new_brk);
/// Target close() handler.
SyscallReturn closeFunc(SyscallDesc *desc, ThreadContext *tc, int tgt_fd);
@@ -164,10 +164,10 @@
/// Target _llseek() handler.
SyscallReturn _llseekFunc(SyscallDesc *desc, ThreadContext *tc,
int tgt_fd, uint64_t offset_high,
- uint32_t offset_low, Addr result_ptr, int
whence);
+ uint32_t offset_low, VPtr<> result_ptr, int
whence);
/// Target munmap() handler.
-SyscallReturn munmapFunc(SyscallDesc *desc, ThreadContext *tc, Addr start,
+SyscallReturn munmapFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<>
start,
size_t length);
/// Target shutdown() handler.
@@ -176,49 +176,50 @@
/// Target gethostname() handler.
SyscallReturn gethostnameFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr buf_ptr, int name_len);
+ VPtr<> buf_ptr, int name_len);
/// Target getcwd() handler.
SyscallReturn getcwdFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr buf_ptr, unsigned long size);
+ VPtr<> buf_ptr, unsigned long size);
/// Target readlink() handler.
SyscallReturn readlinkFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, Addr buf, size_t bufsiz);
+ VPtr<> pathname, VPtr<> buf, size_t bufsiz);
/// Target unlink() handler.
-SyscallReturn unlinkFunc(SyscallDesc *desc, ThreadContext *tc, Addr
pathname);
+SyscallReturn unlinkFunc(SyscallDesc *desc, ThreadContext *tc,
+ VPtr<> pathname);
/// Target link() handler
SyscallReturn linkFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, Addr new_pathname);
+ VPtr<> pathname, VPtr<> new_pathname);
/// Target symlink() handler.
SyscallReturn symlinkFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, Addr new_pathname);
+ VPtr<> pathname, VPtr<> new_pathname);
/// Target mkdir() handler.
SyscallReturn mkdirFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, mode_t mode);
+ VPtr<> pathname, mode_t mode);
/// Target mknod() handler.
SyscallReturn mknodFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, mode_t mode, dev_t dev);
+ VPtr<> pathname, mode_t mode, dev_t dev);
/// Target chdir() handler.
-SyscallReturn chdirFunc(SyscallDesc *desc, ThreadContext *tc, Addr
pathname);
+SyscallReturn chdirFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<>
pathname);
// Target rmdir() handler.
-SyscallReturn rmdirFunc(SyscallDesc *desc, ThreadContext *tc, Addr
pathname);
+SyscallReturn rmdirFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<>
pathname);
/// Target rename() handler.
SyscallReturn renameFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr oldpath, Addr newpath);
+ VPtr<> oldpath, VPtr<> newpath);
/// Target truncate() handler.
SyscallReturn truncateFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, off_t length);
+ VPtr<> pathname, off_t length);
/// Target ftruncate() handler.
@@ -228,7 +229,7 @@
/// Target truncate64() handler.
SyscallReturn truncate64Func(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, int64_t length);
+ VPtr<> pathname, int64_t length);
/// Target ftruncate64() handler.
SyscallReturn ftruncate64Func(SyscallDesc *desc, ThreadContext *tc,
@@ -242,7 +243,7 @@
/// Target chown() handler.
SyscallReturn chownFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, uint32_t owner, uint32_t group);
+ VPtr<> pathname, uint32_t owner, uint32_t group);
/// Target getpgrpFunc() handler.
SyscallReturn getpgrpFunc(SyscallDesc *desc, ThreadContext *tc);
@@ -272,22 +273,23 @@
int tgt_fd, int cmd);
/// Target pipe() handler.
-SyscallReturn pipeFunc(SyscallDesc *desc, ThreadContext *tc, Addr
tgt_addr);
+SyscallReturn pipeFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<>
tgt_addr);
/// Target pipe() handler.
SyscallReturn pipe2Func(SyscallDesc *desc, ThreadContext *tc,
- Addr tgt_addr, int flags);
+ VPtr<> tgt_addr, int flags);
/// Target getpid() handler.
SyscallReturn getpidFunc(SyscallDesc *desc, ThreadContext *tc);
// Target getpeername() handler.
SyscallReturn getpeernameFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr sockAddrPtr, Addr
addrlenPtr);
+ int tgt_fd, VPtr<> sockAddrPtr,
+ VPtr<> addrlenPtr);
// Target bind() handler.
SyscallReturn bindFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, int addrlen);
+ int tgt_fd, VPtr<> buf_ptr, int addrlen);
// Target listen() handler.
SyscallReturn listenFunc(SyscallDesc *desc, ThreadContext *tc,
@@ -295,37 +297,37 @@
// Target connect() handler.
SyscallReturn connectFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, int addrlen);
+ int tgt_fd, VPtr<> buf_ptr, int addrlen);
#if defined(SYS_getdents)
// Target getdents() handler.
SyscallReturn getdentsFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, unsigned count);
+ int tgt_fd, VPtr<> buf_ptr, unsigned count);
#endif
#if defined(SYS_getdents64)
// Target getdents() handler.
SyscallReturn getdents64Func(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, unsigned count);
+ int tgt_fd, VPtr<> buf_ptr, unsigned count);
#endif
// Target sendto() handler.
SyscallReturn sendtoFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr bufrPtr, size_t bufrLen, int
flags,
- Addr addrPtr, socklen_t addrLen);
+ int tgt_fd, VPtr<> bufrPtr, size_t bufrLen, int
flags,
+ VPtr<> addrPtr, socklen_t addrLen);
// Target recvfrom() handler.
SyscallReturn recvfromFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr bufrPtr, size_t bufrLen,
- int flags, Addr addrPtr, Addr addrlenPtr);
+ int tgt_fd, VPtr<> bufrPtr, size_t bufrLen,
+ int flags, VPtr<> addrPtr, VPtr<> addrlenPtr);
// Target recvmsg() handler.
SyscallReturn recvmsgFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr msgPtr, int flags);
+ int tgt_fd, VPtr<> msgPtr, int flags);
// Target sendmsg() handler.
SyscallReturn sendmsgFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr msgPtr, int flags);
+ int tgt_fd, VPtr<> msgPtr, int flags);
// Target getuid() handler.
SyscallReturn getuidFunc(SyscallDesc *desc, ThreadContext *tc);
@@ -344,17 +346,17 @@
/// Target access() handler
SyscallReturn accessFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, mode_t mode);
+ VPtr<> pathname, mode_t mode);
// Target getsockopt() handler.
SyscallReturn getsockoptFunc(SyscallDesc *desc, ThreadContext *tc,
int tgt_fd, int level, int optname,
- Addr valPtr, Addr lenPtr);
+ VPtr<> valPtr, VPtr<> lenPtr);
// Target setsockopt() handler.
SyscallReturn setsockoptFunc(SyscallDesc *desc, ThreadContext *tc,
int tgt_fd, int level, int optname,
- Addr valPtr, socklen_t len);
+ VPtr<> valPtr, socklen_t len);
SyscallReturn getcpuFunc(SyscallDesc *desc, ThreadContext *tc,
VPtr<uint32_t> cpu, VPtr<uint32_t> node,
@@ -362,7 +364,7 @@
// Target getsockname() handler.
SyscallReturn getsocknameFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr addrPtr, Addr lenPtr);
+ int tgt_fd, VPtr<> addrPtr, VPtr<> lenPtr);
/// Futex system call
/// Implemented by Daniel Sanchez
@@ -370,7 +372,7 @@
template <class OS>
SyscallReturn
futexFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr uaddr, int op, int val, int timeout, Addr uaddr2, int val3)
+ VPtr<> uaddr, int op, int val, int timeout, VPtr<> uaddr2, int
val3)
{
auto process = tc->getProcessPtr();
@@ -672,7 +674,7 @@
template <class OS>
SyscallReturn
ioctlFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, unsigned req, Addr addr)
+ int tgt_fd, unsigned req, VPtr<> addr)
{
auto p = tc->getProcessPtr();
@@ -747,7 +749,7 @@
template <class OS>
SyscallReturn
openatFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_dirfd, Addr pathname, int tgt_flags, int mode)
+ int tgt_dirfd, VPtr<> pathname, int tgt_flags, int mode)
{
auto p = tc->getProcessPtr();
@@ -896,7 +898,7 @@
template <class OS>
SyscallReturn
openFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, int tgt_flags, int mode)
+ VPtr<> pathname, int tgt_flags, int mode)
{
return openatFunc<OS>(
desc, tc, OS::TGT_AT_FDCWD, pathname, tgt_flags, mode);
@@ -905,7 +907,7 @@
/// Target unlinkat() handler.
template <class OS>
SyscallReturn
-unlinkatFunc(SyscallDesc *desc, ThreadContext *tc, int dirfd, Addr
pathname)
+unlinkatFunc(SyscallDesc *desc, ThreadContext *tc, int dirfd, VPtr<>
pathname)
{
if (dirfd != OS::TGT_AT_FDCWD)
warn("unlinkat: first argument not AT_FDCWD; unlikely to work");
@@ -917,7 +919,7 @@
template <class OS>
SyscallReturn
faccessatFunc(SyscallDesc *desc, ThreadContext *tc,
- int dirfd, Addr pathname, int mode)
+ int dirfd, VPtr<> pathname, int mode)
{
if (dirfd != OS::TGT_AT_FDCWD)
warn("faccessat: first argument not AT_FDCWD; unlikely to work");
@@ -928,7 +930,7 @@
template <class OS>
SyscallReturn
readlinkatFunc(SyscallDesc *desc, ThreadContext *tc,
- int dirfd, Addr pathname, Addr buf, size_t bufsiz)
+ int dirfd, VPtr<> pathname, VPtr<> buf, size_t bufsiz)
{
if (dirfd != OS::TGT_AT_FDCWD)
warn("openat: first argument not AT_FDCWD; unlikely to work");
@@ -939,7 +941,7 @@
template <class OS>
SyscallReturn
renameatFunc(SyscallDesc *desc, ThreadContext *tc,
- int olddirfd, Addr oldpath, int newdirfd, Addr newpath)
+ int olddirfd, VPtr<> oldpath, int newdirfd, VPtr<> newpath)
{
if (olddirfd != OS::TGT_AT_FDCWD)
warn("renameat: first argument not AT_FDCWD; unlikely to work");
@@ -968,7 +970,7 @@
/// Target chmod() handler.
template <class OS>
SyscallReturn
-chmodFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname, mode_t mode)
+chmodFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> pathname, mode_t
mode)
{
std::string path;
auto process = tc->getProcessPtr();
@@ -995,7 +997,7 @@
template <class OS>
SyscallReturn
pollFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr fdsPtr, int nfds, int tmout)
+ VPtr<> fdsPtr, int nfds, int tmout)
{
auto p = tc->getProcessPtr();
@@ -1088,7 +1090,7 @@
template <class OS>
SyscallReturn
mremapFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr start, uint64_t old_length, uint64_t new_length, uint64_t
flags,
+ VPtr<> start, uint64_t old_length, uint64_t new_length, uint64_t
flags,
GuestABI::VarArgs<uint64_t> varargs)
{
auto p = tc->getProcessPtr();
@@ -1117,7 +1119,7 @@
uint64_t diff = new_length - old_length;
p->memState->mapRegion(mmap_end, diff, "remapped");
p->memState->setMmapEnd(mmap_end + diff);
- return start;
+ return (Addr)start;
} else {
if (!use_provided_address && !(flags &
OS::TGT_MREMAP_MAYMOVE)) {
warn("can't remap here and MREMAP_MAYMOVE flag not set\n");
@@ -1163,7 +1165,7 @@
if (new_length != old_length)
p->memState->unmapRegion(start + new_length,
old_length - new_length);
- return use_provided_address ? provided_address : start;
+ return use_provided_address ? provided_address : (Addr)start;
}
}
@@ -1171,7 +1173,7 @@
template <class OS>
SyscallReturn
statFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, VPtr<typename OS::tgt_stat> tgt_stat)
+ VPtr<> pathname, VPtr<typename OS::tgt_stat> tgt_stat)
{
std::string path;
auto process = tc->getProcessPtr();
@@ -1198,7 +1200,7 @@
template <class OS>
SyscallReturn
stat64Func(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, VPtr<typename OS::tgt_stat64> tgt_stat)
+ VPtr<> pathname, VPtr<typename OS::tgt_stat64> tgt_stat)
{
std::string path;
auto process = tc->getProcessPtr();
@@ -1230,7 +1232,8 @@
template <class OS>
SyscallReturn
fstatat64Func(SyscallDesc *desc, ThreadContext *tc,
- int dirfd, Addr pathname, VPtr<typename OS::tgt_stat64>
tgt_stat)
+ int dirfd, VPtr<> pathname,
+ VPtr<typename OS::tgt_stat64> tgt_stat)
{
auto process = tc->getProcessPtr();
if (dirfd != OS::TGT_AT_FDCWD)
@@ -1294,7 +1297,7 @@
template <class OS>
SyscallReturn
lstatFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, VPtr<typename OS::tgt_stat> tgt_stat)
+ VPtr<> pathname, VPtr<typename OS::tgt_stat> tgt_stat)
{
std::string path;
auto process = tc->getProcessPtr();
@@ -1320,7 +1323,7 @@
template <class OS>
SyscallReturn
lstat64Func(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, VPtr<typename OS::tgt_stat64> tgt_stat)
+ VPtr<> pathname, VPtr<typename OS::tgt_stat64> tgt_stat)
{
std::string path;
auto process = tc->getProcessPtr();
@@ -1377,7 +1380,7 @@
template <class OS>
SyscallReturn
statfsFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, VPtr<typename OS::tgt_statfs> tgt_stat)
+ VPtr<> pathname, VPtr<typename OS::tgt_statfs> tgt_stat)
{
#if defined(__linux__)
std::string path;
@@ -1406,7 +1409,7 @@
template <class OS>
SyscallReturn
cloneFunc(SyscallDesc *desc, ThreadContext *tc, RegVal flags, RegVal
newStack,
- Addr ptidPtr, Addr ctidPtr, Addr tlsPtr)
+ VPtr<> ptidPtr, VPtr<> ctidPtr, VPtr<> tlsPtr)
{
auto p = tc->getProcessPtr();
@@ -1517,7 +1520,8 @@
template <class OS>
SyscallReturn
cloneBackwardsFunc(SyscallDesc *desc, ThreadContext *tc, RegVal flags,
- RegVal newStack, Addr ptidPtr, Addr tlsPtr, Addr
ctidPtr)
+ RegVal newStack, VPtr<> ptidPtr, VPtr<> tlsPtr,
+ VPtr<> ctidPtr)
{
return cloneFunc<OS>(desc, tc, flags, newStack, ptidPtr, ctidPtr,
tlsPtr);
}
@@ -1621,7 +1625,7 @@
template <class OS>
SyscallReturn
mmapFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr start, typename OS::size_t length, int prot,
+ VPtr<> start, typename OS::size_t length, int prot,
int tgt_flags, int tgt_fd, typename OS::off_t offset)
{
auto p = tc->getProcessPtr();
@@ -1757,13 +1761,13 @@
*/
p->memState->mapRegion(start, length, region_name, sim_fd, offset);
- return start;
+ return (Addr)start;
}
template <class OS>
SyscallReturn
pread64Func(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr bufPtr, int nbytes, int offset)
+ int tgt_fd, VPtr<> bufPtr, int nbytes, int offset)
{
auto p = tc->getProcessPtr();
@@ -1784,7 +1788,7 @@
template <class OS>
SyscallReturn
pwrite64Func(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr bufPtr, int nbytes, int offset)
+ int tgt_fd, VPtr<> bufPtr, int nbytes, int offset)
{
auto p = tc->getProcessPtr();
@@ -1805,7 +1809,7 @@
template <class OS>
SyscallReturn
mmap2Func(SyscallDesc *desc, ThreadContext *tc,
- Addr start, typename OS::size_t length, int prot,
+ VPtr<> start, typename OS::size_t length, int prot,
int tgt_flags, int tgt_fd, typename OS::off_t offset)
{
auto page_size = tc->getProcessPtr()->pTable->pageSize();
@@ -1853,7 +1857,7 @@
template <class OS>
SyscallReturn
prlimitFunc(SyscallDesc *desc, ThreadContext *tc,
- int pid, int resource, Addr n, VPtr<typename OS::rlimit> rlp)
+ int pid, int resource, VPtr<> n, VPtr<typename OS::rlimit> rlp)
{
if (pid != 0) {
warn("prlimit: ignoring rlimits for nonzero pid");
@@ -1916,7 +1920,7 @@
template <class OS>
SyscallReturn
gettimeofdayFunc(SyscallDesc *desc, ThreadContext *tc,
- VPtr<typename OS::timeval> tp, Addr tz_ptr)
+ VPtr<typename OS::timeval> tp, VPtr<> tz_ptr)
{
getElapsedTimeMicro(tp->tv_sec, tp->tv_usec);
tp->tv_sec += seconds_since_epoch;
@@ -1930,7 +1934,7 @@
/// Target utimes() handler.
template <class OS>
SyscallReturn
-utimesFunc(SyscallDesc *desc, ThreadContext *tc, Addr pathname,
+utimesFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> pathname,
VPtr<typename OS::timeval [2]> tp)
{
std::string path;
@@ -1959,7 +1963,7 @@
template <class OS>
SyscallReturn
execveFunc(SyscallDesc *desc, ThreadContext *tc,
- Addr pathname, Addr argv_mem_loc, Addr envp_mem_loc)
+ VPtr<> pathname, VPtr<> argv_mem_loc, VPtr<> envp_mem_loc)
{
auto p = tc->getProcessPtr();
@@ -1972,7 +1976,7 @@
return -EACCES;
auto read_in = [](std::vector<std::string> &vect,
- PortProxy &mem_proxy, Addr mem_loc)
+ PortProxy &mem_proxy, VPtr<> mem_loc)
{
for (int inc = 0; ; inc++) {
BufferArg b((mem_loc + sizeof(Addr) * inc), sizeof(Addr));
@@ -2113,7 +2117,7 @@
/// Target time() function.
template <class OS>
SyscallReturn
-timeFunc(SyscallDesc *desc, ThreadContext *tc, Addr taddr)
+timeFunc(SyscallDesc *desc, ThreadContext *tc, VPtr<> taddr)
{
typename OS::time_t sec, usec;
getElapsedTimeMicro(sec, usec);
@@ -2192,7 +2196,7 @@
template <class OS>
SyscallReturn
socketpairFunc(SyscallDesc *desc, ThreadContext *tc,
- int domain, int type, int prot, Addr svPtr)
+ int domain, int type, int prot, VPtr<> svPtr)
{
auto p = tc->getProcessPtr();
@@ -2382,7 +2386,7 @@
template <class OS>
SyscallReturn
readFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, int nbytes)
+ int tgt_fd, VPtr<> buf_ptr, int nbytes)
{
auto p = tc->getProcessPtr();
@@ -2410,7 +2414,7 @@
template <class OS>
SyscallReturn
writeFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr buf_ptr, int nbytes)
+ int tgt_fd, VPtr<> buf_ptr, int nbytes)
{
auto p = tc->getProcessPtr();
@@ -2449,7 +2453,7 @@
template <class OS>
SyscallReturn
wait4Func(SyscallDesc *desc, ThreadContext *tc,
- pid_t pid, Addr statPtr, int options, Addr rusagePtr)
+ pid_t pid, VPtr<> statPtr, int options, VPtr<> rusagePtr)
{
auto p = tc->getProcessPtr();
@@ -2507,7 +2511,7 @@
template <class OS>
SyscallReturn
acceptFunc(SyscallDesc *desc, ThreadContext *tc,
- int tgt_fd, Addr addrPtr, Addr lenPtr)
+ int tgt_fd, VPtr<> addrPtr, VPtr<> lenPtr)
{
struct sockaddr sa;
socklen_t addrLen;
--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/40498
To unsubscribe, or for help writing mail filters, visit
https://gem5-review.googlesource.com/settings
Gerrit-Project: public/gem5
Gerrit-Branch: develop
Gerrit-Change-Id: Ia9b5447848c52668a975d8b07b11ad457e756b13
Gerrit-Change-Number: 40498
Gerrit-PatchSet: 4
Gerrit-Owner: Gabe Black <gabe.bl...@gmail.com>
Gerrit-Reviewer: Andreas Sandberg <andreas.sandb...@arm.com>
Gerrit-Reviewer: Bobby R. Bruce <bbr...@ucdavis.edu>
Gerrit-Reviewer: Gabe Black <gabe.bl...@gmail.com>
Gerrit-Reviewer: Jason Lowe-Power <ja...@lowepower.com>
Gerrit-Reviewer: Jonathan Bohren <jonathan.boh...@gmail.com>
Gerrit-Reviewer: kokoro <noreply+kok...@google.com>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list -- gem5-dev@gem5.org
To unsubscribe send an email to gem5-dev-le...@gem5.org
%(web_page_url)slistinfo%(cgiext)s/%(_internal_name)s