Anthony Gutierrez has submitted this change and it was merged. ( https://gem5-review.googlesource.com/c/public/gem5/+/12117 )

Change subject: sim-se add readv and modifies writev
......................................................................

sim-se add readv and modifies writev

Change-Id: I6cbce4389d5697da34058dc910306394e48c6582
Reviewed-on: https://gem5-review.googlesource.com/c/12117
Reviewed-by: Anthony Gutierrez <[email protected]>
Maintainer: Anthony Gutierrez <[email protected]>
---
M src/arch/x86/linux/process.cc
M src/sim/syscall_emul.hh
2 files changed, 41 insertions(+), 6 deletions(-)

Approvals:
  Anthony Gutierrez: Looks good to me, approved; Looks good to me, approved



diff --git a/src/arch/x86/linux/process.cc b/src/arch/x86/linux/process.cc
index 2fe99e0..6a9aea8 100644
--- a/src/arch/x86/linux/process.cc
+++ b/src/arch/x86/linux/process.cc
@@ -241,7 +241,7 @@
     /*  16 */ SyscallDesc("ioctl", ioctlFunc<X86Linux64>),
     /*  17 */ SyscallDesc("pread64", unimplementedFunc),
     /*  18 */ SyscallDesc("pwrite64", pwrite64Func<X86Linux64>),
-    /*  19 */ SyscallDesc("readv", unimplementedFunc),
+    /*  19 */ SyscallDesc("readv", readvFunc<X86Linux64>),
     /*  20 */ SyscallDesc("writev", writevFunc<X86Linux64>),
     /*  21 */ SyscallDesc("access", ignoreFunc),
     /*  22 */ SyscallDesc("pipe", pipeFunc),
@@ -704,7 +704,7 @@
     /* 142 */ SyscallDesc("_newselect", unimplementedFunc),
     /* 143 */ SyscallDesc("flock", unimplementedFunc),
     /* 144 */ SyscallDesc("msync", unimplementedFunc),
-    /* 145 */ SyscallDesc("readv", unimplementedFunc),
+    /* 145 */ SyscallDesc("readv", readvFunc<X86Linux32>),
     /* 146 */ SyscallDesc("writev", writevFunc<X86Linux32>),
     /* 147 */ SyscallDesc("getsid", unimplementedFunc),
     /* 148 */ SyscallDesc("fdatasync", unimplementedFunc),
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index c52589f..ceeacd3 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -1531,6 +1531,44 @@
     return 0;
 }

+/// Target readv() handler.
+template <class OS>
+SyscallReturn
+readvFunc(SyscallDesc *desc, int callnum, Process *p, ThreadContext *tc)
+{
+    int index = 0;
+    int tgt_fd = p->getSyscallArg(tc, index);
+
+    auto ffdp = std::dynamic_pointer_cast<FileFDEntry>((*p->fds)[tgt_fd]);
+    if (!ffdp)
+        return -EBADF;
+    int sim_fd = ffdp->getSimFD();
+
+    SETranslatingPortProxy &prox = tc->getMemProxy();
+    uint64_t tiov_base = p->getSyscallArg(tc, index);
+    size_t count = p->getSyscallArg(tc, index);
+    typename OS::tgt_iovec tiov[count];
+    struct iovec hiov[count];
+    for (size_t i = 0; i < count; ++i) {
+        prox.readBlob(tiov_base + (i * sizeof(typename OS::tgt_iovec)),
+                      (uint8_t*)&tiov[i], sizeof(typename OS::tgt_iovec));
+        hiov[i].iov_len = TheISA::gtoh(tiov[i].iov_len);
+        hiov[i].iov_base = new char [hiov[i].iov_len];
+    }
+
+    int result = readv(sim_fd, hiov, count);
+    int local_errno = errno;
+
+    for (size_t i = 0; i < count; ++i) {
+        if (result != -1) {
+            prox.writeBlob(TheISA::htog(tiov[i].iov_base),
+                           (uint8_t*)hiov[i].iov_base, hiov[i].iov_len);
+        }
+        delete [] (char *)hiov[i].iov_base;
+    }
+
+    return (result == -1) ? -local_errno : result;
+}

 /// Target writev() handler.
 template <class OS>
@@ -1565,10 +1603,7 @@
     for (size_t i = 0; i < count; ++i)
         delete [] (char *)hiov[i].iov_base;

-    if (result < 0)
-        return -errno;
-
-    return result;
+    return (result == -1) ? -errno : result;
 }

 /// Real mmap handler.

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/12117
To unsubscribe, or for help writing mail filters, visit https://gem5-review.googlesource.com/settings

Gerrit-Project: public/gem5
Gerrit-Branch: master
Gerrit-Change-Id: I6cbce4389d5697da34058dc910306394e48c6582
Gerrit-Change-Number: 12117
Gerrit-PatchSet: 8
Gerrit-Owner: Brandon Potter <[email protected]>
Gerrit-Reviewer: Anthony Gutierrez <[email protected]>
Gerrit-Reviewer: Jason Lowe-Power <[email protected]>
Gerrit-MessageType: merged
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to