Skip to content
  • Kristof Beyls's avatar
    [AArch64] Avoid incompatibility between SLSBLR mitigation and BTI codegen. · d938ec45
    Kristof Beyls authored
    A "BTI c" instruction only allows jumping/calling to using a BLR* instruction.
    However, the SLSBLR mitigation changes a BLR to a BR to implement the
    function call. Therefore, a "BTI c" check that passed before could
    trigger after the BLR->BL change done by the SLSBLR mitigation.
    However, if the register used in BR is X16 or X17, this trigger will not
    fire (see ArmARM for further details).
    
    Therefore, this patch simply changes the function stubs for the SLSBLR
    mitigation from
    __llvm_slsblr_thunk_x<N>:
        br x<N>
        SpeculationBarrier
    to
    __llvm_slsblr_thunk_x<N>:
        mov x16, x<N>
        br  x16
        SpeculationBarrier
    
    Differential Revision: https://reviews.llvm.org/D81405
    d938ec45
Loading