]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
ada: Export CHERI exception IDs
authorDaniel King <dmking@adacore.com>
Fri, 1 Nov 2024 21:27:00 +0000 (21:27 +0000)
committerMarc Poulhiès <dkm@gcc.gnu.org>
Thu, 12 Dec 2024 09:57:53 +0000 (10:57 +0100)
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.

gcc/ada/libgnat/i-cheri-exceptions.ads

index 88ecb1325c4d36ec765cede46a12bf62127efd1b..2a3acd2e91870b0e0294766401b39b28edc6b8f7 100644 (file)
@@ -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;