[multiple changes]

2003-11-18  Richard Kenner  <kenner@vlsi1.ultra.nyu.edu>

	* ada-tree.def: (ALLOCATE_EXPR): Class is "2", not "s".

	* decl.c (gnat_to_gnu_entity, case E_Floating_Point_Subtype): Set
	TYPE_PRECISION directly from esize.

2003-11-18  Thomas Quinot  <quinot@act-europe.fr>

	* cstreams.c:
	Use realpath(3) on FreeBSD. Fix typo in comment while we are at it.

	* init.c: Initialization routines for FreeBSD

	* link.c: Link info for FreeBSD

	* sysdep.c: Add the case of FreeBSD

From-SVN: r73700
This commit is contained in:
Arnaud Charlet 2003-11-18 11:00:43 +01:00
parent beb0c2e0ca
commit 0d77ab84bb
7 changed files with 117 additions and 16 deletions

View File

@ -1,3 +1,21 @@
2003-11-18 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* ada-tree.def: (ALLOCATE_EXPR): Class is "2", not "s".
* decl.c (gnat_to_gnu_entity, case E_Floating_Point_Subtype): Set
TYPE_PRECISION directly from esize.
2003-11-18 Thomas Quinot <quinot@act-europe.fr>
* cstreams.c:
Use realpath(3) on FreeBSD. Fix typo in comment while we are at it.
* init.c: Initialization routines for FreeBSD
* link.c: Link info for FreeBSD
* sysdep.c: Add the case of FreeBSD
2003-11-17 Jerome Guitton <guitton@act-europe.fr>
* 5zthrini.adb: Remove the call to Init_RTS at elaboration, as it is

View File

@ -37,7 +37,7 @@ DEFTREECODE (TRANSFORM_EXPR, "transform_expr", 'e', 0)
by operand 0 at the alignment given by operand 1 and return the
address of the resulting memory. */
DEFTREECODE (ALLOCATE_EXPR, "allocate_expr", 's', 2)
DEFTREECODE (ALLOCATE_EXPR, "allocate_expr", '2', 2)
/* A type that is an unconstrained array itself. This node is never passed
to GCC. TREE_TYPE is the type of the fat pointer and TYPE_OBJECT_RECORD_TYPE

View File

@ -175,9 +175,9 @@ __gnat_full_name (char *nam, char *buffer)
#elif defined (MSDOS)
_fixpath (nam, buffer);
#elif defined (sgi)
#elif defined (sgi) || defined (__FreeBSD__)
/* Use realpath function which resolves links and references to .. and ..
/* Use realpath function which resolves links and references to . and ..
on those Unix systems that support it. Note that GNU/Linux provides it but
cannot handle more than 5 symbolic links in a full name, so we use the
getcwd approach instead. */

View File

@ -1357,8 +1357,6 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
}
{
enum machine_mode mode;
if (definition == 0
&& Present (Ancestor_Subtype (gnat_entity))
&& ! In_Extended_Main_Code_Unit (Ancestor_Subtype (gnat_entity))
@ -1367,15 +1365,9 @@ gnat_to_gnu_entity (Entity_Id gnat_entity, tree gnu_expr, int definition)
gnat_to_gnu_entity (Ancestor_Subtype (gnat_entity),
gnu_expr, definition);
for (mode = GET_CLASS_NARROWEST_MODE (MODE_FLOAT);
(GET_MODE_WIDER_MODE (mode) != VOIDmode
&& GET_MODE_BITSIZE (GET_MODE_WIDER_MODE (mode)) <= esize);
mode = GET_MODE_WIDER_MODE (mode))
;
gnu_type = make_node (REAL_TYPE);
TREE_TYPE (gnu_type) = get_unpadded_type (Etype (gnat_entity));
TYPE_PRECISION (gnu_type) = GET_MODE_BITSIZE (mode);
TYPE_PRECISION (gnu_type) = fp_size_to_prec (esize);
TYPE_MIN_VALUE (gnu_type)
= convert (TREE_TYPE (gnu_type),

View File

@ -1456,6 +1456,88 @@ __gnat_initialize(void)
{
}
/*************************************************/
/* __gnat_initialize (FreeBSD version) */
/*************************************************/
#elif defined (__FreeBSD__)
#include <signal.h>
#include <unistd.h>
static void
__gnat_error_handler (sig, code, sc)
int sig;
int code;
struct sigcontext *sc;
{
struct Exception_Data *exception;
char *msg;
switch (sig)
{
case SIGFPE:
exception = &constraint_error;
msg = "SIGFPE";
break;
case SIGILL:
exception = &constraint_error;
msg = "SIGILL";
break;
case SIGSEGV:
exception = &storage_error;
msg = "stack overflow or erroneous memory access";
break;
case SIGBUS:
exception = &constraint_error;
msg = "SIGBUS";
break;
default:
exception = &program_error;
msg = "unhandled signal";
}
Raise_From_Signal_Handler (exception, msg);
}
void
__gnat_install_handler ()
{
struct sigaction act;
/* Set up signal handler to map synchronous signals to appropriate
exceptions. Make sure that the handler isn't interrupted by another
signal that might cause a scheduling event! */
act.sa_handler = __gnat_error_handler;
act.sa_flags = SA_NODEFER | SA_RESTART;
(void) sigemptyset (&act.sa_mask);
(void) sigaction (SIGILL, &act, NULL);
(void) sigaction (SIGFPE, &act, NULL);
(void) sigaction (SIGSEGV, &act, NULL);
(void) sigaction (SIGBUS, &act, NULL);
}
void __gnat_init_float ();
void
__gnat_initialize ()
{
__gnat_install_handler ();
/* XXX - Initialize floating-point coprocessor. This call is
needed because FreeBSD defaults to 64-bit precision instead
of 80-bit precision? We require the full precision for
proper operation, given that we have set Max_Digits etc
with this in mind */
__gnat_init_float ();
}
/***************************************/
/* __gnat_initialize (VXWorks Version) */
/***************************************/
@ -1749,7 +1831,7 @@ __gnat_install_handler (void)
WIN32 and could be used under OS/2 */
#if defined (_WIN32) || defined (__INTERIX) || defined (__EMX__) \
|| defined (__Lynx__) || defined(__NetBSD__)
|| defined (__Lynx__) || defined(__NetBSD__) || defined(__FreeBSD__)
#define HAVE_GNAT_INIT_FLOAT

View File

@ -154,6 +154,15 @@ unsigned char objlist_file_supported = 0;
unsigned char using_gnu_linker = 0;
const char *object_library_extension = ".a";
#elif defined (__FreeBSD__)
char *object_file_option = "";
char *run_path_option = "";
char shared_libgnat_default = SHARED;
int link_max = 2147483647;
unsigned char objlist_file_supported = 0;
unsigned char using_gnu_linker = 0;
char *object_library_extension = ".a";
#elif defined (linux)
const char *object_file_option = "";
const char *run_path_option = "-Wl,-rpath,";

View File

@ -291,7 +291,7 @@ __gnat_ttyname (int filedes)
|| (defined (__osf__) && ! defined (__alpha_vxworks)) || defined (WINNT) \
|| defined (__MACHTEN__) || defined (hpux) || defined (_AIX) \
|| (defined (__svr4__) && defined (i386)) || defined (__Lynx__) \
|| defined (__CYGWIN__)
|| defined (__CYGWIN__) || defined (__FreeBSD__)
#ifdef __MINGW32__
#if OLD_MINGW
@ -348,7 +348,7 @@ getc_immediate_common (FILE *stream,
|| (defined (__osf__) && ! defined (__alpha_vxworks)) \
|| defined (__CYGWIN32__) || defined (__MACHTEN__) || defined (hpux) \
|| defined (_AIX) || (defined (__svr4__) && defined (i386)) \
|| defined (__Lynx__)
|| defined (__Lynx__) || defined (__FreeBSD__)
char c;
int nread;
int good_one = 0;
@ -367,7 +367,7 @@ getc_immediate_common (FILE *stream,
#if defined(linux) || defined (sun) || defined (sgi) || defined (__EMX__) \
|| defined (__osf__) || defined (__MACHTEN__) || defined (hpux) \
|| defined (_AIX) || (defined (__svr4__) && defined (i386)) \
|| defined (__Lynx__)
|| defined (__Lynx__) || defined (__FreeBSD__)
eof_ch = termios_rec.c_cc[VEOF];
/* If waiting (i.e. Get_Immediate (Char)), set MIN = 1 and wait for