2
0
Эх сурвалжийг харах

LJ_GC64: Various fixes.

Contributed by Peter Cawley.
Mike Pall 9 жил өмнө
parent
commit
54b78e7c66

+ 2 - 0
src/lj_record.c

@@ -1765,6 +1765,8 @@ static void rec_varg(jit_State *J, BCReg dst, ptrdiff_t nresults)
   int32_t numparams = J->pt->numparams;
   int32_t numparams = J->pt->numparams;
   ptrdiff_t nvararg = frame_delta(J->L->base-1) - numparams - 1 - LJ_FR2;
   ptrdiff_t nvararg = frame_delta(J->L->base-1) - numparams - 1 - LJ_FR2;
   lua_assert(frame_isvarg(J->L->base-1));
   lua_assert(frame_isvarg(J->L->base-1));
+  if (LJ_FR2 && dst > J->maxslot)
+    J->base[dst-1] = 0;  /* Prevent resurrection of unrelated slot. */
   if (J->framedepth > 0) {  /* Simple case: varargs defined on-trace. */
   if (J->framedepth > 0) {  /* Simple case: varargs defined on-trace. */
     ptrdiff_t i;
     ptrdiff_t i;
     if (nvararg < 0) nvararg = 0;
     if (nvararg < 0) nvararg = 0;

+ 1 - 1
src/lj_target_x86.h

@@ -31,7 +31,7 @@ enum {
   FPRDEF(RIDENUM)		/* Floating-point registers (FPRs). */
   FPRDEF(RIDENUM)		/* Floating-point registers (FPRs). */
   RID_MAX,
   RID_MAX,
   RID_MRM = RID_MAX,		/* Pseudo-id for ModRM operand. */
   RID_MRM = RID_MAX,		/* Pseudo-id for ModRM operand. */
-  RID_RIP = RID_MAX+1,		/* Pseudo-id for RIP (x64 only). */
+  RID_RIP = RID_MAX+5,		/* Pseudo-id for RIP (x64 only), rm bits = 5. */
 
 
   /* Calling conventions. */
   /* Calling conventions. */
   RID_SP = RID_ESP,
   RID_SP = RID_ESP,