From: Daniel King <[email protected]>
This allows CHERI exceptions to be raised from C code in the runtime.
gcc/ada/ChangeLog:
* libgnat/i-cheri-exceptions.ads: Export CHERI exception IDs.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/libgnat/i-cheri-exceptions.ads | 30 ++++++++++++++++++++++++++
1 file changed, 30 insertions(+)
diff --git a/gcc/ada/libgnat/i-cheri-exceptions.ads
b/gcc/ada/libgnat/i-cheri-exceptions.ads
index 88ecb1325c4..2a3acd2e918 100644
--- a/gcc/ada/libgnat/i-cheri-exceptions.ads
+++ b/gcc/ada/libgnat/i-cheri-exceptions.ads
@@ -28,6 +28,7 @@
-- Extensive contributions were provided by Ada Core Technologies Inc. --
-- --
------------------------------------------------------------------------------
+with Ada.Exceptions;
-- This package defines exception types for CHERI-related errors
@@ -47,4 +48,33 @@ is
Capability_Tag_Error : exception;
-- An invalid capability was dereferenced
+private
+
+ -- Expose C names for exception identifiers to allow raising from signal
+ -- handlers in init.c.
+
+ Capability_Bound_Error_Id : constant Ada.Exceptions.Exception_Id :=
+ Capability_Bound_Error'Identity;
+ pragma Export (C,
+ Capability_Bound_Error_Id,
+ "capability_bound_error_id");
+
+ Capability_Permission_Error_Id : constant Ada.Exceptions.Exception_Id :=
+ Capability_Permission_Error'Identity;
+ pragma Export (C,
+ Capability_Permission_Error_Id,
+ "capability_permission_error_id");
+
+ Capability_Sealed_Error_Id : constant Ada.Exceptions.Exception_Id :=
+ Capability_Sealed_Error'Identity;
+ pragma Export (C,
+ Capability_Sealed_Error_Id,
+ "capability_sealed_error_id");
+
+ Capability_Tag_Error_Id : constant Ada.Exceptions.Exception_Id :=
+ Capability_Tag_Error'Identity;
+ pragma Export (C,
+ Capability_Tag_Error_Id,
+ "capability_tag_error_id");
+
end Interfaces.CHERI.Exceptions;
--
2.43.0