diff --git a/src/compile.cpp b/src/compile.cpp index e4a2097524..009ab474f3 100644 --- a/src/compile.cpp +++ b/src/compile.cpp @@ -894,17 +894,16 @@ findExceptionHandler(Thread* t, void* frame) catchType = 0; } - if (Verbose and - (catchType == 0 or - instanceOf(t, catchType, t->exception))) - { - fprintf(stderr, "exception handler match for %d in %s: " - "start: %d; end: %d; ip: %d\n", - offset, - &byteArrayBody(t, methodName(t, frameMethod(frame)), 0), - nativeExceptionHandlerStart(handler), - nativeExceptionHandlerEnd(handler), - nativeExceptionHandlerIp(handler)); + if (catchType == 0 or instanceOf(t, catchType, t->exception)) { + if (Verbose) { + fprintf(stderr, "exception handler match for %d in %s: " + "start: %d; end: %d; ip: %d\n", + offset, + &byteArrayBody(t, methodName(t, frameMethod(frame)), 0), + nativeExceptionHandlerStart(handler), + nativeExceptionHandlerEnd(handler), + nativeExceptionHandlerIp(handler)); + } return handler; } @@ -2089,7 +2088,13 @@ class Compiler: public Assembler { lea(rsp, FrameFootprint + BytesPerWord, rcx); mov(rcx, rdi, threadFrameOffset()); // set thread frame to current - jmp(rbx); + push(rbp); + + call(rbx); + + add(BytesPerWord, rsp); + + ret(); return finish(); }