aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArnaud Charlet <charlet@adacore.com>2019-07-09 07:54:50 +0000
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>2019-07-09 07:54:50 +0000
commit0024315552cacb8cb38d913e1caa8506121654ef (patch)
treec69f997d366072b20e7b07650253a05518257cd1
parentc7854dbd0fedde0bb15e56cc9b4f120d80f3ef41 (diff)
downloadgcc-0024315552cacb8cb38d913e1caa8506121654ef.zip
gcc-0024315552cacb8cb38d913e1caa8506121654ef.tar.gz
gcc-0024315552cacb8cb38d913e1caa8506121654ef.tar.bz2
[Ada] Disable calls to Abort defer/undefer when ZCX_By_Default
2019-07-09 Arnaud Charlet <charlet@adacore.com> gcc/ada/ * libgnat/s-memory.adb: Disable calls to Abort defer/undefer when ZCX_By_Default. From-SVN: r273284
-rw-r--r--gcc/ada/ChangeLog5
-rw-r--r--gcc/ada/libgnat/s-memory.adb17
2 files changed, 12 insertions, 10 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index d8f7de6..3832b31 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -1,3 +1,8 @@
+2019-07-09 Arnaud Charlet <charlet@adacore.com>
+
+ * libgnat/s-memory.adb: Disable calls to Abort defer/undefer
+ when ZCX_By_Default.
+
2019-07-09 Javier Miranda <miranda@adacore.com>
* sem_ch13.adb (Rep_Item_Too_Early): Representation clauses are
diff --git a/gcc/ada/libgnat/s-memory.adb b/gcc/ada/libgnat/s-memory.adb
index f34a92b..ebc168e 100644
--- a/gcc/ada/libgnat/s-memory.adb
+++ b/gcc/ada/libgnat/s-memory.adb
@@ -33,13 +33,10 @@
-- This implementation assumes that the underlying malloc/free/realloc
-- implementation is thread safe, and thus, no additional lock is required.
--- Note that we still need to defer abort because on most systems, an
--- asynchronous signal (as used for implementing asynchronous abort of
--- task) cannot safely be handled while malloc is executing.
-
--- If you are not using Ada constructs containing the "abort" keyword, then
--- you can remove the calls to Abort_Defer.all and Abort_Undefer.all from
--- this unit.
+-- Note that when using sjlj exception handling, we still need to defer abort
+-- because an asynchronous signal (as used for implementing asynchronous abort
+-- of task on sjlj runtimes) cannot safely be handled while malloc is
+-- executing.
pragma Compiler_Unit_Warning;
@@ -80,7 +77,7 @@ package body System.Memory is
raise Storage_Error with "object too large";
end if;
- if Parameters.No_Abort then
+ if ZCX_By_Default or else Parameters.No_Abort then
Result := c_malloc (System.CRTL.size_t (Size));
else
Abort_Defer.all;
@@ -121,7 +118,7 @@ package body System.Memory is
procedure Free (Ptr : System.Address) is
begin
- if Parameters.No_Abort then
+ if ZCX_By_Default or else Parameters.No_Abort then
c_free (Ptr);
else
Abort_Defer.all;
@@ -145,7 +142,7 @@ package body System.Memory is
raise Storage_Error with "object too large";
end if;
- if Parameters.No_Abort then
+ if ZCX_By_Default or else Parameters.No_Abort then
Result := c_realloc (Ptr, System.CRTL.size_t (Size));
else
Abort_Defer.all;