diff options
author | Arnaud Charlet <charlet@adacore.com> | 2019-07-09 07:54:50 +0000 |
---|---|---|
committer | Pierre-Marie de Rodat <pmderodat@gcc.gnu.org> | 2019-07-09 07:54:50 +0000 |
commit | 0024315552cacb8cb38d913e1caa8506121654ef (patch) | |
tree | c69f997d366072b20e7b07650253a05518257cd1 | |
parent | c7854dbd0fedde0bb15e56cc9b4f120d80f3ef41 (diff) | |
download | gcc-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/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/libgnat/s-memory.adb | 17 |
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; |