summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjoern A. Zeeb <baz21@cam.ac.uk>2017-02-09 19:03:55 -0500
committerBjoern A. Zeeb <baz21@cam.ac.uk>2017-02-09 19:03:55 -0500
commitb673f2aaa4f5d9173a04777bad958c61c3480486 (patch)
tree1af1153a24d27aee35644f7468bd59d6341264f2
parente07f0c50438479f9e0c17fe7ab42dbcb7df4cb9c (diff)
downloadgem5-b673f2aaa4f5d9173a04777bad958c61c3480486.tar.xz
sim: Patch to fix the statfs build
See developers mailing list. Trying to unbreak statfs. Testing Done: Builds on FreeBSD now. Reviewed at http://reviews.gem5.org/r/3803/ Signed-off-by: Jason Lowe-Power <jason@lowepower.com>
-rw-r--r--src/sim/syscall_emul.hh26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/sim/syscall_emul.hh b/src/sim/syscall_emul.hh
index 31e4c07cd..7c225e000 100644
--- a/src/sim/syscall_emul.hh
+++ b/src/sim/syscall_emul.hh
@@ -70,6 +70,8 @@
#include <sys/stat.h>
#if (NO_STATFS == 0)
#include <sys/statfs.h>
+#else
+#include <sys/mount.h>
#endif
#include <sys/time.h>
#include <sys/uio.h>
@@ -527,21 +529,37 @@ copyOutStatfsBuf(SETranslatingPortProxy &mem, Addr addr,
{
TypedBufferArg<typename OS::tgt_statfs> tgt(addr);
-#if defined(__OpenBSD__) || defined(__APPLE__) || defined(__FreeBSD__)
- tgt->f_type = 0;
-#else
tgt->f_type = TheISA::htog(host->f_type);
-#endif
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+ tgt->f_bsize = TheISA::htog(host->f_iosize);
+#else
tgt->f_bsize = TheISA::htog(host->f_bsize);
+#endif
tgt->f_blocks = TheISA::htog(host->f_blocks);
tgt->f_bfree = TheISA::htog(host->f_bfree);
tgt->f_bavail = TheISA::htog(host->f_bavail);
tgt->f_files = TheISA::htog(host->f_files);
tgt->f_ffree = TheISA::htog(host->f_ffree);
memcpy(&tgt->f_fsid, &host->f_fsid, sizeof(host->f_fsid));
+#if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+ tgt->f_namelen = TheISA::htog(host->f_namemax);
+ tgt->f_frsize = TheISA::htog(host->f_bsize);
+#elif defined(__APPLE__)
+ tgt->f_namelen = 0;
+ tgt->f_frsize = 0;
+#else
tgt->f_namelen = TheISA::htog(host->f_namelen);
tgt->f_frsize = TheISA::htog(host->f_frsize);
+#endif
+#if defined(__linux__)
memcpy(&tgt->f_spare, &host->f_spare, sizeof(host->f_spare));
+#else
+ /*
+ * The fields are different sizes per OS. Don't bother with
+ * f_spare or f_reserved on non-Linux for now.
+ */
+ memset(&tgt->f_spare, 0, sizeof(tgt->f_spare));
+#endif
tgt.copyOut(mem);
}