summaryrefslogtreecommitdiff
path: root/libre/qemu-user-static/0001-linux-user-Use-if-to-only-call-validate_guest_space-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'libre/qemu-user-static/0001-linux-user-Use-if-to-only-call-validate_guest_space-.patch')
-rw-r--r--libre/qemu-user-static/0001-linux-user-Use-if-to-only-call-validate_guest_space-.patch81
1 files changed, 81 insertions, 0 deletions
diff --git a/libre/qemu-user-static/0001-linux-user-Use-if-to-only-call-validate_guest_space-.patch b/libre/qemu-user-static/0001-linux-user-Use-if-to-only-call-validate_guest_space-.patch
new file mode 100644
index 000000000..bbc3840fe
--- /dev/null
+++ b/libre/qemu-user-static/0001-linux-user-Use-if-to-only-call-validate_guest_space-.patch
@@ -0,0 +1,81 @@
+From 0c5afb7a15b6bb0e3fe276e377ad3702427e85d1 Mon Sep 17 00:00:00 2001
+From: Luke Shumaker <lukeshu@parabola.nu>
+Date: Wed, 27 Dec 2017 03:33:21 -0500
+Subject: [PATCH 01/10] linux-user: Use #if to only call validate_guest_space
+ for 32-bit ARM target
+
+Instead of defining a bogus validate_guest_space that always returns 1 on
+targets other than 32-bit ARM, use #if blocks to only call it on 32-bit ARM
+targets. This makes the "normal" flow control clearer.
+
+Signed-off-by: Luke Shumaker <lukeshu@parabola.nu>
+---
+ linux-user/elfload.c | 21 +++++++++------------
+ 1 file changed, 9 insertions(+), 12 deletions(-)
+
+diff --git a/linux-user/elfload.c b/linux-user/elfload.c
+index 20f3d8c2c3..cac991159c 100644
+--- a/linux-user/elfload.c
++++ b/linux-user/elfload.c
+@@ -354,7 +354,6 @@ enum {
+
+ /* The commpage only exists for 32 bit kernels */
+
+-#define TARGET_HAS_VALIDATE_GUEST_SPACE
+ /* Return 1 if the proposed guest space is suitable for the guest.
+ * Return 0 if the proposed guest space isn't suitable, but another
+ * address space should be tried.
+@@ -1823,15 +1822,6 @@ static abi_ulong create_elf_tables(abi_ulong p, int argc, int envc,
+ return sp;
+ }
+
+-#ifndef TARGET_HAS_VALIDATE_GUEST_SPACE
+-/* If the guest doesn't have a validation function just agree */
+-static int validate_guest_space(unsigned long guest_base,
+- unsigned long guest_size)
+-{
+- return 1;
+-}
+-#endif
+-
+ unsigned long init_guest_space(unsigned long host_start,
+ unsigned long host_size,
+ unsigned long guest_start,
+@@ -1845,11 +1835,12 @@ unsigned long init_guest_space(unsigned long host_start,
+ /* If just a starting address is given, then just verify that
+ * address. */
+ if (host_start && !host_size) {
++#if defined(TARGET_ARM) && !defined(TARGET_AARCH64)
+ if (validate_guest_space(host_start, host_size) == 1) {
+- return host_start;
+- } else {
+ return (unsigned long)-1;
+ }
++#endif
++ return host_start;
+ }
+
+ /* Setup the initial flags and start address. */
+@@ -1888,6 +1879,8 @@ unsigned long init_guest_space(unsigned long host_start,
+
+ /* Check to see if the address is valid. */
+ if (!host_start || real_start == current_start) {
++#if defined(TARGET_ARM) && !defined(TARGET_AARCH64)
++ /* On 32-bit ARM, we need to also be able to map the commpage. */
+ int valid = validate_guest_space(real_start - guest_start,
+ real_size);
+ if (valid == 1) {
+@@ -1896,6 +1889,10 @@ unsigned long init_guest_space(unsigned long host_start,
+ return (unsigned long)-1;
+ }
+ /* valid == 0, so try again. */
++#else
++ /* On other architectures, whatever we have here is fine. */
++ break;
++#endif
+ }
+
+ /* That address didn't work. Unmap and try a different one.
+--
+2.15.1
+