diff options
| author | Mike Pall <mike> | 2014-04-03 21:45:57 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2014-04-03 21:45:57 +0200 |
| commit | 111b2e8711366b40161b4530f5f0a4fd08dc3420 (patch) | |
| tree | 231a0c1beb979ffc8eb798a1a44b9f8c407c8a12 /src | |
| parent | b293063eb823160d3f87c1d56f98a742ee8ee58e (diff) | |
| download | luajit-111b2e8711366b40161b4530f5f0a4fd08dc3420.tar.gz luajit-111b2e8711366b40161b4530f5f0a4fd08dc3420.tar.bz2 luajit-111b2e8711366b40161b4530f5f0a4fd08dc3420.zip | |
Fix top slot calculation for snapshots with continuations.
Diffstat (limited to 'src')
| -rw-r--r-- | src/lj_snap.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/src/lj_snap.c b/src/lj_snap.c index 1c978c26..803533cd 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c | |||
| @@ -104,8 +104,6 @@ static BCReg snapshot_framelinks(jit_State *J, SnapEntry *map) | |||
| 104 | if (frame_islua(frame)) { | 104 | if (frame_islua(frame)) { |
| 105 | map[f++] = SNAP_MKPC(frame_pc(frame)); | 105 | map[f++] = SNAP_MKPC(frame_pc(frame)); |
| 106 | frame = frame_prevl(frame); | 106 | frame = frame_prevl(frame); |
| 107 | if (frame + funcproto(frame_func(frame))->framesize > ftop) | ||
| 108 | ftop = frame + funcproto(frame_func(frame))->framesize; | ||
| 109 | } else if (frame_iscont(frame)) { | 107 | } else if (frame_iscont(frame)) { |
| 110 | map[f++] = SNAP_MKFTSZ(frame_ftsz(frame)); | 108 | map[f++] = SNAP_MKFTSZ(frame_ftsz(frame)); |
| 111 | map[f++] = SNAP_MKPC(frame_contpc(frame)); | 109 | map[f++] = SNAP_MKPC(frame_contpc(frame)); |
| @@ -114,7 +112,10 @@ static BCReg snapshot_framelinks(jit_State *J, SnapEntry *map) | |||
| 114 | lua_assert(!frame_isc(frame)); | 112 | lua_assert(!frame_isc(frame)); |
| 115 | map[f++] = SNAP_MKFTSZ(frame_ftsz(frame)); | 113 | map[f++] = SNAP_MKFTSZ(frame_ftsz(frame)); |
| 116 | frame = frame_prevd(frame); | 114 | frame = frame_prevd(frame); |
| 115 | continue; | ||
| 117 | } | 116 | } |
| 117 | if (frame + funcproto(frame_func(frame))->framesize > ftop) | ||
| 118 | ftop = frame + funcproto(frame_func(frame))->framesize; | ||
| 118 | } | 119 | } |
| 119 | lua_assert(f == (MSize)(1 + J->framedepth)); | 120 | lua_assert(f == (MSize)(1 + J->framedepth)); |
| 120 | return (BCReg)(ftop - lim); | 121 | return (BCReg)(ftop - lim); |
