Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into staging
Browse files Browse the repository at this point in the history
  • Loading branch information
shlevy committed Feb 18, 2018
2 parents d8c2bac + a968868 commit bbfc9ce
Show file tree
Hide file tree
Showing 23 changed files with 624 additions and 42 deletions.
8 changes: 8 additions & 0 deletions lib/systems/examples.nix
Expand Up @@ -68,6 +68,14 @@ rec {
musl64 = { config = "x86_64-unknown-linux-musl"; };
musl32 = { config = "i686-unknown-linux-musl"; };

riscv = bits: {
config = "riscv${bits}-unknown-linux-gnu";
platform = platforms.riscv-multiplatform bits;
};
riscv64 = riscv "64";
riscv32 = riscv "32";


#
# Darwin
#
Expand Down
6 changes: 6 additions & 0 deletions lib/systems/platforms.nix
Expand Up @@ -541,6 +541,12 @@ rec {
};
};

riscv-multiplatform = bits: {
name = "riscv-multiplatform";
kernelArch = "riscv";
bfdEmulation = "elf${bits}lriscv";
};

selectBySystem = system: {
"i686-linux" = pc32;
"x86_64-linux" = pc64;
Expand Down
2 changes: 1 addition & 1 deletion pkgs/applications/virtualization/qemu/default.nix
Expand Up @@ -61,7 +61,7 @@ stdenv.mkDerivation rec {

enableParallelBuilding = true;

patches = [ ./no-etc-install.patch ]
patches = [ ./no-etc-install.patch ./statfs-flags.patch ]
++ optional nixosTestRunner ./force-uid0-on-9p.patch
++ optional pulseSupport ./fix-hda-recording.patch;

Expand Down
200 changes: 200 additions & 0 deletions pkgs/applications/virtualization/qemu/statfs-flags.patch
@@ -0,0 +1,200 @@
commit d3282d2512774dc5027c98930a3852b2b6e8407a
Author: Shea Levy <shea@shealevy.com>
Date: Sun Feb 18 13:50:11 2018 -0500

linux-user: Support f_flags in statfs when available.

Signed-off-by: Shea Levy <shea@shealevy.com>

diff --git a/configure b/configure
index 913e14839d..52fe2bf941 100755
--- a/configure
+++ b/configure
@@ -5303,6 +5303,22 @@ if compile_prog "" "" ; then
have_utmpx=yes
fi

+##########################################
+# Check for newer fields of struct statfs on Linux
+
+if test "$linux_user" = "yes"; then
+ cat > $TMPC <<EOF
+#include <sys/vfs.h>
+
+int main(void) {
+ struct statfs fs;
+ fs.f_flags = 0;
+}
+EOF
+ if compile_object ; then
+ have_statfs_flags=yes
+ fi
+fi
##########################################
# checks for sanitizers

@@ -6518,6 +6534,10 @@ if test "$have_utmpx" = "yes" ; then
echo "HAVE_UTMPX=y" >> $config_host_mak
fi

+if test "$have_statfs_flags" = "yes" ; then
+ echo "HAVE_STATFS_FLAGS=y" >> $config_host_mak
+fi
+
if test "$ivshmem" = "yes" ; then
echo "CONFIG_IVSHMEM=y" >> $config_host_mak
fi
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 82b35a6bdf..77481eca2c 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -9534,6 +9534,9 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
__put_user(stfs.f_fsid.__val[1], &target_stfs->f_fsid.val[1]);
__put_user(stfs.f_namelen, &target_stfs->f_namelen);
__put_user(stfs.f_frsize, &target_stfs->f_frsize);
+#ifdef HAVE_STATFS_FLAGS
+ __put_user(stfs.f_flags, &target_stfs->f_flags);
+#endif
memset(target_stfs->f_spare, 0, sizeof(target_stfs->f_spare));
unlock_user_struct(target_stfs, arg2, 1);
}
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index a35c52a60a..9f90451caf 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -362,7 +362,14 @@ struct kernel_statfs {
int f_ffree;
kernel_fsid_t f_fsid;
int f_namelen;
+#ifdef HAVE_STATFS_FLAGS
+ int f_frsize;
+ int f_flags;
+ int f_spare[4];
+#else
int f_spare[6];
+#endif
+
};

struct target_dirent {
@@ -2223,7 +2230,13 @@ struct target_statfs {
/* Linux specials */
target_fsid_t f_fsid;
int32_t f_namelen;
+#ifdef HAVE_STATFS_FLAGS
+ int32_t f_frsize;
+ int32_t f_flags;
+ int32_t f_spare[4];
+#else
int32_t f_spare[6];
+#endif
};
#else
struct target_statfs {
@@ -2239,7 +2252,13 @@ struct target_statfs {
/* Linux specials */
target_fsid_t f_fsid;
abi_long f_namelen;
+#ifdef HAVE_STATFS_FLAGS
+ abi_long f_frsize;
+ abi_long f_flags;
+ abi_long f_spare[4];
+#else
abi_long f_spare[6];
+#endif
};
#endif

@@ -2255,7 +2274,13 @@ struct target_statfs64 {
uint64_t f_bavail;
target_fsid_t f_fsid;
uint32_t f_namelen;
+#ifdef HAVE_STATFS_FLAGS
+ uint32_t f_frsize;
+ uint32_t f_flags;
+ uint32_t f_spare[4];
+#else
uint32_t f_spare[6];
+#endif
};
#elif (defined(TARGET_PPC64) || defined(TARGET_X86_64) || \
defined(TARGET_SPARC64) || defined(TARGET_AARCH64)) && \
@@ -2271,7 +2296,12 @@ struct target_statfs {
target_fsid_t f_fsid;
abi_long f_namelen;
abi_long f_frsize;
+#ifdef HAVE_STATFS_FLAGS
+ abi_long f_flags;
+ abi_long f_spare[4];
+#else
abi_long f_spare[5];
+#endif
};

struct target_statfs64 {
@@ -2285,7 +2315,12 @@ struct target_statfs64 {
target_fsid_t f_fsid;
abi_long f_namelen;
abi_long f_frsize;
+#ifdef HAVE_STATFS_FLAGS
+ abi_long f_flags;
+ abi_long f_spare[4];
+#else
abi_long f_spare[5];
+#endif
};
#elif defined(TARGET_S390X)
struct target_statfs {
@@ -2299,7 +2334,13 @@ struct target_statfs {
kernel_fsid_t f_fsid;
int32_t f_namelen;
int32_t f_frsize;
+#ifdef HAVE_STATFS_FLAGS
+ int32_t f_flags;
+ int32_t f_spare[4];
+#else
int32_t f_spare[5];
+#endif
+
};

struct target_statfs64 {
@@ -2313,7 +2354,12 @@ struct target_statfs64 {
kernel_fsid_t f_fsid;
int32_t f_namelen;
int32_t f_frsize;
+#ifdef HAVE_STATFS_FLAGS
+ int32_t f_flags;
+ int32_t f_spare[4];
+#else
int32_t f_spare[5];
+#endif
};
#else
struct target_statfs {
@@ -2327,7 +2373,12 @@ struct target_statfs {
target_fsid_t f_fsid;
uint32_t f_namelen;
uint32_t f_frsize;
+#ifdef HAVE_STATFS_FLAGS
+ uint32_t f_flags;
+ uint32_t f_spare[4];
+#else
uint32_t f_spare[5];
+#endif
};

struct target_statfs64 {
@@ -2341,7 +2392,12 @@ struct target_statfs64 {
target_fsid_t f_fsid;
uint32_t f_namelen;
uint32_t f_frsize;
+#ifdef HAVE_STATFS_FLAGS
+ uint32_t f_flags;
+ uint32_t f_spare[4];
+#else
uint32_t f_spare[5];
+#endif
};
#endif

0 comments on commit bbfc9ce

Please sign in to comment.