Browse Source

Fix overly restrictive range calculation in mcode allocation.

Contributed by Alexey Kopytov.
Mike Pall 8 years ago
parent
commit
4e308361bf
1 changed files with 4 additions and 4 deletions
  1. 4 4
      src/lj_mcode.c

+ 4 - 4
src/lj_mcode.c

@@ -239,11 +239,11 @@ static void *mcode_alloc(jit_State *J, size_t sz)
 	return p;
 	return p;
       if (p) mcode_free(J, p, sz);  /* Free badly placed area. */
       if (p) mcode_free(J, p, sz);  /* Free badly placed area. */
     }
     }
-    /* Next try probing pseudo-random addresses. */
+    /* Next try probing 64K-aligned pseudo-random addresses. */
     do {
     do {
-      hint = (0x78fb ^ LJ_PRNG_BITS(J, 15)) << 16;  /* 64K aligned. */
-    } while (!(hint + sz < range));
-    hint = target + hint - (range>>1);
+      hint = LJ_PRNG_BITS(J, LJ_TARGET_JUMPRANGE-16) << 16;
+    } while (!(hint + sz < range+range));
+    hint = target + hint - range;
   }
   }
   lj_trace_err(J, LJ_TRERR_MCODEAL);  /* Give up. OS probably ignores hints? */
   lj_trace_err(J, LJ_TRERR_MCODEAL);  /* Give up. OS probably ignores hints? */
   return NULL;
   return NULL;