[gem5-dev] Change in gem5/gem5[develop]: arch,sim: Use VPtr<> instead of Addr in system call signatures.

2021-02-08 Thread Gabe Black (Gerrit) via gem5-dev
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.

2021-02-03 Thread Gabe Black (Gerrit) via gem5-dev
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,