From: Daniel King <dmk...@adacore.com>

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

Reply via email to