diff --git a/src/stub/src/arch/amd64/bxx.S b/src/stub/src/arch/amd64/bxx.S index 63e5e932..c0582d3e 100644 --- a/src/stub/src/arch/amd64/bxx.S +++ b/src/stub/src/arch/amd64/bxx.S @@ -35,8 +35,9 @@ amdbxx: # (*f_unf)(xo->buf, out_len, h.b_cto8, h.b_ftid); #ifndef NO_METHOD_CHECK cmpl $0x49,ftid; jne ckend0 # filter: JMP, CALL, 6-byte Jxx - push %rbx # save #endif + push %rbx # save + push %rdi; lea (1 -4)(%rdi,%rsi),%rcx # beyond last possible displacement pop %rsi # start of buffer push %rsi @@ -66,9 +67,9 @@ ckstart: cmpq %rcx,%rsi; jae ckend lodsb; jmp ckloop2 # 0x0F prefix would overlap previous displacement ckend: -#ifndef NO_METHOD_CHECK pop %rbx # restore ckend0: +#ifndef NO_METHOD_CHECK ret #endif