Gabe Black has uploaded this change for review. ( https://gem5-review.googlesource.com/c/public/gem5/+/53205 )

Change subject: sim-se: Implement the newfstatat system call.
......................................................................

sim-se: Implement the newfstatat system call.

Jira Issue: https://gem5.atlassian.net/browse/GEM5-1117

Change-Id: Id611bc7d6369b7d94ce27f33aff74a61879ce900
---
M src/sim/syscall_emul.hh
1 file changed, 54 insertions(+), 1 deletion(-)



diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index 6cbbf00..738ee9d 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -367,7 +367,10 @@
         if (!ffdp)
             return -EBADF;

-        path = ffdp->getFileName() + "/" + path;
+        if (path.empty())
+            path = ffdp->getFileName();
+        else
+            path = ffdp->getFileName() + "/" + path;
     }

     return 0;
@@ -1368,6 +1371,45 @@
     return 0;
 }

+/// Target newfstatat() handler.
+template <class OS>
+SyscallReturn
+newfstatatFunc(SyscallDesc *desc, ThreadContext *tc, int dirfd,
+               VPtr<> pathname, VPtr<typename OS::tgt_stat> tgt_stat,
+               int flags)
+{
+    std::string path;
+
+    if (!SETranslatingPortProxy(tc).tryReadString(path, pathname))
+        return -EFAULT;
+
+    if (path.empty() && !(flags & OS::TGT_AT_EMPTY_PATH))
+        return -ENOENT;
+    flags = flags & ~OS::TGT_AT_EMPTY_PATH;
+
+    warn_if(flags != 0, "newfstatat: Flag bits %#x not supported.", flags);
+
+    // Modifying path from the directory descriptor
+    if (auto res = atSyscallPath<OS>(tc, dirfd, path); !res.successful()) {
+        return res;
+    }
+
+    auto p = tc->getProcessPtr();
+
+    // Adjust path for cwd and redirection
+    path = p->checkPathRedirect(path);
+
+    struct stat host_buf;
+    int result = stat(path.c_str(), &host_buf);
+
+    if (result < 0)
+        return -errno;
+
+    copyOutStatBuf<OS>(tgt_stat, &host_buf);
+
+    return 0;
+}
+
 /// Target fstatat64() handler.
 template <class OS>
 SyscallReturn

--
To view, visit https://gem5-review.googlesource.com/c/public/gem5/+/53205
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: Id611bc7d6369b7d94ce27f33aff74a61879ce900
Gerrit-Change-Number: 53205
Gerrit-PatchSet: 1
Gerrit-Owner: Gabe Black <gabe.bl...@gmail.com>
Gerrit-MessageType: newchange
_______________________________________________
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

Reply via email to