File Index
Files and directories
Sign in
FILE

bhi.S

File preview with syntax highlighting.

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