Il 09/01/2014 19:09, Holger Hans Peter Freyther ha scritto: > For the pointer we return it needs to look like a valid OOP. The > trick that was used to align the code to make that true. Otherwise > empty_context_stack will set a DUMMY_NATIVE_IP and we will resume > at the ipOffset (e.g. the beginning of a loop) and not after the > interrupt check. > > This fixes something like this: > > a := nil. p := [a := 3] newProcess. > [p isTerminated] whileFalse: [p singleStep; suspend] > > 2014-01-09 Holger Hans Peter Freyther <[email protected]> > > * xlat.c: Align the label correctly. > --- > libgst/ChangeLog | 4 ++++ > libgst/xlat.c | 4 ++-- > 2 files changed, 6 insertions(+), 2 deletions(-) > > diff --git a/libgst/ChangeLog b/libgst/ChangeLog > index 05bc54b..528b6ae 100644 > --- a/libgst/ChangeLog > +++ b/libgst/ChangeLog > @@ -1,3 +1,7 @@ > +2014-01-09 Holger Hans Peter Freyther <[email protected]> > + > + * xlat.c: Align the label correctly. > + > 2013-12-23 Holger Hans Peter Freyther <[email protected]> > > * xlat.c: Change emitted code in emit_interrupt_check. > diff --git a/libgst/xlat.c b/libgst/xlat.c > index 9f45b33..260c7f6 100644 > --- a/libgst/xlat.c > +++ b/libgst/xlat.c > @@ -2502,8 +2502,6 @@ emit_interrupt_check (int restartReg, int ipOffset) > { > jit_insn *jmp, *restart = NULL; > > - jit_align (2); > - > jit_ldi_i (JIT_R2, &_gst_except_flag); > jmp = jit_beqi_i (jit_forward (), JIT_R2, 0); > > @@ -2514,6 +2512,8 @@ emit_interrupt_check (int restartReg, int ipOffset) > jit_sti_ul (&ip, JIT_R2); > } > > + jit_align (2); > + > /* Where to restart?*/ > if (restartReg == JIT_NOREG) > restart = jit_movi_p (JIT_RET, jit_forward()); >
Squash this in the previous patch, and we're good to go! :) Paolo _______________________________________________ help-smalltalk mailing list [email protected] https://lists.gnu.org/mailman/listinfo/help-smalltalk
