Skip to content

Commit edc84d2

Browse files
committed
[CHERIoT] Update __CHERI_CAP_PERMISSION_* macros to match CHERIoT permissions.
1 parent 1153d07 commit edc84d2

File tree

2 files changed

+70
-15
lines changed

2 files changed

+70
-15
lines changed

clang/lib/Basic/Targets/RISCV.cpp

Lines changed: 48 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -245,21 +245,54 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions &Opts,
245245
}
246246

247247
// Macros for use with the set and get permissions builtins.
248-
Builder.defineMacro("__CHERI_CAP_PERMISSION_GLOBAL__", Twine(1<<0));
249-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_EXECUTE__",
250-
Twine(1<<1));
251-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_LOAD__", Twine(1<<2));
252-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE__", Twine(1<<3));
253-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_LOAD_CAPABILITY__",
254-
Twine(1<<4));
255-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE_CAPABILITY__",
256-
Twine(1<<5));
257-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE_LOCAL__",
258-
Twine(1<<6));
259-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_SEAL__", Twine(1<<7));
260-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_INVOKE__", Twine(1<<8));
261-
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_UNSEAL__", Twine(1<<9));
262-
Builder.defineMacro("__CHERI_CAP_PERMISSION_ACCESS_SYSTEM_REGISTERS__", Twine(1<<10));
248+
if (getTriple().getSubArch() == llvm::Triple::RISCV32SubArch_cheriot_v1) {
249+
Builder.defineMacro("__CHERI_CAP_PERMISSION_GLOBAL__", Twine(1 << 0));
250+
Builder.defineMacro("__CHERIOT_CAP_PERMISSION_PERMIT_LOAD_GLOBAL__",
251+
Twine(1 << 1));
252+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE__",
253+
Twine(1 << 2));
254+
Builder.defineMacro("__CHERIOT_CAP_PERMISSION_PERMIT_LOAD_MUTABLE__",
255+
Twine(1 << 3));
256+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE_LOCAL__",
257+
Twine(1 << 4));
258+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_LOAD__",
259+
Twine(1 << 5));
260+
Builder.defineMacro(
261+
"__CHERIOT_CAP_PERMISSION_PERMIT_LOAD_STORE_CAPABILITY__",
262+
Twine(1 << 6));
263+
Builder.defineMacro("__CHERI_CAP_PERMISSION_ACCESS_SYSTEM_REGISTERS__",
264+
Twine(1 << 7));
265+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_EXECUTE__",
266+
Twine(1 << 8));
267+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_UNSEAL__",
268+
Twine(1 << 9));
269+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_SEAL__",
270+
Twine(1 << 10));
271+
Builder.defineMacro("__CHERIOT_CAP_PERMISSION_USER_PERM0",
272+
Twine(1 << 11));
273+
} else {
274+
Builder.defineMacro("__CHERI_CAP_PERMISSION_GLOBAL__", Twine(1 << 0));
275+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_EXECUTE__",
276+
Twine(1 << 1));
277+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_LOAD__",
278+
Twine(1 << 2));
279+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE__",
280+
Twine(1 << 3));
281+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_LOAD_CAPABILITY__",
282+
Twine(1 << 4));
283+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE_CAPABILITY__",
284+
Twine(1 << 5));
285+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE_LOCAL__",
286+
Twine(1 << 6));
287+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_SEAL__",
288+
Twine(1 << 7));
289+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_INVOKE__",
290+
Twine(1 << 8));
291+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_UNSEAL__",
292+
Twine(1 << 9));
293+
Builder.defineMacro("__CHERI_CAP_PERMISSION_ACCESS_SYSTEM_REGISTERS__",
294+
Twine(1 << 10));
295+
}
263296

264297
// Macros for CHERIoT in the default and bare-metal ABIs.
265298
if (ABI == "cheriot" || ABI == "cheriot-baremetal")
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
// RUN: %clang_cc1 -E -dM -ffreestanding -triple riscv32cheriot-unknown-cheriotrtos < /dev/null | FileCheck %s
2+
3+
// CHECK: #define __CHERIOT_CAP_PERMISSION_PERMIT_LOAD_GLOBAL__ 2
4+
// CHECK: #define __CHERIOT_CAP_PERMISSION_PERMIT_LOAD_MUTABLE__ 8
5+
// CHECK: #define __CHERIOT_CAP_PERMISSION_PERMIT_LOAD_STORE_CAPABILITY__ 64
6+
// CHECK: #define __CHERIOT_CAP_PERMISSION_USER_PERM0 2048
7+
8+
// CHECK: #define __CHERI_ADDRESS_BITS__ 32
9+
// CHECK: #define __CHERI_CAPABILITY_WIDTH__ 64
10+
11+
// CHECK: #define __CHERI_CAP_PERMISSION_ACCESS_SYSTEM_REGISTERS__ 128
12+
// CHECK: #define __CHERI_CAP_PERMISSION_GLOBAL__ 1
13+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_EXECUTE__ 256
14+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_LOAD__ 32
15+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_SEAL__ 1024
16+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_STORE_LOCAL__ 16
17+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_STORE__ 4
18+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_UNSEAL__ 512
19+
20+
// CHECK: #define __CHERI__ 1
21+
// CHECK: #define __SIZEOF_CHERI_CAPABILITY__ 8
22+

0 commit comments

Comments
 (0)