https://gcc.gnu.org/g:9d69cdb1202f307796f6e34a827b02c1d048e213

commit r15-6130-g9d69cdb1202f307796f6e34a827b02c1d048e213
Author: Daniel King <dmk...@adacore.com>
Date:   Fri Nov 1 21:27:00 2024 +0000

    ada: Export CHERI exception IDs
    
    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.

Diff:
---
 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 88ecb1325c4d..2a3acd2e9187 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;

Reply via email to