diff options
author | Mike Pall <mike> | 2012-05-14 17:35:05 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2012-05-14 17:35:05 +0200 |
commit | f3197046b801b20e28a2b9acc6fb0ee4f51f9f2f (patch) | |
tree | 7aa4b146f99b15e9167c82b0a4a2a9cf706fb45a | |
parent | e6bcb545f87da05f46f2d3d71f8c372e5ca27bd2 (diff) | |
download | luajit-f3197046b801b20e28a2b9acc6fb0ee4f51f9f2f.tar.gz luajit-f3197046b801b20e28a2b9acc6fb0ee4f51f9f2f.tar.bz2 luajit-f3197046b801b20e28a2b9acc6fb0ee4f51f9f2f.zip |
Preserve snapshot #0 PC for root traces.
-rw-r--r-- | src/lj_snap.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/lj_snap.c b/src/lj_snap.c index ddf07b6a..bbe7dcae 100644 --- a/src/lj_snap.c +++ b/src/lj_snap.c | |||
@@ -136,6 +136,11 @@ void lj_snap_add(jit_State *J) | |||
136 | /* Merge if no ins. inbetween or if requested and no guard inbetween. */ | 136 | /* Merge if no ins. inbetween or if requested and no guard inbetween. */ |
137 | if (J->mergesnap ? !irt_isguard(J->guardemit) : | 137 | if (J->mergesnap ? !irt_isguard(J->guardemit) : |
138 | (nsnap > 0 && J->cur.snap[nsnap-1].ref == J->cur.nins)) { | 138 | (nsnap > 0 && J->cur.snap[nsnap-1].ref == J->cur.nins)) { |
139 | if (nsnap == 1 && J->parent == 0) { | ||
140 | /* But preserve snap #0 PC for root traces. */ | ||
141 | J->mergesnap = 0; | ||
142 | return; | ||
143 | } | ||
139 | nsnapmap = J->cur.snap[--nsnap].mapofs; | 144 | nsnapmap = J->cur.snap[--nsnap].mapofs; |
140 | } else { | 145 | } else { |
141 | lj_snap_grow_buf(J, nsnap+1); | 146 | lj_snap_grow_buf(J, nsnap+1); |