[Ada] Update signal constants for GNU/Linux
authorPatrick Bernardi <bernardi@adacore.com>
Wed, 14 Nov 2018 11:42:43 +0000 (11:42 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Wed, 14 Nov 2018 11:42:43 +0000 (11:42 +0000)
Add the signal SIGSYS and mark the glibc reserved real-time signals
(32-34) as reserved rather than not maskable.

2018-11-14  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* libgnarl/a-intnam__linux.ads: Add SIGSYS.
* libgnarl/s-linux__alpha.ads, libgnarl/s-linux__android.ads,
libgnarl/s-linux__hppa.ads, libgnarl/s-linux__mips.ads,
libgnarl/s-linux__riscv.ads, libgnarl/s-linux__sparc.ads,
libgnarl/s-linux__x32.ads: Rename SIGLTHRRES, SIGLTHRCAN and
SIGLTHRDBG to SIG32, SIG33 and SIG34 as their names are
implementation specific.
* libgnarl/s-osinte__linux.ads, libgnarl/s-linux.ads: Add
SIGSYS.  Move SIG32, SIG33 and SIG34 from the unmasked list to
the reserved list.

gcc/testsuite/

* gnat.dg/rt_signals.adb: New testcase.

From-SVN: r266136

13 files changed:
gcc/ada/ChangeLog
gcc/ada/libgnarl/a-intnam__linux.ads
gcc/ada/libgnarl/s-linux.ads
gcc/ada/libgnarl/s-linux__alpha.ads
gcc/ada/libgnarl/s-linux__android.ads
gcc/ada/libgnarl/s-linux__hppa.ads
gcc/ada/libgnarl/s-linux__mips.ads
gcc/ada/libgnarl/s-linux__riscv.ads
gcc/ada/libgnarl/s-linux__sparc.ads
gcc/ada/libgnarl/s-linux__x32.ads
gcc/ada/libgnarl/s-osinte__linux.ads
gcc/testsuite/ChangeLog
gcc/testsuite/gnat.dg/rt_signals.adb [new file with mode: 0644]

index 776d0d92d7fa38164a8149e585a75268681cab15..14cc1fd3fd7bd05b787b06f382430ccf78c4bd0a 100644 (file)
@@ -1,3 +1,16 @@
+2018-11-14  Patrick Bernardi  <bernardi@adacore.com>
+
+       * libgnarl/a-intnam__linux.ads: Add SIGSYS.
+       * libgnarl/s-linux__alpha.ads, libgnarl/s-linux__android.ads,
+       libgnarl/s-linux__hppa.ads, libgnarl/s-linux__mips.ads,
+       libgnarl/s-linux__riscv.ads, libgnarl/s-linux__sparc.ads,
+       libgnarl/s-linux__x32.ads: Rename SIGLTHRRES, SIGLTHRCAN and
+       SIGLTHRDBG to SIG32, SIG33 and SIG34 as their names are
+       implementation specific.
+       * libgnarl/s-osinte__linux.ads, libgnarl/s-linux.ads: Add
+       SIGSYS.  Move SIG32, SIG33 and SIG34 from the unmasked list to
+       the reserved list.
+
 2018-11-14  Eric Botcazou  <ebotcazou@adacore.com>
 
        * exp_aggr.adb (Is_Static_Element): New predicate extracted
index 7e4b51ae3d5b6c055b37ead597297c06879e8cf3..b9d23ae47a1e773e169ae758d88de4c012216e71 100644 (file)
@@ -160,4 +160,7 @@ package Ada.Interrupts.Names is
    SIGPWR : constant Interrupt_ID :=
      System.OS_Interface.SIGPWR;        --  Power failure
 
+   SIGSYS : constant Interrupt_ID :=
+     System.OS_Interface.SIGSYS;       --  bad system call
+
 end Ada.Interrupts.Names;
index d86343621ee68e50ae7be0f1c9e0f8288b5d29c8..5d5776232f4192d73466075a010cd588f5b4db33 100644 (file)
@@ -86,34 +86,35 @@ package System.Linux is
    SIGFPE     : constant := 8; --  floating point exception
    SIGKILL    : constant := 9; --  kill (cannot be caught or ignored)
    SIGBUS     : constant := 7; --  bus error
+   SIGUSR1    : constant := 10; --  user defined signal 1
    SIGSEGV    : constant := 11; --  segmentation violation
+   SIGUSR2    : constant := 12; --  user defined signal 2
    SIGPIPE    : constant := 13; --  write on a pipe with no one to read it
    SIGALRM    : constant := 14; --  alarm clock
    SIGTERM    : constant := 15; --  software termination signal from kill
-   SIGUSR1    : constant := 10; --  user defined signal 1
-   SIGUSR2    : constant := 12; --  user defined signal 2
+   SIGSTKFLT  : constant := 16; --  coprocessor stack fault (Linux)
    SIGCLD     : constant := 17; --  alias for SIGCHLD
    SIGCHLD    : constant := 17; --  child status change
-   SIGPWR     : constant := 30; --  power-fail restart
-   SIGWINCH   : constant := 28; --  window size change
-   SIGURG     : constant := 23; --  urgent condition on IO channel
-   SIGPOLL    : constant := 29; --  pollable event occurred
-   SIGIO      : constant := 29; --  I/O now possible (4.2 BSD)
-   SIGLOST    : constant := 29; --  File lock lost
    SIGSTOP    : constant := 19; --  stop (cannot be caught or ignored)
    SIGTSTP    : constant := 20; --  user stop requested from tty
    SIGCONT    : constant := 18; --  stopped process has been continued
    SIGTTIN    : constant := 21; --  background tty read attempted
    SIGTTOU    : constant := 22; --  background tty write attempted
-   SIGVTALRM  : constant := 26; --  virtual timer expired
-   SIGPROF    : constant := 27; --  profiling timer expired
+   SIGURG     : constant := 23; --  urgent condition on IO channel
    SIGXCPU    : constant := 24; --  CPU time limit exceeded
    SIGXFSZ    : constant := 25; --  filesize limit exceeded
-   SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
-   SIGSTKFLT  : constant := 16; --  coprocessor stack fault (Linux)
-   SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
-   SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
-   SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
+   SIGVTALRM  : constant := 26; --  virtual timer expired
+   SIGPROF    : constant := 27; --  profiling timer expired
+   SIGWINCH   : constant := 28; --  window size change
+   SIGPOLL    : constant := 29; --  pollable event occurred
+   SIGIO      : constant := 29; --  I/O now possible (4.2 BSD)
+   SIGLOST    : constant := 29; --  File lock lost
+   SIGPWR     : constant := 30; --  power-fail restart
+   SIGSYS     : constant := 31; --  bad system call
+   SIGUNUSED  : constant := 31; --  unused signal (mapped to SIGSYS)
+   SIG32      : constant := 32; --  glibc internal signal
+   SIG33      : constant := 33; --  glibc internal signal
+   SIG34      : constant := 34; --  glibc internal signal
 
    --  struct_sigaction offsets
 
index a5cd830da11d6994194062be74d3a4ff9aadfba5..96602ca7dc1a852a879b2ab40b9ef4eee70c2be2 100644 (file)
@@ -109,9 +109,9 @@ package System.Linux is
    SIGUSR1    : constant := 30; --  user defined signal 1
    SIGUSR2    : constant := 31; --  user defined signal 2
 
-   SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
-   SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
-   SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
+   SIG32      : constant := 32; --  glibc internal signal
+   SIG33      : constant := 33; --  glibc internal signal
+   SIG34      : constant := 34; --  glibc internal signal
 
    SIGADAABORT : constant := SIGABRT;
    --  Change this if you want to use another signal for task abort.
index cd9df836b1d9bf9cef96386ecf8ae2f5b4b6b628..5457d83c0778546bee0ef2e4ec5e9cedcf3f76dd 100644 (file)
@@ -111,9 +111,9 @@ package System.Linux is
    SIGXFSZ    : constant := 25; --  filesize limit exceeded
    SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
    SIGSTKFLT  : constant := 16; --  coprocessor stack fault (Linux)
-   SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
-   SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
-   SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
+   SIG32      : constant := 32; --  glibc internal signal
+   SIG33      : constant := 33; --  glibc internal signal
+   SIG34      : constant := 34; --  glibc internal signal
 
    --  struct_sigaction offsets
 
index 59441f580e8479c84ce217bb9ba5c00ec63d99a3..ec5c5736b823493819f226a3f18879de93a22542 100644 (file)
@@ -113,9 +113,9 @@ package System.Linux is
    SIGXCPU    : constant := 33; --  CPU time limit exceeded
    SIGXFSZ    : constant := 34; --  filesize limit exceeded
    SIGSTKFLT  : constant := 36; --  coprocessor stack fault (Linux)
-   SIGLTHRRES : constant := 37; --  GNU/LinuxThreads restart signal
-   SIGLTHRCAN : constant := 38; --  GNU/LinuxThreads cancel signal
-   SIGLTHRDBG : constant := 39; --  GNU/LinuxThreads debugger signal
+   SIG32      : constant := 37; --  glibc internal signal
+   SIG33      : constant := 38; --  glibc internal signal
+   SIG34      : constant := 39; --  glibc internal signal
 
    --  struct_sigaction offsets
 
index 3e507e0ec6c2ce8db8c9b60c7abcf5472a208fec..6130b6e935babbe5201dd443757169a00af60e82 100644 (file)
@@ -111,9 +111,9 @@ package System.Linux is
    SIGXCPU    : constant := 30; --  CPU time limit exceeded
    SIGXFSZ    : constant := 31; --  filesize limit exceeded
 
-   SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
-   SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
-   SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
+   SIG32      : constant := 32; --  glibc internal signal
+   SIG33      : constant := 33; --  glibc internal signal
+   SIG34      : constant := 34; --  glibc internal signal
 
    --  These don't exist for Linux/MIPS.  The constants are present
    --  so that we can continue to use a-intnam-linux.ads.
index 74420f39f1b84c62921e0763d901da57d05d4c0e..77543d8a5a2182c424f27930bf9f042441ce0e1f 100644 (file)
@@ -110,10 +110,9 @@ package System.Linux is
    SIGIO      : constant := 29; --  I/O now possible (4.2 BSD)
    SIGPWR     : constant := 30; --  power-fail restart
    SIGSYS     : constant := 31; --  bad system call
-
-   SIGLTHRRES : constant := 0; --  GNU/LinuxThreads restart signal
-   SIGLTHRCAN : constant := 0; --  GNU/LinuxThreads cancel signal
-   SIGLTHRDBG : constant := 0; --  GNU/LinuxThreads debugger signal
+   SIG32      : constant := 32; --  glibc internal signal
+   SIG33      : constant := 33; --  glibc internal signal
+   SIG34      : constant := 34; --  glibc internal signal
 
    --  These don't exist for Linux/RISC-V.  The constants are present
    --  so that we can continue to use a-intnam-linux.ads.
index 79a88d832bcd7439f5093d934bc8e4023b2ee765..3b0a9cb7fe008f2d44affc3f258f118fb3e6dfbd 100644 (file)
@@ -112,9 +112,9 @@ package System.Linux is
    SIGUSR1    : constant := 30; --  user defined signal 1
    SIGUSR2    : constant := 31; --  user defined signal 2
 
-   SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
-   SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
-   SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
+   SIG32      : constant := 32; --  glibc internal signal
+   SIG33      : constant := 33; --  glibc internal signal
+   SIG34      : constant := 34; --  glibc internal signal
 
    SIGUNUSED  : constant := 0;
    SIGSTKFLT  : constant := 0;
index a831623de22435fead9e26379697e5d90d6583ae..ea57a604018e217267c143c8e21ce371c4accd12 100644 (file)
@@ -111,9 +111,9 @@ package System.Linux is
    SIGXFSZ    : constant := 25; --  filesize limit exceeded
    SIGUNUSED  : constant := 31; --  unused signal (GNU/Linux)
    SIGSTKFLT  : constant := 16; --  coprocessor stack fault (Linux)
-   SIGLTHRRES : constant := 32; --  GNU/LinuxThreads restart signal
-   SIGLTHRCAN : constant := 33; --  GNU/LinuxThreads cancel signal
-   SIGLTHRDBG : constant := 34; --  GNU/LinuxThreads debugger signal
+   SIG32      : constant := 32; --  glibc internal signal
+   SIG33      : constant := 33; --  glibc internal signal
+   SIG34      : constant := 34; --  glibc internal signal
 
    --  struct_sigaction offsets
 
index 447f9b59624c4cd4c619bdf5506ae7616a2ba11b..88d68fa4c04e2cfa3655d68e6328af30bbc5d5b8 100644 (file)
@@ -30,7 +30,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This is a GNU/Linux (GNU/LinuxThreads) version of this package
+--  This is a GNU/Linux version of this package
 
 --  This package encapsulates all direct interfaces to OS services
 --  that are needed by the tasking run-time (libgnarl).
@@ -90,37 +90,38 @@ package System.OS_Interface is
    SIGTRAP    : constant := System.Linux.SIGTRAP;
    SIGIOT     : constant := System.Linux.SIGIOT;
    SIGABRT    : constant := System.Linux.SIGABRT;
+   SIGBUS     : constant := System.Linux.SIGBUS;
    SIGFPE     : constant := System.Linux.SIGFPE;
    SIGKILL    : constant := System.Linux.SIGKILL;
-   SIGBUS     : constant := System.Linux.SIGBUS;
+   SIGUSR1    : constant := System.Linux.SIGUSR1;
    SIGSEGV    : constant := System.Linux.SIGSEGV;
+   SIGUSR2    : constant := System.Linux.SIGUSR2;
    SIGPIPE    : constant := System.Linux.SIGPIPE;
    SIGALRM    : constant := System.Linux.SIGALRM;
    SIGTERM    : constant := System.Linux.SIGTERM;
-   SIGUSR1    : constant := System.Linux.SIGUSR1;
-   SIGUSR2    : constant := System.Linux.SIGUSR2;
+   SIGSTKFLT  : constant := System.Linux.SIGSTKFLT;
    SIGCLD     : constant := System.Linux.SIGCLD;
    SIGCHLD    : constant := System.Linux.SIGCHLD;
-   SIGPWR     : constant := System.Linux.SIGPWR;
-   SIGWINCH   : constant := System.Linux.SIGWINCH;
-   SIGURG     : constant := System.Linux.SIGURG;
-   SIGPOLL    : constant := System.Linux.SIGPOLL;
-   SIGIO      : constant := System.Linux.SIGIO;
-   SIGLOST    : constant := System.Linux.SIGLOST;
+   SIGCONT    : constant := System.Linux.SIGCONT;
    SIGSTOP    : constant := System.Linux.SIGSTOP;
    SIGTSTP    : constant := System.Linux.SIGTSTP;
-   SIGCONT    : constant := System.Linux.SIGCONT;
    SIGTTIN    : constant := System.Linux.SIGTTIN;
    SIGTTOU    : constant := System.Linux.SIGTTOU;
-   SIGVTALRM  : constant := System.Linux.SIGVTALRM;
-   SIGPROF    : constant := System.Linux.SIGPROF;
+   SIGURG     : constant := System.Linux.SIGURG;
    SIGXCPU    : constant := System.Linux.SIGXCPU;
    SIGXFSZ    : constant := System.Linux.SIGXFSZ;
+   SIGVTALRM  : constant := System.Linux.SIGVTALRM;
+   SIGPROF    : constant := System.Linux.SIGPROF;
+   SIGWINCH   : constant := System.Linux.SIGWINCH;
+   SIGPOLL    : constant := System.Linux.SIGPOLL;
+   SIGIO      : constant := System.Linux.SIGIO;
+   SIGLOST    : constant := System.Linux.SIGLOST;
+   SIGPWR     : constant := System.Linux.SIGPWR;
+   SIGSYS     : constant := System.Linux.SIGSYS;
    SIGUNUSED  : constant := System.Linux.SIGUNUSED;
-   SIGSTKFLT  : constant := System.Linux.SIGSTKFLT;
-   SIGLTHRRES : constant := System.Linux.SIGLTHRRES;
-   SIGLTHRCAN : constant := System.Linux.SIGLTHRCAN;
-   SIGLTHRDBG : constant := System.Linux.SIGLTHRDBG;
+   SIG32      : constant := System.Linux.SIG32;
+   SIG33      : constant := System.Linux.SIG33;
+   SIG34      : constant := System.Linux.SIG34;
 
    SIGADAABORT : constant := SIGABRT;
    --  Change this to use another signal for task abort. SIGTERM might be a
@@ -142,16 +143,19 @@ package System.OS_Interface is
       SIGPROF,
       --  To avoid confusing the profiler
 
-      SIGKILL, SIGSTOP,
+      SIGKILL, SIGSTOP
       --  These two signals actually can't be masked (POSIX won't allow it)
-
-      SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG);
-      --  These three signals are used by GNU/LinuxThreads starting from glibc
-      --  2.1 (future 2.2).
-
-   Reserved : constant Signal_Set := (SIGVTALRM, SIGUNUSED);
-   --  Not clear why these two signals are reserved. Perhaps they are not
-   --  supported by this version of GNU/Linux ???
+      );
+
+   Reserved : constant Signal_Set := (
+      SIG32, SIG33, SIG34
+      --  glibc POSIX threads implementation uses two (NPTL) or three
+      --  (LinuxThreads) real-time signals for its own use (see SIGNAL(7)).
+      --  These signals are considered reserved and not unmasked as glibc does
+      --  not permit these signals to be used by the public signal.h API.
+      --  While LinuxThreads is mostly likely unused now, SIG34 is still
+      --  reserved as this behavior is consistent with past GNAT releases.
+      );
 
    type sigset_t is private;
 
index b7373c9de8fd8848886c1401fa4f6f04fc350088..f8bb63f01d07f1ee21944a6c15de2308aa23202e 100644 (file)
@@ -1,3 +1,7 @@
+2018-11-14  Patrick Bernardi  <bernardi@adacore.com>
+
+       * gnat.dg/rt_signals.adb: New testcase.
+
 2018-11-14  Hristian Kirtchev  <kirtchev@adacore.com>
 
        * gnat.dg/ghost1.adb, gnat.dg/ghost1.ads: New testcase.
diff --git a/gcc/testsuite/gnat.dg/rt_signals.adb b/gcc/testsuite/gnat.dg/rt_signals.adb
new file mode 100644 (file)
index 0000000..7694a11
--- /dev/null
@@ -0,0 +1,14 @@
+--  { dg-do run }
+
+--  This program used to fail with a runtime built with assertions
+
+procedure RT_Signals is
+   task Task_A;
+
+   task body Task_A is
+   begin
+      null;
+   end Task_A;
+begin
+   null;
+end RT_Signals;