Skip to content

Commit 372cab9

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

File tree

2 files changed

+69
-15
lines changed

2 files changed

+69
-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("__CHERI_CAP_PERMISSION_PERMIT_LOAD_GLOBAL__",
251+
Twine(1 << 1));
252+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE__",
253+
Twine(1 << 2));
254+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_LOAD_MUTABLE__",
255+
Twine(1 << 3));
256+
Builder.defineMacro(
257+
"__CHERI_CAP_PERMISSION_PERMIT_STORE_LOCAL_CAPABILITY__",
258+
Twine(1 << 4));
259+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_LOAD__",
260+
Twine(1 << 5));
261+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_STORE_CAPABILITY__",
262+
Twine(1 << 6));
263+
Builder.defineMacro(
264+
"__CHERI_CAP_PERMISSION_PERMIT_ACCESS_SYSTEM_REGISTERS__",
265+
Twine(1 << 7));
266+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_EXECUTE__",
267+
Twine(1 << 8));
268+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_UNSEAL__",
269+
Twine(1 << 9));
270+
Builder.defineMacro("__CHERI_CAP_PERMISSION_PERMIT_SEAL__",
271+
Twine(1 << 10));
272+
Builder.defineMacro("__CHERI_CAP_PERMISSION_USER_PERM0", 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: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// RUN: %clang_cc1 -E -dM -ffreestanding -triple riscv32cheriot-unknown-cheriotrtos < /dev/null | FileCheck %s
2+
3+
// CHECK: #define __CHERI_ADDRESS_BITS__ 32
4+
// CHECK: #define __CHERI_CAPABILITY_WIDTH__ 64
5+
6+
// CHECK: #define __CHERI_CAP_PERMISSION_GLOBAL__ 1
7+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_ACCESS_SYSTEM_REGISTERS__ 128
8+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_EXECUTE__ 256
9+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_LOAD_GLOBAL__ 2
10+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_LOAD_MUTABLE__ 8
11+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_LOAD__ 32
12+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_SEAL__ 1024
13+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_STORE_CAPABILITY__ 64
14+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_STORE_LOCAL_CAPABILITY__ 16
15+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_STORE__ 4
16+
// CHECK: #define __CHERI_CAP_PERMISSION_PERMIT_UNSEAL__ 512
17+
// CHECK: #define __CHERI_CAP_PERMISSION_USER_PERM0 2048
18+
19+
// CHECK: #define __CHERI__ 1
20+
// CHECK: #define __SIZEOF_CHERI_CAPABILITY__ 8
21+

0 commit comments

Comments
 (0)