提交 b9f83121 编写于 作者: R Richard Henderson 提交者: Paul Brook

Use TARGET_VIRT_ADDR_SPACE_BITS in h2g_valid.

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.
Signed-off-by: NRichard Henderson <rth@twiddle.net>
上级 52705890
......@@ -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)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册