From: Daniel King <[email protected]>
Exception declarations require elaboration on the full run-time to
register the exceptions. The package Interfaces.CHERI, however, is
used on bare-metal targets during early initialization, before
elaboration and is therefore marked No_Elaboration_Code_All.
Refactoring the exception declarations to a separate package allows
the common CHERI bindings to be used in such contexts.
gcc/ada/ChangeLog:
* libgnat/i-cheri.ads: Remove exception declarations.
* libgnat/i-cheri-exceptions.ads: New file.
Tested on x86_64-pc-linux-gnu, committed on master.
---
gcc/ada/libgnat/i-cheri-exceptions.ads | 50 ++++++++++++++++++++++++++
gcc/ada/libgnat/i-cheri.ads | 16 ---------
2 files changed, 50 insertions(+), 16 deletions(-)
create mode 100644 gcc/ada/libgnat/i-cheri-exceptions.ads
diff --git a/gcc/ada/libgnat/i-cheri-exceptions.ads
b/gcc/ada/libgnat/i-cheri-exceptions.ads
new file mode 100644
index 00000000000..88ecb1325c4
--- /dev/null
+++ b/gcc/ada/libgnat/i-cheri-exceptions.ads
@@ -0,0 +1,50 @@
+------------------------------------------------------------------------------
+-- --
+-- GNAT COMPILER COMPONENTS --
+-- --
+-- I N T E R F A C E S . C H E R I . E X C E P T I O N S --
+-- --
+-- S p e c --
+-- --
+-- Copyright (C) 2024, AdaCore --
+-- --
+-- GNAT is free software; you can redistribute it and/or modify it under --
+-- terms of the GNU General Public License as published by the Free Soft- --
+-- ware Foundation; either version 3, or (at your option) any later ver- --
+-- sion. GNAT is distributed in the hope that it will be useful, but WITH- --
+-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
+-- or FITNESS FOR A PARTICULAR PURPOSE. --
+-- --
+-- As a special exception under Section 7 of GPL version 3, you are granted --
+-- additional permissions described in the GCC Runtime Library Exception, --
+-- version 3.1, as published by the Free Software Foundation. --
+-- --
+-- You should have received a copy of the GNU General Public License and --
+-- a copy of the GCC Runtime Library Exception along with this program; --
+-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see --
+-- <http://www.gnu.org/licenses/>. --
+-- --
+-- GNAT was originally developed by the GNAT team at New York University. --
+-- Extensive contributions were provided by Ada Core Technologies Inc. --
+-- --
+------------------------------------------------------------------------------
+
+-- This package defines exception types for CHERI-related errors
+
+package Interfaces.CHERI.Exceptions with
+ Preelaborate
+is
+
+ Capability_Bound_Error : exception;
+ -- An out-of-bounds access was attempted
+
+ Capability_Permission_Error : exception;
+ -- An attempted access exceeded the permissions granted by a capability
+
+ Capability_Sealed_Error : exception;
+ -- A sealed capability was dereferenced
+
+ Capability_Tag_Error : exception;
+ -- An invalid capability was dereferenced
+
+end Interfaces.CHERI.Exceptions;
diff --git a/gcc/ada/libgnat/i-cheri.ads b/gcc/ada/libgnat/i-cheri.ads
index 389583a012f..9fbcb885284 100644
--- a/gcc/ada/libgnat/i-cheri.ads
+++ b/gcc/ada/libgnat/i-cheri.ads
@@ -467,20 +467,4 @@ is
External_Name => "__builtin_cheri_stack_get";
-- Get the Capability Stack Pointer (CSP)
- ---------------------------
- -- Capability Exceptions --
- ---------------------------
-
- Capability_Bound_Error : exception;
- -- An out-of-bounds access was attempted
-
- Capability_Permission_Error : exception;
- -- An attempted access exceeded the permissions granted by a capability
-
- Capability_Sealed_Error : exception;
- -- A sealed capability was dereferenced
-
- Capability_Tag_Error : exception;
- -- An invalid capability was dereferenced
-
end Interfaces.CHERI;
--
2.43.0