@@ -245,21 +245,64 @@ 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+ // Expose CHERI-compatible macros for permissions that overlap with other
250+ // CHERI implementations.
251+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_GLOBAL__" , Twine (1 << 0 ));
252+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_STORE__" ,
253+ Twine (1 << 2 ));
254+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_STORE_LOCAL__" ,
255+ Twine (1 << 4 ));
256+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_LOAD__" ,
257+ Twine (1 << 5 ));
258+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_ACCESS_SYSTEM_REGISTERS__" ,
259+ Twine (1 << 7 ));
260+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_EXECUTE__" ,
261+ Twine (1 << 8 ));
262+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_UNSEAL__" ,
263+ Twine (1 << 9 ));
264+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_SEAL__" ,
265+ Twine (1 << 10 ));
266+
267+ // Expose the full set of permissions in the __CHERIOT prefix with
268+ // concise names.
269+ Builder.defineMacro (" __CHERIOT_PERMISSION_GLOBAL__" , Twine (1 << 0 ));
270+ Builder.defineMacro (" __CHERIOT_PERMISSION_LOAD_GLOBAL__" , Twine (1 << 1 ));
271+ Builder.defineMacro (" __CHERIOT_PERMISSION_STORE__" , Twine (1 << 2 ));
272+ Builder.defineMacro (" __CHERIOT_PERMISSION_LOAD_MUTABLE__" , Twine (1 << 3 ));
273+ Builder.defineMacro (" __CHERIOT_PERMISSION_STORE_LOCAL__" , Twine (1 << 4 ));
274+ Builder.defineMacro (" __CHERIOT_PERMISSION_LOAD__" , Twine (1 << 5 ));
275+ Builder.defineMacro (" __CHERIOT_PERMISSION_LOAD_STORE_CAPABILITY__" ,
276+ Twine (1 << 6 ));
277+ Builder.defineMacro (" __CHERIOT_PERMISSION_ACCESS_SYSTEM_REGISTERS__" ,
278+ Twine (1 << 7 ));
279+ Builder.defineMacro (" __CHERIOT_PERMISSION_EXECUTE__" , Twine (1 << 8 ));
280+ Builder.defineMacro (" __CHERIOT_PERMISSION_UNSEAL__" , Twine (1 << 9 ));
281+ Builder.defineMacro (" __CHERIOT_PERMISSION_SEAL__" , Twine (1 << 10 ));
282+ Builder.defineMacro (" __CHERIOT_PERMISSION_USER_PERM0" , Twine (1 << 11 ));
283+ } else {
284+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_GLOBAL__" , Twine (1 << 0 ));
285+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_EXECUTE__" ,
286+ Twine (1 << 1 ));
287+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_LOAD__" ,
288+ Twine (1 << 2 ));
289+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_STORE__" ,
290+ Twine (1 << 3 ));
291+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_LOAD_CAPABILITY__" ,
292+ Twine (1 << 4 ));
293+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_STORE_CAPABILITY__" ,
294+ Twine (1 << 5 ));
295+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_STORE_LOCAL__" ,
296+ Twine (1 << 6 ));
297+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_SEAL__" ,
298+ Twine (1 << 7 ));
299+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_INVOKE__" ,
300+ Twine (1 << 8 ));
301+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_PERMIT_UNSEAL__" ,
302+ Twine (1 << 9 ));
303+ Builder.defineMacro (" __CHERI_CAP_PERMISSION_ACCESS_SYSTEM_REGISTERS__" ,
304+ Twine (1 << 10 ));
305+ }
263306
264307 // Macros for CHERIoT in the default and bare-metal ABIs.
265308 if (ABI == " cheriot" || ABI == " cheriot-baremetal" )
0 commit comments