mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-18 15:16:56 +07:00
d72714c1da
In order to branch around tail calls (due to out-of-bounds index,
exceeding tail call count or missing tail call target), JIT uses
label[0] field, which contains the address of the instruction following
the tail call. When there are multiple tail calls, label[0] value comes
from handling of a previous tail call, which is incorrect.
Fix by getting rid of label array and resolving the label address
locally: for all 3 branches that jump to it, emit 0 offsets at the
beginning, and then backpatch them with the correct value.
Also, do not use the long jump infrastructure: the tail call sequence
is known to be short, so make all 3 jumps short.
Fixes:
|
||
---|---|---|
.. | ||
appldata | ||
boot | ||
configs | ||
crypto | ||
hypfs | ||
include | ||
kernel | ||
kvm | ||
lib | ||
mm | ||
net | ||
oprofile | ||
pci | ||
purgatory | ||
scripts | ||
tools | ||
Kbuild | ||
Kconfig | ||
Kconfig.debug | ||
Makefile |