1*b815f687SPeter Zijlstra/* SPDX-License-Identifier: GPL-2.0 */ 2*b815f687SPeter Zijlstra 3*b815f687SPeter Zijlstra#include <linux/linkage.h> 4*b815f687SPeter Zijlstra#include <asm/unwind_hints.h> 5*b815f687SPeter Zijlstra#include <asm/nospec-branch.h> 6*b815f687SPeter Zijlstra 7*b815f687SPeter Zijlstra/* 8*b815f687SPeter Zijlstra * Notably, the FineIBT preamble calling these will have ZF set and r10 zero. 9*b815f687SPeter Zijlstra * 10*b815f687SPeter Zijlstra * The very last element is in fact larger than 32 bytes, but since its the 11*b815f687SPeter Zijlstra * last element, this does not matter, 12*b815f687SPeter Zijlstra * 13*b815f687SPeter Zijlstra * There are 2 #UD sites, located between 0,1-2,3 and 4,5-6,7 such that they 14*b815f687SPeter Zijlstra * can be reached using Jcc.d8, these elements (1 and 5) have sufficiently 15*b815f687SPeter Zijlstra * big alignment holes for this to not stagger the array. 16*b815f687SPeter Zijlstra */ 17*b815f687SPeter Zijlstra 18*b815f687SPeter Zijlstra.pushsection .noinstr.text, "ax" 19*b815f687SPeter Zijlstra 20*b815f687SPeter Zijlstra .align 32 21*b815f687SPeter ZijlstraSYM_CODE_START(__bhi_args) 22*b815f687SPeter Zijlstra 23*b815f687SPeter Zijlstra#ifdef CONFIG_FINEIBT_BHI 24*b815f687SPeter Zijlstra 25*b815f687SPeter Zijlstra .align 32 26*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_0, SYM_L_LOCAL) 27*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 28*b815f687SPeter Zijlstra UNWIND_HINT_FUNC 29*b815f687SPeter Zijlstra jne .Lud_1 30*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 31*b815f687SPeter Zijlstra ret 32*b815f687SPeter Zijlstra int3 33*b815f687SPeter Zijlstra 34*b815f687SPeter Zijlstra .align 32 35*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_1, SYM_L_LOCAL) 36*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 37*b815f687SPeter Zijlstra UNWIND_HINT_FUNC 38*b815f687SPeter Zijlstra jne .Lud_1 39*b815f687SPeter Zijlstra cmovne %r10, %rdi 40*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 41*b815f687SPeter Zijlstra ret 42*b815f687SPeter Zijlstra int3 43*b815f687SPeter Zijlstra 44*b815f687SPeter Zijlstra .align 8 45*b815f687SPeter Zijlstra ANNOTATE_REACHABLE 46*b815f687SPeter Zijlstra.Lud_1: ud2 47*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 48*b815f687SPeter Zijlstra ret 49*b815f687SPeter Zijlstra int3 50*b815f687SPeter Zijlstra 51*b815f687SPeter Zijlstra .align 32 52*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_2, SYM_L_LOCAL) 53*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 54*b815f687SPeter Zijlstra UNWIND_HINT_FUNC 55*b815f687SPeter Zijlstra jne .Lud_1 56*b815f687SPeter Zijlstra cmovne %r10, %rdi 57*b815f687SPeter Zijlstra cmovne %r10, %rsi 58*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 59*b815f687SPeter Zijlstra ret 60*b815f687SPeter Zijlstra int3 61*b815f687SPeter Zijlstra 62*b815f687SPeter Zijlstra .align 32 63*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_3, SYM_L_LOCAL) 64*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 65*b815f687SPeter Zijlstra UNWIND_HINT_FUNC 66*b815f687SPeter Zijlstra jne .Lud_1 67*b815f687SPeter Zijlstra cmovne %r10, %rdi 68*b815f687SPeter Zijlstra cmovne %r10, %rsi 69*b815f687SPeter Zijlstra cmovne %r10, %rdx 70*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 71*b815f687SPeter Zijlstra ret 72*b815f687SPeter Zijlstra int3 73*b815f687SPeter Zijlstra 74*b815f687SPeter Zijlstra .align 32 75*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_4, SYM_L_LOCAL) 76*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 77*b815f687SPeter Zijlstra UNWIND_HINT_FUNC 78*b815f687SPeter Zijlstra jne .Lud_2 79*b815f687SPeter Zijlstra cmovne %r10, %rdi 80*b815f687SPeter Zijlstra cmovne %r10, %rsi 81*b815f687SPeter Zijlstra cmovne %r10, %rdx 82*b815f687SPeter Zijlstra cmovne %r10, %rcx 83*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 84*b815f687SPeter Zijlstra ret 85*b815f687SPeter Zijlstra int3 86*b815f687SPeter Zijlstra 87*b815f687SPeter Zijlstra .align 32 88*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_5, SYM_L_LOCAL) 89*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 90*b815f687SPeter Zijlstra UNWIND_HINT_FUNC 91*b815f687SPeter Zijlstra jne .Lud_2 92*b815f687SPeter Zijlstra cmovne %r10, %rdi 93*b815f687SPeter Zijlstra cmovne %r10, %rsi 94*b815f687SPeter Zijlstra cmovne %r10, %rdx 95*b815f687SPeter Zijlstra cmovne %r10, %rcx 96*b815f687SPeter Zijlstra cmovne %r10, %r8 97*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 98*b815f687SPeter Zijlstra ret 99*b815f687SPeter Zijlstra int3 100*b815f687SPeter Zijlstra 101*b815f687SPeter Zijlstra .align 8 102*b815f687SPeter Zijlstra ANNOTATE_REACHABLE 103*b815f687SPeter Zijlstra.Lud_2: ud2 104*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 105*b815f687SPeter Zijlstra ret 106*b815f687SPeter Zijlstra int3 107*b815f687SPeter Zijlstra 108*b815f687SPeter Zijlstra .align 32 109*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_6, SYM_L_LOCAL) 110*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 111*b815f687SPeter Zijlstra UNWIND_HINT_FUNC 112*b815f687SPeter Zijlstra jne .Lud_2 113*b815f687SPeter Zijlstra cmovne %r10, %rdi 114*b815f687SPeter Zijlstra cmovne %r10, %rsi 115*b815f687SPeter Zijlstra cmovne %r10, %rdx 116*b815f687SPeter Zijlstra cmovne %r10, %rcx 117*b815f687SPeter Zijlstra cmovne %r10, %r8 118*b815f687SPeter Zijlstra cmovne %r10, %r9 119*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 120*b815f687SPeter Zijlstra ret 121*b815f687SPeter Zijlstra int3 122*b815f687SPeter Zijlstra 123*b815f687SPeter Zijlstra .align 32 124*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_7, SYM_L_LOCAL) 125*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 126*b815f687SPeter Zijlstra UNWIND_HINT_FUNC 127*b815f687SPeter Zijlstra jne .Lud_2 128*b815f687SPeter Zijlstra cmovne %r10, %rdi 129*b815f687SPeter Zijlstra cmovne %r10, %rsi 130*b815f687SPeter Zijlstra cmovne %r10, %rdx 131*b815f687SPeter Zijlstra cmovne %r10, %rcx 132*b815f687SPeter Zijlstra cmovne %r10, %r8 133*b815f687SPeter Zijlstra cmovne %r10, %r9 134*b815f687SPeter Zijlstra cmovne %r10, %rsp 135*b815f687SPeter Zijlstra ANNOTATE_UNRET_SAFE 136*b815f687SPeter Zijlstra ret 137*b815f687SPeter Zijlstra int3 138*b815f687SPeter Zijlstra 139*b815f687SPeter Zijlstra#endif /* CONFIG_FINEIBT_BHI */ 140*b815f687SPeter Zijlstra 141*b815f687SPeter Zijlstra .align 32 142*b815f687SPeter ZijlstraSYM_INNER_LABEL(__bhi_args_end, SYM_L_GLOBAL) 143*b815f687SPeter Zijlstra ANNOTATE_NOENDBR 144*b815f687SPeter Zijlstra nop /* Work around toolchain+objtool quirk */ 145*b815f687SPeter ZijlstraSYM_CODE_END(__bhi_args) 146*b815f687SPeter Zijlstra 147*b815f687SPeter Zijlstra.popsection 148