Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/tools/testing/selftests/arm64/fp/assembler.h
26288 views
1
// SPDX-License-Identifier: GPL-2.0-only
2
// Copyright (C) 2015-2019 ARM Limited.
3
// Original author: Dave Martin <[email protected]>
4
5
#ifndef ASSEMBLER_H
6
#define ASSEMBLER_H
7
8
.macro __for from:req, to:req
9
.if (\from) == (\to)
10
_for__body %\from
11
.else
12
__for \from, %(\from) + ((\to) - (\from)) / 2
13
__for %(\from) + ((\to) - (\from)) / 2 + 1, \to
14
.endif
15
.endm
16
17
.macro _for var:req, from:req, to:req, insn:vararg
18
.macro _for__body \var:req
19
.noaltmacro
20
\insn
21
.altmacro
22
.endm
23
24
.altmacro
25
__for \from, \to
26
.noaltmacro
27
28
.purgem _for__body
29
.endm
30
31
.macro function name
32
.macro endfunction
33
.type \name, @function
34
.purgem endfunction
35
.endm
36
\name:
37
.endm
38
39
.macro define_accessor name, num, insn
40
.macro \name\()_entry n
41
\insn \n, 1
42
ret
43
.endm
44
45
function \name
46
adr x2, .L__accessor_tbl\@
47
add x2, x2, x0, lsl #3
48
br x2
49
50
.L__accessor_tbl\@:
51
_for x, 0, (\num) - 1, \name\()_entry \x
52
endfunction
53
54
.purgem \name\()_entry
55
.endm
56
57
// Utility macro to print a literal string
58
// Clobbers x0-x4,x8
59
.macro puts string
60
.pushsection .rodata.str1.1, "aMS", @progbits, 1
61
.L__puts_literal\@: .string "\string"
62
.popsection
63
64
ldr x0, =.L__puts_literal\@
65
bl puts
66
.endm
67
68
#define PR_SET_SHADOW_STACK_STATUS 75
69
# define PR_SHADOW_STACK_ENABLE (1UL << 0)
70
71
.macro enable_gcs
72
// Run with GCS
73
mov x0, PR_SET_SHADOW_STACK_STATUS
74
mov x1, PR_SHADOW_STACK_ENABLE
75
mov x2, xzr
76
mov x3, xzr
77
mov x4, xzr
78
mov x5, xzr
79
mov x8, #__NR_prctl
80
svc #0
81
.endm
82
83
#endif /* ! ASSEMBLER_H */
84
85