From 96a8b7050beeb1a28d0e2c2a8d3e841ea38d450c Mon Sep 17 00:00:00 2001 From: Jerome Lambourg Date: Mon, 12 Aug 2019 08:59:08 +0000 Subject: [PATCH] [Ada] VxWorks: call s-tpopsp.Self only when needed 2019-08-12 Jerome Lambourg gcc/ada/ * libgnarl/s-taprop__vxworks.adb (Abort_Handler): Only call s-tpopsp.Self when actually needed. From-SVN: r274283 --- gcc/ada/ChangeLog | 5 +++++ gcc/ada/libgnarl/s-taprop__vxworks.adb | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index df19f1bf69b..b656a026a04 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2019-08-12 Jerome Lambourg + + * libgnarl/s-taprop__vxworks.adb (Abort_Handler): Only call + s-tpopsp.Self when actually needed. + 2019-08-12 Eric Botcazou * exp_ch4.adb (Discrete_Range_Check): Return if checks are diff --git a/gcc/ada/libgnarl/s-taprop__vxworks.adb b/gcc/ada/libgnarl/s-taprop__vxworks.adb index 80a72908609..6ef0a9b4bcf 100644 --- a/gcc/ada/libgnarl/s-taprop__vxworks.adb +++ b/gcc/ada/libgnarl/s-taprop__vxworks.adb @@ -192,7 +192,10 @@ package body System.Task_Primitives.Operations is procedure Abort_Handler (signo : Signal) is pragma Unreferenced (signo); - Self_ID : constant Task_Id := Self; + -- Do not call Self at this point as we're in a signal handler + -- and it may not be available, in particular on targets where we + -- support ZCX and where we don't do anything here anyway. + Self_ID : Task_Id; Old_Set : aliased sigset_t; Unblocked_Mask : aliased sigset_t; Result : int; @@ -208,6 +211,8 @@ package body System.Task_Primitives.Operations is return; end if; + Self_ID := Self; + if Self_ID.Deferral_Level = 0 and then Self_ID.Pending_ATC_Level < Self_ID.ATC_Nesting_Level and then not Self_ID.Aborting -- 2.30.2