After the change introduced 052722667c9dbf96a5dc04d45af55599718d9f92 0xe9 jumps inside a function started unwinding wrongly when there is a changed runtime function. The handling in is_inside_epilogue() in the function itself is correct, but then chained function is processed and epilogue check there checks the same jmp and now sees the jump outside of the present runtime function and treats that as tail jump. I added a test reproducing this case. I think just ignoring epilogue when handling chained runtime function is rather obvious solution. Parent (chained) function doesn't jump into the inner function inside an epilogue. So when we are processing chained unwind info just processing the unwind opcodes should always work. Even if the return from inner function would go to the first epilogue instuction (while also we can't probably detect where the inner function would return to the chained function code, and the PC address from the inner function doesn't make sense for handling the unwind for the outer. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/9390#note_121087