From b673f2aaa4f5d9173a04777bad958c61c3480486 Mon Sep 17 00:00:00 2001 From: "Bjoern A. Zeeb" Date: Thu, 9 Feb 2017 19:03:55 -0500 Subject: [PATCH] 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 --- src/sim/syscall_emul.hh | 26 ++++++++++++++++++++++---- 1 file 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 #if (NO_STATFS == 0) #include +#else +#include #endif #include #include @@ -527,21 +529,37 @@ copyOutStatfsBuf(SETranslatingPortProxy &mem, Addr addr, { TypedBufferArg 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); }