[Ada] QNX: various runtime fixes for file I/O, timers, timezone
authorJerome Lambourg <lambourg@adacore.com>
Thu, 11 Jan 2018 08:53:52 +0000 (08:53 +0000)
committerPierre-Marie de Rodat <pmderodat@gcc.gnu.org>
Thu, 11 Jan 2018 08:53:52 +0000 (08:53 +0000)
2018-01-11  Jerome Lambourg  <lambourg@adacore.com>

gcc/ada/

* libgnat/g-soliop__qnx.ads: New.
* adaint.c, adaint.h, cstreams.c, s-oscons-tmplt.c, sysdep.c: Update
for QNX.

From-SVN: r256512

gcc/ada/ChangeLog
gcc/ada/adaint.c
gcc/ada/adaint.h
gcc/ada/cstreams.c
gcc/ada/libgnat/g-soliop__qnx.ads [new file with mode: 0644]
gcc/ada/s-oscons-tmplt.c
gcc/ada/sysdep.c

index eaad418a5cb968ec87ea4b69c122eb41f063363a..98cff55c25578ce2de3b8fd38b8d6de4c2b7b9d1 100644 (file)
@@ -1,3 +1,9 @@
+2018-01-11  Jerome Lambourg  <lambourg@adacore.com>
+
+       * libgnat/g-soliop__qnx.ads: New.
+       * adaint.c, adaint.h, cstreams.c, s-oscons-tmplt.c, sysdep.c: Update
+       for QNX.
+
 2018-01-11  Bob Duff  <duff@adacore.com>
 
        * par-ch9.adb (P_Protected_Operation_Declaration_Opt): Give an error if
index 19fe957c40815e375852767bd917e1c45661e1a9..3b0aea92c0550dc0e06b1cf15109b69f6330d656 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *          Copyright (C) 1992-2017, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2018, Free Software Foundation, Inc.         *
  *                                                                          *
  * 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- *
 #define __BSD_VISIBLE 1
 #endif
 
+#if defined (__QNX__)
+#define _LARGEFILE64_SOURCE 1
+#endif
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -773,7 +777,7 @@ __gnat_rmdir (char *path)
 }
 
 #if defined (_WIN32) || defined (__linux__) || defined (__sun__) \
-  || defined (__FreeBSD__) || defined(__DragonFly__)
+  || defined (__FreeBSD__) || defined(__DragonFly__) || defined (__QNX__)
 #define HAS_TARGET_WCHAR_T
 #endif
 
@@ -2346,7 +2350,7 @@ __gnat_number_of_cpus (void)
 
 #if defined (__linux__) || defined (__sun__) || defined (_AIX) \
   || defined (__APPLE__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
-  || defined (__DragonFly__) || defined (__NetBSD__)
+  || defined (__DragonFly__) || defined (__NetBSD__) || defined (__QNX__)
   cores = (int) sysconf (_SC_NPROCESSORS_ONLN);
 
 #elif defined (__hpux__)
index 028ffbf297952957b32d25acf43b2427fbc8447f..0d12f7e90209189887ab788c43a543da4c7792bd 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                              C Header File                               *
  *                                                                          *
- *          Copyright (C) 1992-2017, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2018, Free Software Foundation, Inc.         *
  *                                                                          *
  * 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- *
@@ -51,7 +51,7 @@ extern "C" {
    determine at compile time what support the system offers for large files.
    For now we just list the platforms we have manually tested. */
 
-#if defined (__GLIBC__) || defined (__sun__)
+#if defined (__GLIBC__) || defined (__sun__) || defined (__QNX__)
 #define GNAT_FOPEN fopen64
 #define GNAT_OPEN open64
 #define GNAT_STAT stat64
index e4e614744b38898a44b75a3174bf74ddbc3087d8..cdcb531e2b3fadca8df44f60cc9467f0c6abb4e4 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *              Auxiliary C functions for Interfaces.C.Streams              *
  *                                                                          *
- *          Copyright (C) 1992-2017, Free Software Foundation, Inc.         *
+ *          Copyright (C) 1992-2018, Free Software Foundation, Inc.         *
  *                                                                          *
  * 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- *
@@ -198,6 +198,19 @@ __gnat_full_name (char *nam, char *buffer)
      getcwd approach instead. */
   realpath (nam, buffer);
 
+#elif defined (__QNX__)
+
+  int length;
+
+  if (__gnat_is_absolute_path (nam, strlen (nam)))
+    realpath (nam, buffer);
+  else
+    {
+      length = __gnat_max_path_len;
+      __gnat_get_current_dir (buffer, &length);
+      strncat (buffer, nam, __gnat_max_path_len - length - 1);
+    }
+
 #elif defined (__vxworks)
 
   /* On VxWorks systems, an absolute path can be represented (depending on
diff --git a/gcc/ada/libgnat/g-soliop__qnx.ads b/gcc/ada/libgnat/g-soliop__qnx.ads
new file mode 100644 (file)
index 0000000..2904a58
--- /dev/null
@@ -0,0 +1,43 @@
+------------------------------------------------------------------------------
+--                                                                          --
+--                         GNAT COMPILER COMPONENTS                         --
+--                                                                          --
+--          G N A T . S O C K E T S . L I N K E R _ O P T I O N S           --
+--                                                                          --
+--                                 S p e c                                  --
+--                                                                          --
+--                     Copyright (C) 2001-2018, 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 is used to provide target specific linker_options for the
+--  support of sockets as required by the package GNAT.Sockets.
+
+--  This is an empty version for default use where no additional libraries
+--  are required. On some targets a target specific version of this unit
+--  ensures linking with required libraries for proper sockets operation.
+
+--  This package should not be directly with'ed by an application program
+
+package GNAT.Sockets.Linker_Options is
+   pragma Linker_Options ("-lsocket");
+end GNAT.Sockets.Linker_Options;
index 95eadfc8854e55f8f11989eba4402bab0e99f9c5..4d224509caafafa3cb8897bb21fec071978b39c4 100644 (file)
@@ -7,7 +7,7 @@
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 2000-2017, Free Software Foundation, Inc.         --
+--          Copyright (C) 2000-2018, Free Software Foundation, Inc.         --
 --                                                                          --
 -- 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- --
@@ -1443,7 +1443,7 @@ CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock")
 
 #if defined(__linux__) || defined(__FreeBSD__) \
  || (defined(_AIX) && defined(_AIXVERSION_530)) \
- || defined(__DragonFly__)
+ || defined(__DragonFly__) || defined(__QNX__)
 /** On these platforms use system provided monotonic clock instead of
  ** the default CLOCK_REALTIME. We then need to set up cond var attributes
  ** appropriately (see thread.c).
index 698c8ca04f72468cd68663f49e878b1fbb587223..98b3901cb16fcd21c0a6369e314057809111081d 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                          *
  *                          C Implementation File                           *
  *                                                                          *
- *         Copyright (C) 1992-2017, Free Software Foundation, Inc.          *
+ *         Copyright (C) 1992-2018, Free Software Foundation, Inc.          *
  *                                                                          *
  * 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- *
@@ -317,7 +317,8 @@ __gnat_ttyname (int filedes)
   || defined (__MACHTEN__) || defined (__hpux__) || defined (_AIX) \
   || (defined (__svr4__) && defined (__i386__)) || defined (__Lynx__) \
   || defined (__CYGWIN__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
-  || defined (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__)
+  || defined (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__) \
+  || defined (__QNX__)
 
 # ifdef __MINGW32__
 #  if OLD_MINGW
@@ -369,7 +370,8 @@ getc_immediate_common (FILE *stream,
     || defined (__CYGWIN32__) || defined (__MACHTEN__) || defined (__hpux__) \
     || defined (_AIX) || (defined (__svr4__) && defined (__i386__)) \
     || defined (__Lynx__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
-    || defined (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__)
+    || defined (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__) \
+    || defined (__QNX__)
   char c;
   int nread;
   int good_one = 0;
@@ -389,7 +391,8 @@ getc_immediate_common (FILE *stream,
     || defined (__MACHTEN__) || defined (__hpux__) \
     || defined (_AIX) || (defined (__svr4__) && defined (__i386__)) \
     || defined (__Lynx__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
-    || defined (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__)
+    || defined (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__) \
+    || defined (__QNX__)
       eof_ch = termios_rec.c_cc[VEOF];
 
       /* If waiting (i.e. Get_Immediate (Char)), set MIN = 1 and wait for
@@ -826,7 +829,7 @@ __gnat_localtime_tzoff (const time_t *timer ATTRIBUTE_UNUSED,
 
 #elif defined (__APPLE__) || defined (__FreeBSD__) || defined (__linux__) \
   || defined (__GLIBC__) || defined (__DragonFly__) || defined (__OpenBSD__) \
-  || defined (__DJGPP__)
+  || defined (__DJGPP__) || defined (__QNX__)
 {
   localtime_r (timer, &tp);
   *off = tp.tm_gmtoff;