[gem5-dev] Change in gem5/gem5[develop]: arch,sim: Use VPtr<> instead of Addr in system call signatures.
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 Tested-by: kokoro Reviewed-by: Bobby R. Bruce --- 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
[gem5-dev] Change in gem5/gem5[develop]: arch,sim: Use VPtr<> instead of Addr in system call signatures.
Gabe Black has uploaded this change for review. ( 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 --- 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(-) 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,