OSDN Git Service

tcg: Increase minimum alignment from tcg_malloc to 8
authorRichard Henderson <rth@twiddle.net>
Wed, 2 Aug 2017 21:50:04 +0000 (14:50 -0700)
committerRichard Henderson <rth@twiddle.net>
Thu, 3 Aug 2017 18:00:30 +0000 (11:00 -0700)
For a 64-bit ILP32 host, aligning to sizeof(long) is not enough.
Guess the minimum for any host is 8, as that covers uint64_t.
Qemu doesn't use a host long double or host vectors, except in
extremely limited circumstances.

Fixes a bus error for a sparc v8plus host.

Signed-off-by: Richard Henderson <rth@twiddle.net>
tcg/tcg.h

index da78721..17b7750 100644 (file)
--- a/tcg/tcg.h
+++ b/tcg/tcg.h
@@ -762,7 +762,10 @@ static inline void *tcg_malloc(int size)
 {
     TCGContext *s = &tcg_ctx;
     uint8_t *ptr, *ptr_end;
-    size = (size + sizeof(long) - 1) & ~(sizeof(long) - 1);
+
+    /* ??? This is a weak placeholder for minimum malloc alignment.  */
+    size = QEMU_ALIGN_UP(size, 8);
+
     ptr = s->pool_cur;
     ptr_end = ptr + size;
     if (unlikely(ptr_end > s->pool_end)) {