Commit a6fc663e by Arnaud Charlet Committed by Arnaud Charlet

Makefile.rtl, [...]: Introduce a "STANDALONE" mode where C runtime files do not…

Makefile.rtl, [...]: Introduce a "STANDALONE" mode where C runtime files do not have any dependency...

	* Makefile.rtl, expect.c, env.c, aux-io.c, mkdir.c, initialize.c,
	cstreams.c, raise.c, tracebak.c, adadecode.c, init.c, raise-gcc.c,
	argv.c, adaint.c, adaint.h, ctrl_c.c, sysdep.c, rtinit.c, cio.c,
	seh_init.c, exit.c, targext.c: Introduce a "STANDALONE" mode where C
	runtime files do not have any dependency on GCC include files.
	Remove unnecessary includes.
	Remove remaining references to VMS in runtime C file.
	* runtime.h: new File.

From-SVN: r273576
parent b9a01009
2019-07-18 Arnaud Charlet <charlet@adacore.com>
* Makefile.rtl, expect.c, env.c, aux-io.c, mkdir.c, initialize.c,
cstreams.c, raise.c, tracebak.c, adadecode.c, init.c, raise-gcc.c,
argv.c, adaint.c, adaint.h, ctrl_c.c, sysdep.c, rtinit.c, cio.c,
seh_init.c, exit.c, targext.c: Introduce a "STANDALONE" mode where C
runtime files do not have any dependency on GCC include files.
Remove unnecessary includes.
Remove remaining references to VMS in runtime C file.
* runtime.h: new File.
2019-07-13 Andreas Schwab <schwab@linux-m68k.org> 2019-07-13 Andreas Schwab <schwab@linux-m68k.org>
* Makefile.rtl: Use g-sercom__linux.adb for all linuxes. * Makefile.rtl: Use g-sercom__linux.adb for all linuxes.
......
...@@ -2610,7 +2610,7 @@ LIBGNAT_OBJS = adadecode.o adaint.o argv.o aux-io.o \ ...@@ -2610,7 +2610,7 @@ LIBGNAT_OBJS = adadecode.o adaint.o argv.o aux-io.o \
LIBGNAT_SRCS = $(patsubst %.o,%.c,$(LIBGNAT_OBJS)) \ LIBGNAT_SRCS = $(patsubst %.o,%.c,$(LIBGNAT_OBJS)) \
adadecode.h adaint.h env.h gsocket.h raise.h standard.ads.h \ adadecode.h adaint.h env.h gsocket.h raise.h standard.ads.h \
tb-gcc.c libgnarl/thread.c $(EXTRA_LIBGNAT_SRCS) tb-gcc.c runtime.h libgnarl/thread.c $(EXTRA_LIBGNAT_SRCS)
# memtrack.o is special as not put into libgnat. # memtrack.o is special as not put into libgnat.
GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \ GNATRTL_OBJS = $(GNATRTL_NONTASKING_OBJS) $(GNATRTL_TASKING_OBJS) \
......
...@@ -29,15 +29,7 @@ ...@@ -29,15 +29,7 @@
* * * *
****************************************************************************/ ****************************************************************************/
#include "runtime.h"
#if defined(IN_RTS)
#include "tconfig.h"
#include "tsystem.h"
#elif defined(IN_GCC)
#include "config.h"
#include "system.h"
#endif
#include <string.h> #include <string.h>
#include <stdio.h> #include <stdio.h>
#include <ctype.h> #include <ctype.h>
......
...@@ -88,8 +88,26 @@ ...@@ -88,8 +88,26 @@
#endif #endif
#ifdef IN_RTS #ifdef IN_RTS
#ifdef STANDALONE
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
/* for CPU_SET/CPU_ZERO */
#define _GNU_SOURCE
#define __USE_GNU
#include "runtime.h"
#else
#include "tconfig.h" #include "tconfig.h"
#include "tsystem.h" #include "tsystem.h"
#endif
#include <sys/stat.h> #include <sys/stat.h>
#include <fcntl.h> #include <fcntl.h>
#include <time.h> #include <time.h>
......
...@@ -51,7 +51,7 @@ extern "C" { ...@@ -51,7 +51,7 @@ extern "C" {
determine at compile time what support the system offers for large files. determine at compile time what support the system offers for large files.
For now we just list the platforms we have manually tested. */ For now we just list the platforms we have manually tested. */
#if defined (__GLIBC__) || defined (__sun__) || defined (__QNX__) #if (defined (__GLIBC__) && !defined(STANDALONE)) || defined (__sun__) || defined (__QNX__)
#define GNAT_FOPEN fopen64 #define GNAT_FOPEN fopen64
#define GNAT_OPEN open64 #define GNAT_OPEN open64
#define GNAT_STAT stat64 #define GNAT_STAT stat64
......
...@@ -43,9 +43,8 @@ ...@@ -43,9 +43,8 @@
Ada.Command_Line.Environment package. */ Ada.Command_Line.Environment package. */
#ifdef IN_RTS #ifdef IN_RTS
#include "tconfig.h" #include "runtime.h"
#include "tsystem.h" #include <string.h>
#include <sys/stat.h>
#else #else
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
......
...@@ -31,10 +31,7 @@ ...@@ -31,10 +31,7 @@
#include <stdio.h> #include <stdio.h>
#ifdef IN_RTS #ifndef IN_RTS
#include "tconfig.h"
#include "tsystem.h"
#else
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#endif #endif
......
...@@ -30,8 +30,7 @@ ...@@ -30,8 +30,7 @@
****************************************************************************/ ****************************************************************************/
#ifdef IN_RTS #ifdef IN_RTS
#include "tconfig.h" #include "runtime.h"
#include "tsystem.h"
#include <sys/stat.h> #include <sys/stat.h>
#else #else
#include "config.h" #include "config.h"
......
...@@ -53,9 +53,7 @@ ...@@ -53,9 +53,7 @@
#endif #endif
#ifdef IN_RTS #ifdef IN_RTS
#include "tconfig.h" #include <string.h>
#include "tsystem.h"
#include <sys/stat.h>
#else #else
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
......
...@@ -29,11 +29,7 @@ ...@@ -29,11 +29,7 @@
* * * *
****************************************************************************/ ****************************************************************************/
#ifdef IN_RTS #ifndef IN_RTS
#include "tconfig.h"
#include "tsystem.h"
#include <sys/stat.h>
#else
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#endif #endif
......
...@@ -30,15 +30,11 @@ ...@@ -30,15 +30,11 @@
****************************************************************************/ ****************************************************************************/
#ifdef IN_RTS #ifdef IN_RTS
# include "tconfig.h" # include "runtime.h"
# include "tsystem.h" # include <stdio.h>
# include <stdlib.h>
# include <string.h>
# include <sys/stat.h>
# include <fcntl.h>
# include <time.h>
# ifdef VMS
# include <unixio.h>
# endif
/* We don't have libiberty, so use malloc. */ /* We don't have libiberty, so use malloc. */
# define xmalloc(S) malloc (S) # define xmalloc(S) malloc (S)
#else /* IN_RTS */ #else /* IN_RTS */
...@@ -109,89 +105,10 @@ __gnat_getenv (char *name, int *len, char **value) ...@@ -109,89 +105,10 @@ __gnat_getenv (char *name, int *len, char **value)
return; return;
} }
/* VMS specific declarations for set_env_value. */
#ifdef VMS
typedef struct _ile3
{
unsigned short len, code;
__char_ptr32 adr;
__char_ptr32 retlen_adr;
} ile_s;
#endif
void void
__gnat_setenv (char *name, char *value) __gnat_setenv (char *name, char *value)
{ {
#if defined (VMS) #if (defined (__vxworks) && defined (__RTP__)) || defined (__APPLE__)
struct dsc$descriptor_s name_desc;
$DESCRIPTOR (table_desc, "LNM$PROCESS");
char *host_pathspec = value;
char *copy_pathspec;
int num_dirs_in_pathspec = 1;
char *ptr;
long status;
name_desc.dsc$w_length = strlen (name);
name_desc.dsc$b_dtype = DSC$K_DTYPE_T;
name_desc.dsc$b_class = DSC$K_CLASS_S;
name_desc.dsc$a_pointer = name; /* ??? Danger, not 64bit safe. */
if (*host_pathspec == 0)
/* deassign */
{
status = LIB$DELETE_LOGICAL (&name_desc, &table_desc);
/* no need to check status; if the logical name is not
defined, that's fine. */
return;
}
ptr = host_pathspec;
while (*ptr++)
if (*ptr == ',')
num_dirs_in_pathspec++;
{
int i, status;
/* Alloca is guaranteed to be 32bit. */
ile_s *ile_array = alloca (sizeof (ile_s) * (num_dirs_in_pathspec + 1));
char *copy_pathspec = alloca (strlen (host_pathspec) + 1);
char *curr, *next;
strcpy (copy_pathspec, host_pathspec);
curr = copy_pathspec;
for (i = 0; i < num_dirs_in_pathspec; i++)
{
next = strchr (curr, ',');
if (next == 0)
next = strchr (curr, 0);
*next = 0;
ile_array[i].len = strlen (curr);
/* Code 2 from lnmdef.h means it's a string. */
ile_array[i].code = 2;
ile_array[i].adr = curr;
/* retlen_adr is ignored. */
ile_array[i].retlen_adr = 0;
curr = next + 1;
}
/* Terminating item must be zero. */
ile_array[i].len = 0;
ile_array[i].code = 0;
ile_array[i].adr = 0;
ile_array[i].retlen_adr = 0;
status = LIB$SET_LOGICAL (&name_desc, 0, &table_desc, 0, ile_array);
if ((status & 1) != 1)
LIB$SIGNAL (status);
}
#elif (defined (__vxworks) && defined (__RTP__)) || defined (__APPLE__)
setenv (name, value, 1); setenv (name, value, 1);
#else #else
...@@ -213,10 +130,7 @@ __gnat_setenv (char *name, char *value) ...@@ -213,10 +130,7 @@ __gnat_setenv (char *name, char *value)
char ** char **
__gnat_environ (void) __gnat_environ (void)
{ {
#if defined (VMS) || defined (RTX) #if defined (__MINGW32__)
/* Not implemented */
return NULL;
#elif defined (__MINGW32__)
return _environ; return _environ;
#elif defined (__sun__) #elif defined (__sun__)
extern char **_environ; extern char **_environ;
...@@ -247,10 +161,7 @@ __gnat_environ (void) ...@@ -247,10 +161,7 @@ __gnat_environ (void)
void __gnat_unsetenv (char *name) void __gnat_unsetenv (char *name)
{ {
#if defined (VMS) #if defined (__hpux__) || defined (__sun__) \
/* Not implemented */
return;
#elif defined (__hpux__) || defined (__sun__) \
|| (defined (__vxworks) && ! defined (__RTP__)) \ || (defined (__vxworks) && ! defined (__RTP__)) \
|| defined (_AIX) || defined (__Lynx__) || defined (_AIX) || defined (__Lynx__)
...@@ -306,10 +217,7 @@ void __gnat_unsetenv (char *name) ...@@ -306,10 +217,7 @@ void __gnat_unsetenv (char *name)
void __gnat_clearenv (void) void __gnat_clearenv (void)
{ {
#if defined (VMS) #if defined (__sun__) \
/* not implemented */
return;
#elif defined (__sun__) \
|| (defined (__vxworks) && ! defined (__RTP__)) || defined (__Lynx__) \ || (defined (__vxworks) && ! defined (__RTP__)) || defined (__Lynx__) \
|| defined (__PikeOS__) || defined (__PikeOS__)
/* On Solaris, VxWorks (not RTPs), and Lynx there is no system /* On Solaris, VxWorks (not RTPs), and Lynx there is no system
......
...@@ -29,21 +29,6 @@ ...@@ -29,21 +29,6 @@
* * * *
****************************************************************************/ ****************************************************************************/
#ifdef __alpha_vxworks
#include "vxWorks.h"
#endif
#ifdef IN_RTS
#include "tconfig.h"
#include "tsystem.h"
#include <sys/stat.h>
#else
#include "config.h"
#include "system.h"
#endif
#include "adaint.h"
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
......
...@@ -29,14 +29,11 @@ ...@@ -29,14 +29,11 @@
* * * *
****************************************************************************/ ****************************************************************************/
#ifdef __alpha_vxworks
#include "vxWorks.h"
#endif
#ifdef IN_RTS #ifdef IN_RTS
#define POSIX #define POSIX
#include "tconfig.h" #include "runtime.h"
#include "tsystem.h" #include <unistd.h>
#else #else
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
......
...@@ -54,8 +54,14 @@ ...@@ -54,8 +54,14 @@
#endif #endif
#ifdef IN_RTS #ifdef IN_RTS
#ifdef STANDALONE
#include "runtime.h"
#else
#include "tconfig.h" #include "tconfig.h"
#include "tsystem.h" #include "tsystem.h"
#endif
#include <sys/stat.h> #include <sys/stat.h>
/* We don't have libiberty, so use malloc. */ /* We don't have libiberty, so use malloc. */
...@@ -463,6 +469,7 @@ void fake_linux_sigemptyset (sigset_t *set) ...@@ -463,6 +469,7 @@ void fake_linux_sigemptyset (sigset_t *set)
void void
__gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext) __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
{ {
#ifndef STANDALONE
mcontext_t *mcontext = &((ucontext_t *) ucontext)->uc_mcontext; mcontext_t *mcontext = &((ucontext_t *) ucontext)->uc_mcontext;
/* On the i386 and x86-64 architectures, stack checking is performed by /* On the i386 and x86-64 architectures, stack checking is performed by
...@@ -513,6 +520,7 @@ __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext) ...@@ -513,6 +520,7 @@ __gnat_adjust_context_for_raise (int signo ATTRIBUTE_UNUSED, void *ucontext)
mcontext->arm_pc+=1; mcontext->arm_pc+=1;
#endif #endif
#endif #endif
#endif
} }
#endif #endif
......
...@@ -41,8 +41,7 @@ ...@@ -41,8 +41,7 @@
#endif #endif
#ifdef IN_RTS #ifdef IN_RTS
#include "tconfig.h" #include "runtime.h"
#include "tsystem.h"
/* We don't have libiberty, so use malloc. */ /* We don't have libiberty, so use malloc. */
#define xmalloc(S) malloc (S) #define xmalloc(S) malloc (S)
#define xrealloc(V,S) realloc (V,S) #define xrealloc(V,S) realloc (V,S)
......
...@@ -35,8 +35,7 @@ ...@@ -35,8 +35,7 @@
#endif /* __vxworks */ #endif /* __vxworks */
#ifdef IN_RTS #ifdef IN_RTS
#include "tconfig.h" #include "runtime.h"
#include "tsystem.h"
#include <sys/stat.h> #include <sys/stat.h>
#else #else
#include "config.h" #include "config.h"
......
...@@ -39,11 +39,11 @@ ...@@ -39,11 +39,11 @@
/* Don't use fancy_abort. */ /* Don't use fancy_abort. */
# undef abort # undef abort
#else #else
# ifndef CERT # if !defined(CERT) && !defined(STANDALONE)
# include "tconfig.h" # include "tconfig.h"
# include "tsystem.h" # include "tsystem.h"
# else # else
# define ATTRIBUTE_UNUSED __attribute__((unused)) # include "runtime.h"
# define HAVE_GETIPINFO 1 # define HAVE_GETIPINFO 1
# endif # endif
#endif #endif
...@@ -115,6 +115,10 @@ extern void __gnat_unhandled_except_handler (_Unwind_Exception *); ...@@ -115,6 +115,10 @@ extern void __gnat_unhandled_except_handler (_Unwind_Exception *);
/* Called in case of error during propagation. */ /* Called in case of error during propagation. */
extern void __gnat_raise_abort (void) __attribute__ ((noreturn)); extern void __gnat_raise_abort (void) __attribute__ ((noreturn));
#define abort() __gnat_raise_abort() #define abort() __gnat_raise_abort()
#elif defined(STANDALONE)
#include <stdlib.h>
#define inhibit_libc
#endif #endif
#include "unwind-pe.h" #include "unwind-pe.h"
......
...@@ -33,8 +33,7 @@ ...@@ -33,8 +33,7 @@
is shared between all exception handling mechanisms. */ is shared between all exception handling mechanisms. */
#ifdef IN_RTS #ifdef IN_RTS
#include "tconfig.h" #include "runtime.h"
#include "tsystem.h"
#else #else
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
...@@ -56,16 +55,6 @@ extern "C" { ...@@ -56,16 +55,6 @@ extern "C" {
void void
__gnat_unhandled_terminate (void) __gnat_unhandled_terminate (void)
{ {
#ifdef VMS
/* Special termination handling for VMS */
long prvhnd;
/* Remove the exception vector so it won't intercept any errors
in the call to exit, and go into and endless loop */
SYS$SETEXV (1, 0, 3, &prvhnd);
#endif
/* Default termination handling */ /* Default termination handling */
__gnat_os_exit (1); __gnat_os_exit (1);
} }
......
...@@ -41,8 +41,6 @@ ...@@ -41,8 +41,6 @@
#endif #endif
#ifdef IN_RTS #ifdef IN_RTS
#include "tconfig.h"
#include "tsystem.h"
/* We don't have libiberty, so use malloc. */ /* We don't have libiberty, so use malloc. */
#define xmalloc(S) malloc (S) #define xmalloc(S) malloc (S)
#define xrealloc(V,S) realloc (V,S) #define xrealloc(V,S) realloc (V,S)
......
/****************************************************************************
* *
* GNAT COMPILER COMPONENTS *
* *
* RUNTIME *
* *
* C Header File *
* *
* Copyright (C) 2019, 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- *
* 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 file provides common definitions used by GNAT C runtime files. */
#ifdef __vxworks
#include "vxWorks.h"
#endif /* __vxworks */
#ifndef ATTRIBUTE_UNUSED
#define ATTRIBUTE_UNUSED __attribute__((unused))
#endif
#ifndef ATTRIBUTE_NORETURN
#define ATTRIBUTE_NORETURN __attribute__((noreturn))
#endif
...@@ -39,8 +39,8 @@ ...@@ -39,8 +39,8 @@
#endif #endif
#ifdef IN_RTS #ifdef IN_RTS
#include "tconfig.h"
#include "tsystem.h" #include "runtime.h"
/* We don't have libiberty, so use malloc. */ /* We don't have libiberty, so use malloc. */
#define xmalloc(S) malloc (S) #define xmalloc(S) malloc (S)
......
...@@ -54,8 +54,10 @@ ...@@ -54,8 +54,10 @@
#ifdef IN_RTS #ifdef IN_RTS
#define POSIX #define POSIX
#include "tconfig.h" #include "runtime.h"
#include "tsystem.h" #include <string.h>
#include <unistd.h>
#include <fcntl.h> #include <fcntl.h>
#include <sys/stat.h> #include <sys/stat.h>
#else #else
......
...@@ -36,14 +36,21 @@ ...@@ -36,14 +36,21 @@
the file must be compiled with IN_GCC defined, even for the library. */ the file must be compiled with IN_GCC defined, even for the library. */
#ifdef IN_RTS #ifdef IN_RTS
#ifndef STANDALONE
#include "tconfig.h" #include "tconfig.h"
#include "tsystem.h" #include "tsystem.h"
#endif
#else #else
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#endif #endif
#ifndef STANDALONE
#include "coretypes.h" #include "coretypes.h"
#include "tm.h" #include "tm.h"
#endif
#ifndef TARGET_OBJECT_SUFFIX #ifndef TARGET_OBJECT_SUFFIX
#define TARGET_OBJECT_SUFFIX ".o" #define TARGET_OBJECT_SUFFIX ".o"
......
...@@ -50,14 +50,10 @@ ...@@ -50,14 +50,10 @@
extern "C" { extern "C" {
#endif #endif
#ifdef __alpha_vxworks
#include "vxWorks.h"
#endif
#ifdef IN_RTS #ifdef IN_RTS
#define POSIX #define POSIX
#include "tconfig.h" #include "runtime.h"
#include "tsystem.h" #include <stddef.h>
#else #else
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment