From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 82144 invoked by alias); 30 Jul 2016 05:45:50 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 82110 invoked by uid 89); 30 Jul 2016 05:45:49 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-0.1 required=5.0 tests=AWL,BAYES_50,RCVD_IN_DNSWL_LOW,SPF_NEUTRAL autolearn=ham version=3.3.2 spammy=2016-07-30, (unknown), sk:ATTRIBU, Saving X-HELO: julia1.inet.fi Received: from mta-out1.inet.fi (HELO julia1.inet.fi) (62.71.2.232) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 30 Jul 2016 05:45:40 +0000 Received: from ap.localhost.localdomain (80.223.182.110) by julia1.inet.fi (9.0.002.03-2-gbe5d057) (authenticated as pavean-2) id 5782991C007A6889; Sat, 30 Jul 2016 08:44:47 +0300 From: Andris Pavenis Subject: [PATCH 2/4][Ada,DJGPP] Ada support for DJGPP To: GCC Patches Cc: DJ Delorie Message-ID: <2d4dc1ad-30d6-bb43-fd44-2ae9d7f32bef@iki.fi> Date: Sat, 30 Jul 2016 05:45:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.1.1 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------E1D5518D19F244EE1F1BD295" X-SW-Source: 2016-07/txt/msg02006.txt.bz2 This is a multi-part message in MIME format. --------------E1D5518D19F244EE1F1BD295 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Content-length: 737 This patch (2nd of 4) includes various changes to Ada related C files required for DJGPP support ChangeLog entry: 2016-07-30 Andris Pavenis * 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 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 --------------E1D5518D19F244EE1F1BD295 Content-Type: text/x-patch; name="0002-DJGPP-Ada-DJGPP-support.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0002-DJGPP-Ada-DJGPP-support.patch" Content-length: 5597 >From 935f11dbb31a46358a5927ad41cc6877683c13aa Mon Sep 17 00:00:00 2001 From: Andris Pavenis 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 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 +#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 --------------E1D5518D19F244EE1F1BD295--