• Alexei Fedorov's avatar
    Add support for Branch Target Identification · 9fc59639
    Alexei Fedorov authored
    
    
    This patch adds the functionality needed for platforms to provide
    Branch Target Identification (BTI) extension, introduced to AArch64
    in Armv8.5-A by adding BTI instruction used to mark valid targets
    for indirect branches. The patch sets new GP bit [50] to the stage 1
    Translation Table Block and Page entries to denote guarded EL3 code
    pages which will cause processor to trap instructions in protected
    pages trying to perform an indirect branch to any instruction other
    than BTI.
    BTI feature is selected by BRANCH_PROTECTION option which supersedes
    the previous ENABLE_PAUTH used for Armv8.3-A Pointer Authentication
    and is disabled by default. Enabling BTI requires compiler support
    and was tested with GCC versions 9.0.0, 9.0.1 and 10.0.0.
    The assembly macros and helpers are modified to accommodate the BTI
    instruction.
    This is an experimental feature.
    Note. The previous ENABLE_PAUTH build option to enable PAuth in EL3
    is now made as an internal flag and BRANCH_PROTECTION flag should be
    used instead to enable Pointer Authentication.
    Note. USE_LIBROM=1 option is currently not supported.
    
    Change-Id: Ifaf4438609b16647dc79468b70cd1f47a623362e
    Signed-off-by: default avatarAlexei Fedorov <Alexei.Fedorov@arm.com>
    9fc59639