1
1
/*
2
2
* Copyright (c) 2018 Linaro Limited.
3
+ * Copyright 2025 Arm Limited and/or its affiliates <[email protected] >
3
4
*
4
5
* SPDX-License-Identifier: Apache-2.0
5
6
*/
27
28
#include <zephyr/types.h>
28
29
#include <stdbool.h>
29
30
#include <zephyr/arch/arm/misc.h>
31
+ #include <zephyr/sys/util_macro.h>
30
32
31
33
#ifdef __cplusplus
32
34
extern "C" {
@@ -50,6 +52,7 @@ static inline uintptr_t arch_syscall_invoke6(uintptr_t arg1, uintptr_t arg2,
50
52
register uint32_t r6 __asm__("r6" ) = call_id ;
51
53
52
54
__asm__ volatile ("svc %[svid]\n"
55
+ IF_ENABLED (CONFIG_ARM_BTI , ("bti\n" ))
53
56
: "=r" (ret ), "=r" (r1 ), "=r" (r2 ), "=r" (r3 )
54
57
: [svid ] "i" (_SVC_CALL_SYSTEM_CALL ),
55
58
"r" (ret ), "r" (r1 ), "r" (r2 ), "r" (r3 ),
@@ -72,6 +75,7 @@ static inline uintptr_t arch_syscall_invoke5(uintptr_t arg1, uintptr_t arg2,
72
75
register uint32_t r6 __asm__("r6" ) = call_id ;
73
76
74
77
__asm__ volatile ("svc %[svid]\n"
78
+ IF_ENABLED (CONFIG_ARM_BTI , ("bti\n" ))
75
79
: "=r" (ret ), "=r" (r1 ), "=r" (r2 ), "=r" (r3 )
76
80
: [svid ] "i" (_SVC_CALL_SYSTEM_CALL ),
77
81
"r" (ret ), "r" (r1 ), "r" (r2 ), "r" (r3 ),
@@ -92,6 +96,7 @@ static inline uintptr_t arch_syscall_invoke4(uintptr_t arg1, uintptr_t arg2,
92
96
register uint32_t r6 __asm__("r6" ) = call_id ;
93
97
94
98
__asm__ volatile ("svc %[svid]\n"
99
+ IF_ENABLED (CONFIG_ARM_BTI , ("bti\n" ))
95
100
: "=r" (ret ), "=r" (r1 ), "=r" (r2 ), "=r" (r3 )
96
101
: [svid ] "i" (_SVC_CALL_SYSTEM_CALL ),
97
102
"r" (ret ), "r" (r1 ), "r" (r2 ), "r" (r3 ),
@@ -111,6 +116,7 @@ static inline uintptr_t arch_syscall_invoke3(uintptr_t arg1, uintptr_t arg2,
111
116
register uint32_t r6 __asm__("r6" ) = call_id ;
112
117
113
118
__asm__ volatile ("svc %[svid]\n"
119
+ IF_ENABLED (CONFIG_ARM_BTI , ("bti\n" ))
114
120
: "=r" (ret ), "=r" (r1 ), "=r" (r2 )
115
121
: [svid ] "i" (_SVC_CALL_SYSTEM_CALL ),
116
122
"r" (ret ), "r" (r1 ), "r" (r2 ), "r" (r6 )
@@ -127,6 +133,7 @@ static inline uintptr_t arch_syscall_invoke2(uintptr_t arg1, uintptr_t arg2,
127
133
register uint32_t r6 __asm__("r6" ) = call_id ;
128
134
129
135
__asm__ volatile ("svc %[svid]\n"
136
+ IF_ENABLED (CONFIG_ARM_BTI , ("bti\n" ))
130
137
: "=r" (ret ), "=r" (r1 )
131
138
: [svid ] "i" (_SVC_CALL_SYSTEM_CALL ),
132
139
"r" (ret ), "r" (r1 ), "r" (r6 )
@@ -142,6 +149,7 @@ static inline uintptr_t arch_syscall_invoke1(uintptr_t arg1,
142
149
register uint32_t r6 __asm__("r6" ) = call_id ;
143
150
144
151
__asm__ volatile ("svc %[svid]\n"
152
+ IF_ENABLED (CONFIG_ARM_BTI , ("bti\n" ))
145
153
: "=r" (ret )
146
154
: [svid ] "i " (_SVC_CALL_SYSTEM_CALL),
147
155
" r " (ret), " r " (r6)
@@ -155,6 +163,7 @@ static inline uintptr_t arch_syscall_invoke0(uintptr_t call_id)
155
163
register uint32_t r6 __asm__("r6" ) = call_id ;
156
164
157
165
__asm__ volatile ("svc %[svid]\n"
166
+ IF_ENABLED (CONFIG_ARM_BTI , ("bti\n" ))
158
167
: "=r" (ret )
159
168
: [svid ] "i " (_SVC_CALL_SYSTEM_CALL),
160
169
" r " (ret), " r " (r6)
0 commit comments