This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH 2/4][Ada,DJGPP] Ada support for DJGPP
- From: Andris Pavenis <andris dot pavenis at iki dot fi>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: DJ Delorie <dj at delorie dot com>
- Date: Sat, 30 Jul 2016 08:45:33 +0300
- Subject: [PATCH 2/4][Ada,DJGPP] Ada support for DJGPP
- Authentication-results: sourceware.org; auth=none
This patch (2nd of 4) includes various changes to Ada related C files required for DJGPP support
ChangeLog entry:
2016-07-30 Andris Pavenis <andris.pavenis@iki.fi>
* ada/ctrl_c.c: Do not use macro SA_RESTART for DJGPP.
* ada/gsocket.h: Do not support sockets for DJGPP.
* ada/init.c (timestruct_t): Define for DJGPP.
(nanosleep): Implement for DJGPP using usleep().
(__gnat_install_handler): Implememt for DJGPP
* ada/sysdep.c: Include <io.h> for DJGPP
(_setmode): Define to setmode for DJGPP
(__gnat_set_mode): Add implementation for DJGPP
(__gnat_localtime_tzoff): Add implementation for DJGPP
* ada/terminals.c: Add DJGPP to list of unsupported platforms.
Andris
>From 935f11dbb31a46358a5927ad41cc6877683c13aa Mon Sep 17 00:00:00 2001
From: Andris Pavenis <andris.pavenis@iki.fi>
Date: Mon, 25 Jul 2016 19:37:55 +0300
Subject: [PATCH 2/4] [DJGPP, Ada] DJGPP support
* ada/ctrl_c.c: Do not use macro SA_RESTART for DJGPP.
* ada/gsocket.h: Do not support sockets for DJGPP.
* ada/init.c (timestruct_t): Define for DJGPP.
(nanosleep): Implement for DJGPP using usleep().
(__gnat_install_handler): Implememt for DJGPP
* ada/sysdep.c: Include <io.h> for DJGPP
(_setmode): Define to setmode for DJGPP
(__gnat_set_mode): Add implementation for DJGPP
(__gnat_localtime_tzoff): Add implementation for DJGPP
* ada/terminals.c: Add DJGPP to list of unsupported platforms.
---
gcc/ada/ctrl_c.c | 4 ++--
gcc/ada/gsocket.h | 2 +-
gcc/ada/init.c | 25 ++++++++++++++++++++++++
gcc/ada/sysdep.c | 56 +++++++++++++++++++++++++++++++++++++++++++++++++++--
gcc/ada/terminals.c | 2 +-
5 files changed, 83 insertions(+), 6 deletions(-)
diff --git a/gcc/ada/ctrl_c.c b/gcc/ada/ctrl_c.c
index 7f8d177..d4fc551 100644
--- a/gcc/ada/ctrl_c.c
+++ b/gcc/ada/ctrl_c.c
@@ -92,8 +92,8 @@ __gnat_install_int_handler (void (*proc) (void))
if (sigint_intercepted == 0)
{
act.sa_handler = __gnat_int_handler;
-#if defined (__Lynx__) || defined (VMS)
- /* LynxOS and VMS do not support SA_RESTART. */
+#if defined (__Lynx__) || defined (VMS) || defined(__DJGPP__)
+ /* LynxOS, VMS or DJGPP do not support SA_RESTART. */
act.sa_flags = 0;
#else
act.sa_flags = SA_RESTART;
diff --git a/gcc/ada/gsocket.h b/gcc/ada/gsocket.h
index 31a3ccf..a979d3a 100644
--- a/gcc/ada/gsocket.h
+++ b/gcc/ada/gsocket.h
@@ -29,7 +29,7 @@
* *
****************************************************************************/
-#if defined(VTHREADS) || defined(__PikeOS__)
+#if defined(VTHREADS) || defined(__PikeOS__) || defined(__DJGPP__)
/* Sockets not supported on these platforms. */
#undef HAVE_SOCKETS
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 6d51896..eed212c 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -2516,6 +2516,31 @@ __gnat_install_handler (void)
__gnat_handler_installed = 1;
}
+#elif defined (__DJGPP__)
+
+struct timestruc_t
+{
+ time_t tv_sec;
+ long tv_nsec;
+};
+
+int
+nanosleep (struct timestruc_t *Rqtp, struct timestruc_t *Rmtp);
+
+int
+nanosleep (struct timestruc_t *Rqtp, struct timestruc_t *Rmtp)
+{
+ usleep (1000000*Rqtp->tv_sec+Rqtp->tv_nsec/1000);
+ if (Rmtp) { Rmtp->tv_sec = Rmtp->tv_nsec=0; }
+ return 0;
+}
+
+void
+__gnat_install_handler ()
+{
+ __gnat_handler_installed = 1;
+}
+
#elif defined(__ANDROID__)
/*******************/
diff --git a/gcc/ada/sysdep.c b/gcc/ada/sysdep.c
index 465007e..bfabf30 100644
--- a/gcc/ada/sysdep.c
+++ b/gcc/ada/sysdep.c
@@ -126,7 +126,7 @@ extern struct tm *localtime_r(const time_t *, struct tm *);
*/
-#if defined (WINNT) || defined (__CYGWIN__)
+#if defined (WINNT) || defined (__CYGWIN__) || defined(__DJGPP__)
const char __gnat_text_translation_required = 1;
@@ -137,6 +137,11 @@ const char __gnat_text_translation_required = 1;
#define WIN_SETMODE _setmode
#endif
+#if defined(__DJGPP__)
+#include <io.h>
+#define _setmode setmode
+#endif /* __DJGPP__ */
+
void
__gnat_set_binary_mode (int handle)
{
@@ -149,6 +154,30 @@ __gnat_set_text_mode (int handle)
WIN_SETMODE (handle, O_TEXT);
}
+#ifdef __DJGPP__
+void
+__gnat_set_mode (int handle, int mode)
+{
+ /* the values here must be synchronized with
+ System.File_Control_Block.Content_Encodding:
+
+ None = 0
+ Default_Text = 1
+ Text = 2
+ U8text = 3
+ Wtext = 4
+ U16text = 5 */
+
+ switch (mode) {
+ case 0 : setmode(handle, O_BINARY); break;
+ case 1 : setmode(handle, O_TEXT); break;
+ case 2 : setmode(handle, O_TEXT); break;
+ case 3 : setmode(handle, O_TEXT); break;
+ case 4 : setmode(handle, O_BINARY); break;
+ case 5 : setmode(handle, O_BINARY); break;
+ }
+}
+#else
void
__gnat_set_mode (int handle, int mode)
{
@@ -171,6 +200,7 @@ __gnat_set_mode (int handle, int mode)
case 5 : WIN_SETMODE (handle, _O_U16TEXT); break;
}
}
+#endif
#ifdef __CYGWIN__
@@ -603,7 +633,29 @@ long __gnat_invalid_tzoff = 259273;
/* Definition of __gnat_localtime_r used by a-calend.adb */
-#if defined (__MINGW32__)
+#if defined (__DJGPP__)
+
+/* FIXME: this is draft version only. Fix me if that is not correct */
+/* or not complete (AP) */
+
+extern void
+__gnat_localtime_tzoff (const time_t *, long *);
+
+void
+__gnat_localtime_tzoff (const time_t *timer, long *off)
+{
+ struct tm *tmp;
+
+ tmp = localtime (timer);
+ *off = (long) -tmp->tm_gmtoff;
+
+ /* Correct the offset if Daylight Saving Time is in effect */
+
+ if (tmp->tm_isdst > 0)
+ *off = *off + 3600;
+}
+
+#elif defined (__MINGW32__)
/* Reentrant localtime for Windows. */
diff --git a/gcc/ada/terminals.c b/gcc/ada/terminals.c
index d72eb09..7b14997 100644
--- a/gcc/ada/terminals.c
+++ b/gcc/ada/terminals.c
@@ -32,7 +32,7 @@
/* First all usupported platforms. Add stubs for exported routines. */
#if defined (VMS) || defined (__vxworks) || defined (__Lynx__) \
- || defined (__ANDROID__) || defined (__PikeOS__)
+ || defined (__ANDROID__) || defined (__PikeOS__) || defined(__DJGPP__)
#define ATTRIBUTE_UNUSED __attribute__((unused))
--
2.7.4