mirror of https://github.com/xemu-project/xemu.git
![]() The old implementation replaces two insns, swapping between b <dest> nop and pcaddu18i tmp, <dest> jirl zero, tmp, <dest> & 0xffff There is a race condition in which a thread could be stopped at the jirl, i.e. with the top of the address loaded, and when restarted we have re-linked to a different TB, so that the top half no longer matches the bottom half. Note that while we never directly re-link to a different TB, we can link, unlink, and link again all while the stopped thread remains stopped. The new implementation replaces only one insn, swapping between b <dest> and pcadd tmp, <jmp_addr> falling through to load the address from tmp, and branch. Reviewed-by: WANG Xuerui <git@xen0n.name> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> |
||
---|---|---|
.. | ||
aarch64 | ||
arm | ||
i386 | ||
loongarch64 | ||
mips | ||
ppc | ||
riscv | ||
s390x | ||
sparc64 | ||
tci | ||
meson.build | ||
optimize.c | ||
region.c | ||
tcg-common.c | ||
tcg-internal.h | ||
tcg-ldst.c.inc | ||
tcg-op-gvec.c | ||
tcg-op-vec.c | ||
tcg-op.c | ||
tcg-pool.c.inc | ||
tcg.c | ||
tci.c |