diff mbox

[2/6] Use TARGET_VIRT_ADDR_SPACE_BITS in h2g_valid.

Message ID 262e15921e98cb88edd301b81f67b417ef2f0e74.1265933757.git.rth@twiddle.net
State New
Headers show

Commit Message

Richard Henderson Feb. 11, 2010, 10:47 p.m. UTC
Previously, only 32-bit guests had a proper check for the
validity of the virtual address.  Extend that check to 64-bit
guests with a restricted virtual address space.
---
 cpu-all.h |   16 +++++++++++-----
 1 files changed, 11 insertions(+), 5 deletions(-)
diff mbox

Patch

diff --git a/cpu-all.h b/cpu-all.h
index 1ccc9a8..b81641f 100644
--- a/cpu-all.h
+++ b/cpu-all.h
@@ -634,16 +634,22 @@  extern int have_guest_base;
 
 /* All direct uses of g2h and h2g need to go away for usermode softmmu.  */
 #define g2h(x) ((void *)((unsigned long)(x) + GUEST_BASE))
+
+#if HOST_LONG_BITS == TARGET_VIRT_ADDR_SPACE_BITS
+#define h2g_valid(x) 1
+#else
+#define h2g_valid(x) ({ \
+    unsigned long __guest = (unsigned long)(x) - GUEST_BASE; \
+    __guest < (1ul << TARGET_VIRT_ADDR_SPACE_BITS); \
+})
+#endif
+
 #define h2g(x) ({ \
     unsigned long __ret = (unsigned long)(x) - GUEST_BASE; \
     /* Check if given address fits target address space */ \
-    assert(__ret == (abi_ulong)__ret); \
+    assert(h2g_valid(x)); \
     (abi_ulong)__ret; \
 })
-#define h2g_valid(x) ({ \
-    unsigned long __guest = (unsigned long)(x) - GUEST_BASE; \
-    (__guest == (abi_ulong)__guest); \
-})
 
 #define saddr(x) g2h(x)
 #define laddr(x) g2h(x)