sim-se: fstat64 bugfix
authorBrandon Potter <brandon.potter@amd.com>
Mon, 11 Mar 2019 18:17:07 +0000 (14:17 -0400)
committerBrandon Potter <Brandon.Potter@amd.com>
Thu, 1 Aug 2019 19:53:22 +0000 (19:53 +0000)
The fstat64 system call does an upcast on entries in the file
descriptor array to check if the file descriptor has a backing
host-filesystem file opened. It does so because it needs to pass
the host fd into the fstat call (since we rely on the host
filesystem to service filesystem system calls).

The upcast was overly specific. This changeset alters the system
call to use the most general base class of the file descriptor
entries that can satisfy the code.

Change-Id: I10daf820257cea4d678ee6917e01e9cc9cd1cf5e
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/17110
Tested-by: kokoro <noreply+kokoro@google.com>
Maintainer: Brandon Potter <Brandon.Potter@amd.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
src/sim/syscall_emul.hh

index 8a73cb2b730fa1e0ac094038c2523612ee4083d5..e2f2fc20018b3aeac3346c7f7ea801fa3db1b210 100644 (file)
@@ -1338,7 +1338,7 @@ fstat64Func(SyscallDesc *desc, int callnum, ThreadContext *tc)
     int tgt_fd = p->getSyscallArg(tc, index);
     Addr bufPtr = p->getSyscallArg(tc, index);
 
-    auto ffdp = std::dynamic_pointer_cast<FileFDEntry>((*p->fds)[tgt_fd]);
+    auto ffdp = std::dynamic_pointer_cast<HBFDEntry>((*p->fds)[tgt_fd]);
     if (!ffdp)
         return -EBADF;
     int sim_fd = ffdp->getSimFD();