configure.ac (*-*-dragonfly*): New configuration.

gnattools/
	* configure.ac (*-*-dragonfly*): New configuration.
	* configure: Regenerate.
gcc/ada/
	* a-intnam-dragonfly.ads: New.
	* s-osinte-dragonfly.adb: Likewise.
	* s-osinte-dragonfly.ads: Likewise.
	* system-dragonfly-x86_64.ads: Likewise.
	* adaint.c: Add BSD macros.
	* cstreams.c: Likewise.
	* gsocket.h: Likewise.
	* link.c: Likewise.
	* socket.c: Likewise.
	* env.c: Add __DragonFly__, remove __FreeBSD__ macro.
	* init.c: Add __DragonFly__, change __gnat_install_handler
	prototype from empty to void.
	* initialize.c: Add __DragonFly__.
	* sysdep.c: Likewise.
	* s-osinte-freebsd.adb: Use __get_errno instead of __error.
	* tracebak.c: Set unwinder for i386 BSD.
	* gcc-interface/Makefile.in: Add x86_64 DragonFly, tweak
	x86_64 FreeBSD and x86 FreeBSD.

From-SVN: r224207
This commit is contained in:
John Marino 2015-06-08 07:27:56 +00:00 committed by Eric Botcazou
parent 1dbb8d2d3d
commit 90af599007
19 changed files with 1022 additions and 30 deletions

View File

@ -1,3 +1,24 @@
2015-06-08 John Marino <gnugcc@marino.st>
* a-intnam-dragonfly.ads: New.
* s-osinte-dragonfly.adb: Likewise.
* s-osinte-dragonfly.ads: Likewise.
* system-dragonfly-x86_64.ads: Likewise.
* adaint.c: Add BSD macros.
* cstreams.c: Likewise.
* gsocket.h: Likewise.
* link.c: Likewise.
* socket.c: Likewise.
* env.c: Add __DragonFly__, remove __FreeBSD__ macro.
* init.c: Add __DragonFly__, change __gnat_install_handler
prototype from empty to void.
* initialize.c: Add __DragonFly__.
* sysdep.c: Likewise.
* s-osinte-freebsd.adb: Use __get_errno instead of __error.
* tracebak.c: Set unwinder for i386 BSD.
* gcc-interface/Makefile.in: Add x86_64 DragonFly, tweak
x86_64 FreeBSD and x86 FreeBSD.
2015-06-06 Eric Botcazou <ebotcazou@adacore.com>
* gcc-interface/utils.c (note_types_used_by_globals): Tweak comment.

View File

@ -0,0 +1,136 @@
------------------------------------------------------------------------------
-- --
-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
-- --
-- A D A . I N T E R R U P T S . N A M E S --
-- --
-- S p e c --
-- --
-- Copyright (C) 1991-2015, Free Software Foundation, Inc. --
-- --
-- GNARL 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/>. --
-- --
-- GNARL was developed by the GNARL team at Florida State University. --
-- Extensive contributions were provided by Ada Core Technologies, Inc. --
-- --
------------------------------------------------------------------------------
-- This is the DragonFly BSD THREADS version of this package
with System.OS_Interface;
package Ada.Interrupts.Names is
-- All identifiers in this unit are implementation defined
pragma Implementation_Defined;
-- Beware that the mapping of names to signals may be many-to-one. There
-- may be aliases. Also, for all signal names that are not supported on
-- the current system the value of the corresponding constant will be zero.
SIGHUP : constant Interrupt_ID :=
System.OS_Interface.SIGHUP; -- hangup
SIGINT : constant Interrupt_ID :=
System.OS_Interface.SIGINT; -- interrupt (rubout)
SIGQUIT : constant Interrupt_ID :=
System.OS_Interface.SIGQUIT; -- quit (ASCD FS)
SIGILL : constant Interrupt_ID :=
System.OS_Interface.SIGILL; -- illegal instruction (not reset)
SIGTRAP : constant Interrupt_ID :=
System.OS_Interface.SIGTRAP; -- trace trap (not reset)
SIGIOT : constant Interrupt_ID :=
System.OS_Interface.SIGIOT; -- IOT instruction
SIGABRT : constant Interrupt_ID := -- used by abort,
System.OS_Interface.SIGABRT; -- replace SIGIOT in the future
SIGFPE : constant Interrupt_ID :=
System.OS_Interface.SIGFPE; -- floating point exception
SIGKILL : constant Interrupt_ID :=
System.OS_Interface.SIGKILL; -- kill (cannot be caught or ignored)
SIGBUS : constant Interrupt_ID :=
System.OS_Interface.SIGBUS; -- bus error
SIGSEGV : constant Interrupt_ID :=
System.OS_Interface.SIGSEGV; -- segmentation violation
SIGPIPE : constant Interrupt_ID := -- write on a pipe with
System.OS_Interface.SIGPIPE; -- no one to read it
SIGALRM : constant Interrupt_ID :=
System.OS_Interface.SIGALRM; -- alarm clock
SIGTERM : constant Interrupt_ID :=
System.OS_Interface.SIGTERM; -- software termination signal from kill
SIGURG : constant Interrupt_ID :=
System.OS_Interface.SIGURG; -- urgent condition on IO channel
SIGSTOP : constant Interrupt_ID :=
System.OS_Interface.SIGSTOP; -- stop (cannot be caught or ignored)
SIGTSTP : constant Interrupt_ID :=
System.OS_Interface.SIGTSTP; -- user stop requested from tty
SIGCONT : constant Interrupt_ID :=
System.OS_Interface.SIGCONT; -- stopped process has been continued
SIGCHLD : constant Interrupt_ID :=
System.OS_Interface.SIGCHLD; -- 4.3BSD's/POSIX name for SIGCLD
SIGCLD : constant Interrupt_ID :=
System.OS_Interface.SIGCLD; -- child status change
SIGTTIN : constant Interrupt_ID :=
System.OS_Interface.SIGTTIN; -- background tty read attempted
SIGTTOU : constant Interrupt_ID :=
System.OS_Interface.SIGTTOU; -- background tty write attempted
SIGIO : constant Interrupt_ID := -- input/output possible,
System.OS_Interface.SIGIO; -- SIGPOLL alias (Solaris)
SIGXCPU : constant Interrupt_ID :=
System.OS_Interface.SIGXCPU; -- CPU time limit exceeded
SIGXFSZ : constant Interrupt_ID :=
System.OS_Interface.SIGXFSZ; -- filesize limit exceeded
SIGVTALRM : constant Interrupt_ID :=
System.OS_Interface.SIGVTALRM; -- virtual timer expired
SIGPROF : constant Interrupt_ID :=
System.OS_Interface.SIGPROF; -- profiling timer expired
SIGWINCH : constant Interrupt_ID :=
System.OS_Interface.SIGWINCH; -- window size change
SIGUSR1 : constant Interrupt_ID :=
System.OS_Interface.SIGUSR1; -- user defined signal 1
SIGUSR2 : constant Interrupt_ID :=
System.OS_Interface.SIGUSR2; -- user defined signal 2
end Ada.Interrupts.Names;

View File

@ -744,7 +744,7 @@ __gnat_rmdir (char *path)
}
#if defined (_WIN32) || defined (__linux__) || defined (__sun__) \
|| defined (__FreeBSD__)
|| defined (__FreeBSD__) || defined(__DragonFly__)
#define HAS_TARGET_WCHAR_T
#endif
@ -982,7 +982,8 @@ __gnat_open_new_temp (char *path, int fmode)
strcpy (path, "GNAT-XXXXXX");
#if (defined (__FreeBSD__) || defined (__NetBSD__) || defined (__OpenBSD__) \
|| defined (__linux__) || defined (__GLIBC__)) && !defined (__vxworks)
|| defined (__linux__) || defined (__GLIBC__)) && !defined (__vxworks) \
|| defined (__DragonFly__)
return mkstemp (path);
#elif defined (__Lynx__)
mktemp (path);
@ -1154,7 +1155,8 @@ __gnat_tmp_name (char *tmp_filename)
}
#elif defined (__linux__) || defined (__FreeBSD__) || defined (__NetBSD__) \
|| defined (__OpenBSD__) || defined (__GLIBC__) || defined (__ANDROID__)
|| defined (__OpenBSD__) || defined (__GLIBC__) || defined (__ANDROID__) \
|| defined (__DragonFly__)
#define MAX_SAFE_PATH 1000
char *tmpdir = getenv ("TMPDIR");
@ -2268,7 +2270,8 @@ __gnat_number_of_cpus (void)
int cores = 1;
#if defined (__linux__) || defined (__sun__) || defined (_AIX) \
|| defined (__APPLE__)
|| defined (__APPLE__) || defined (__FreeBSD__) || defined (__OpenBSD__) \
|| defined (__DragonFly__) || defined (__NetBSD__)
cores = (int) sysconf (_SC_NPROCESSORS_ONLN);
#elif defined (__hpux__)

View File

@ -192,7 +192,7 @@ __gnat_full_name (char *nam, char *buffer)
*p = '\\';
}
#elif defined (__FreeBSD__)
#elif defined (__FreeBSD__) || defined (__DragonFly__) || defined (__OpenBSD__)
/* Use realpath function which resolves links and references to . and ..
on those Unix systems that support it. Note that GNU/Linux provides it but

View File

@ -192,12 +192,9 @@ __gnat_setenv (char *name, char *value)
sprintf (expression, "%s=%s", name, value);
putenv (expression);
#if (defined (__FreeBSD__) && (__FreeBSD__ < 7)) \
|| defined (__MINGW32__) \
||(defined (__vxworks) && ! defined (__RTP__))
/* On some systems like FreeBSD 6.x and earlier, MacOS X and Windows,
putenv is making a copy of the expression string so we can free
it after the call to putenv */
#if defined (__MINGW32__) || (defined (__vxworks) && ! defined (__RTP__))
/* On some systems like MacOS X and Windows, putenv is making a copy of the
expression string so we can free it after the call to putenv */
free (expression);
#endif
#endif
@ -304,7 +301,8 @@ void __gnat_clearenv (void)
}
#elif defined (__MINGW32__) || defined (__FreeBSD__) || defined (__APPLE__) \
|| (defined (__vxworks) && defined (__RTP__)) || defined (__CYGWIN__) \
|| defined (__NetBSD__) || defined (__OpenBSD__) || defined (__rtems__)
|| defined (__NetBSD__) || defined (__OpenBSD__) || defined (__rtems__) \
|| defined (__DragonFly__)
/* On Windows, FreeBSD and MacOS there is no function to clean all the
environment but there is a "clean" way to unset a variable. So go
through the environ table and call __gnat_unsetenv on all entries */

View File

@ -1425,6 +1425,7 @@ ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),)
a-intnam.ads<a-intnam-freebsd.ads \
s-inmaop.adb<s-inmaop-posix.adb \
s-intman.adb<s-intman-posix.adb \
s-mudido.adb<s-mudido-affinity.adb \
s-osinte.adb<s-osinte-freebsd.adb \
s-osinte.ads<s-osinte-freebsd.ads \
s-osprim.adb<s-osprim-posix.adb \
@ -1454,6 +1455,7 @@ ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),)
a-intnam.ads<a-intnam-freebsd.ads \
s-inmaop.adb<s-inmaop-posix.adb \
s-intman.adb<s-intman-posix.adb \
s-mudido.adb<s-mudido-affinity.adb \
s-osinte.adb<s-osinte-freebsd.adb \
s-osinte.ads<s-osinte-freebsd.ads \
s-osprim.adb<s-osprim-posix.adb \
@ -1477,6 +1479,36 @@ ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),)
MISCLIB = -lutil
endif
# x86-64 DragonFly
ifeq ($(strip $(filter-out %86_64 dragonfly%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS = \
a-intnam.ads<a-intnam-dragonfly.ads \
s-inmaop.adb<s-inmaop-posix.adb \
s-intman.adb<s-intman-posix.adb \
s-mudido.adb<s-mudido-affinity.adb \
s-osinte.adb<s-osinte-dragonfly.adb \
s-osinte.ads<s-osinte-dragonfly.ads \
s-osprim.adb<s-osprim-posix.adb \
s-taprop.adb<s-taprop-posix.adb \
s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix.adb \
$(ATOMICS_TARGET_PAIRS) \
$(X86_64_TARGET_PAIRS) \
system.ads<system-dragonfly-x86_64.ads
TOOLS_TARGET_PAIRS = \
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb
GNATLIB_SHARED = gnatlib-shared-dual
EXTRA_GNATRTL_NONTASKING_OBJS=g-sse.o g-ssvety.o
EH_MECHANISM=-gcc
THREADSLIB= -lpthread
GMEM_LIB = gmemlib
LIBRARY_VERSION := $(LIB_VERSION)
MISCLIB = -lutil
endif
# S390 Linux
ifeq ($(strip $(filter-out s390% linux%,$(target_cpu) $(target_os))),)
LIBGNAT_TARGET_PAIRS_COMMON = \

View File

@ -209,7 +209,8 @@
#endif
#if defined (_AIX) || defined (__FreeBSD__) || defined (__hpux__) || \
defined (_WIN32) || defined (__APPLE__) || defined (__ANDROID__)
defined (_WIN32) || defined (__APPLE__) || defined (__ANDROID__) || \
defined (__DragonFly__) || defined (__NetBSD__) || defined (__OpenBSD__)
# define HAVE_THREAD_SAFE_GETxxxBYyyy 1
#elif defined (__linux__) || defined (__GLIBC__) || \
@ -241,7 +242,8 @@
# endif
#endif
#if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__)
#if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__) \
|| defined (__DragonFly__) || defined (__NetBSD__) || defined (__OpenBSD__)
# define Has_Sockaddr_Len 1
#else
# define Has_Sockaddr_Len 0

View File

@ -1628,7 +1628,7 @@ __gnat_is_vms_v7 (void)
/* FreeBSD Section */
/*******************/
#elif defined (__FreeBSD__)
#elif defined (__FreeBSD__) || defined (__DragonFly__)
#include <signal.h>
#include <sys/ucontext.h>
@ -1673,7 +1673,7 @@ __gnat_error_handler (int sig,
}
void
__gnat_install_handler ()
__gnat_install_handler (void)
{
struct sigaction act;
@ -2523,7 +2523,7 @@ __gnat_install_handler (void)
#if defined (_WIN32) || defined (__INTERIX) \
|| defined (__Lynx__) || defined(__NetBSD__) || defined(__FreeBSD__) \
|| defined (__OpenBSD__)
|| defined (__OpenBSD__) || defined (__DragonFly__)
#define HAVE_GNAT_INIT_FLOAT

View File

@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
* Copyright (C) 1992-2014, Free Software Foundation, Inc. *
* Copyright (C) 1992-2015, 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- *
@ -86,7 +86,7 @@ __gnat_initialize (void *eh ATTRIBUTE_UNUSED)
/******************************************/
#elif defined (__Lynx__) || defined (__FreeBSD__) || defined(__NetBSD__) \
|| defined (__OpenBSD__)
|| defined (__OpenBSD__) || defined (__DragonFly__)
void
__gnat_initialize (void *eh ATTRIBUTE_UNUSED)

View File

@ -103,7 +103,8 @@ const char *__gnat_object_library_extension = ".a";
unsigned char __gnat_separate_run_path_options = 0;
const char *__gnat_default_libgcc_subdir = "lib";
#elif defined (__FreeBSD__)
#elif defined (__FreeBSD__) || defined (__DragonFly__) \
|| defined (__NetBSD__) || defined (__OpenBSD__)
const char *__gnat_object_file_option = "-Wl,@";
const char *__gnat_run_path_option = "-Wl,-rpath,";
char __gnat_shared_libgnat_default = STATIC;

View File

@ -0,0 +1,116 @@
------------------------------------------------------------------------------
-- --
-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . O S _ I N T E R F A C E --
-- --
-- B o d y --
-- --
-- Copyright (C) 1991-2015, Free Software Foundation, Inc. --
-- --
-- GNARL 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/>. --
-- --
-- GNARL was developed by the GNARL team at Florida State University. It is --
-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
-- State University (http://www.gnat.com). --
-- --
------------------------------------------------------------------------------
-- This is the DragonFly THREADS version of this package
with Interfaces.C; use Interfaces.C;
package body System.OS_Interface is
-----------
-- Errno --
-----------
function Errno return int is
type int_ptr is access all int;
function internal_errno return int_ptr;
pragma Import (C, internal_errno, "__get_errno");
begin
return (internal_errno.all);
end Errno;
--------------------
-- Get_Stack_Base --
--------------------
function Get_Stack_Base (thread : pthread_t) return Address is
pragma Unreferenced (thread);
begin
return Null_Address;
end Get_Stack_Base;
------------------
-- pthread_init --
------------------
procedure pthread_init is
begin
null;
end pthread_init;
-----------------
-- To_Duration --
-----------------
function To_Duration (TS : timespec) return Duration is
begin
return Duration (TS.ts_sec) + Duration (TS.ts_nsec) / 10#1#E9;
end To_Duration;
------------------------
-- To_Target_Priority --
------------------------
function To_Target_Priority
(Prio : System.Any_Priority) return Interfaces.C.int
is
begin
return Interfaces.C.int (Prio);
end To_Target_Priority;
-----------------
-- To_Timespec --
-----------------
function To_Timespec (D : Duration) return timespec is
S : time_t;
F : Duration;
begin
S := time_t (Long_Long_Integer (D));
F := D - Duration (S);
-- If F has negative value due to a round-up, adjust for positive F
-- value.
if F < 0.0 then
S := S - 1;
F := F + 1.0;
end if;
return timespec'(ts_sec => S,
ts_nsec => long (Long_Long_Integer (F * 10#1#E9)));
end To_Timespec;
end System.OS_Interface;

View File

@ -0,0 +1,653 @@
------------------------------------------------------------------------------
-- --
-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . O S _ I N T E R F A C E --
-- --
-- S p e c --
-- --
-- Copyright (C) 1991-1994, Florida State University --
-- Copyright (C) 1995-2015, 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/>. --
-- --
-- GNARL was developed by the GNARL team at Florida State University. It is --
-- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
-- State University (http://www.gnat.com). --
-- --
------------------------------------------------------------------------------
-- This is the DragonFly BSD PTHREADS version of this package
-- This package encapsulates all direct interfaces to OS services
-- that are needed by the tasking run-time (libgnarl).
-- PLEASE DO NOT add any with-clauses to this package or remove the pragma
-- Preelaborate. This package is designed to be a bottom-level (leaf) package.
with Ada.Unchecked_Conversion;
with Interfaces.C;
package System.OS_Interface is
pragma Preelaborate;
pragma Linker_Options ("-pthread");
subtype int is Interfaces.C.int;
subtype short is Interfaces.C.short;
subtype long is Interfaces.C.long;
subtype unsigned is Interfaces.C.unsigned;
subtype unsigned_short is Interfaces.C.unsigned_short;
subtype unsigned_long is Interfaces.C.unsigned_long;
subtype unsigned_char is Interfaces.C.unsigned_char;
subtype plain_char is Interfaces.C.plain_char;
subtype size_t is Interfaces.C.size_t;
-----------
-- Errno --
-----------
function Errno return int;
pragma Inline (Errno);
EAGAIN : constant := 35;
EINTR : constant := 4;
EINVAL : constant := 22;
ENOMEM : constant := 12;
ETIMEDOUT : constant := 60;
-------------
-- Signals --
-------------
Max_Interrupt : constant := 31;
type Signal is new int range 0 .. Max_Interrupt;
for Signal'Size use int'Size;
SIGHUP : constant := 1; -- hangup
SIGINT : constant := 2; -- interrupt (rubout)
SIGQUIT : constant := 3; -- quit (ASCD FS)
SIGILL : constant := 4; -- illegal instruction (not reset)
SIGTRAP : constant := 5; -- trace trap (not reset)
SIGIOT : constant := 6; -- IOT instruction
SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future
SIGEMT : constant := 7; -- EMT instruction
SIGFPE : constant := 8; -- floating point exception
SIGKILL : constant := 9; -- kill (cannot be caught or ignored)
SIGBUS : constant := 10; -- bus error
SIGSEGV : constant := 11; -- segmentation violation
SIGSYS : constant := 12; -- bad argument to system call
SIGPIPE : constant := 13; -- write on a pipe with no one to read it
SIGALRM : constant := 14; -- alarm clock
SIGTERM : constant := 15; -- software termination signal from kill
SIGURG : constant := 16; -- urgent condition on IO channel
SIGSTOP : constant := 17; -- stop (cannot be caught or ignored)
SIGTSTP : constant := 18; -- user stop requested from tty
SIGCONT : constant := 19; -- stopped process has been continued
SIGCLD : constant := 20; -- alias for SIGCHLD
SIGCHLD : constant := 20; -- child status change
SIGTTIN : constant := 21; -- background tty read attempted
SIGTTOU : constant := 22; -- background tty write attempted
SIGIO : constant := 23; -- I/O possible (Solaris SIGPOLL alias)
SIGXCPU : constant := 24; -- CPU time limit exceeded
SIGXFSZ : constant := 25; -- filesize limit exceeded
SIGVTALRM : constant := 26; -- virtual timer expired
SIGPROF : constant := 27; -- profiling timer expired
SIGWINCH : constant := 28; -- window size change
SIGINFO : constant := 29; -- information request (BSD)
SIGUSR1 : constant := 30; -- user defined signal 1
SIGUSR2 : constant := 31; -- user defined signal 2
SIGADAABORT : constant := SIGABRT;
-- Change this if you want to use another signal for task abort.
-- SIGTERM might be a good one.
type Signal_Set is array (Natural range <>) of Signal;
-- Interrupts that must be unmasked at all times. DragonFlyBSD
-- pthreads will not allow an application to mask out any
-- interrupt needed by the threads library.
Unmasked : constant Signal_Set :=
(SIGTRAP, SIGBUS, SIGTTIN, SIGTTOU, SIGTSTP);
-- DragonFlyBSD will uses SIGPROF for timing. Do not allow a
-- handler to attach to this signal.
Reserved : constant Signal_Set := (0 .. 0 => SIGPROF);
type sigset_t is private;
function sigaddset
(set : access sigset_t;
sig : Signal) return int;
pragma Import (C, sigaddset, "sigaddset");
function sigdelset
(set : access sigset_t;
sig : Signal) return int;
pragma Import (C, sigdelset, "sigdelset");
function sigfillset (set : access sigset_t) return int;
pragma Import (C, sigfillset, "sigfillset");
function sigismember
(set : access sigset_t;
sig : Signal) return int;
pragma Import (C, sigismember, "sigismember");
function sigemptyset (set : access sigset_t) return int;
pragma Import (C, sigemptyset, "sigemptyset");
-- sigcontext is architecture dependent, so define it private
type struct_sigcontext is private;
type old_struct_sigaction is record
sa_handler : System.Address;
sa_mask : sigset_t;
sa_flags : int;
end record;
pragma Convention (C, old_struct_sigaction);
type new_struct_sigaction is record
sa_handler : System.Address;
sa_flags : int;
sa_mask : sigset_t;
end record;
pragma Convention (C, new_struct_sigaction);
subtype struct_sigaction is new_struct_sigaction;
type struct_sigaction_ptr is access all struct_sigaction;
SIG_BLOCK : constant := 1;
SIG_UNBLOCK : constant := 2;
SIG_SETMASK : constant := 3;
SIG_DFL : constant := 0;
SIG_IGN : constant := 1;
SA_SIGINFO : constant := 16#0040#;
SA_ONSTACK : constant := 16#0001#;
function sigaction
(sig : Signal;
act : struct_sigaction_ptr;
oact : struct_sigaction_ptr) return int;
pragma Import (C, sigaction, "sigaction");
----------
-- Time --
----------
Time_Slice_Supported : constant Boolean := True;
-- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
type timespec is private;
function nanosleep (rqtp, rmtp : access timespec) return int;
pragma Import (C, nanosleep, "nanosleep");
type clockid_t is new unsigned_long;
function clock_getres
(clock_id : clockid_t;
res : access timespec) return int;
pragma Import (C, clock_getres, "clock_getres");
function clock_gettime
(clock_id : clockid_t;
tp : access timespec)
return int;
pragma Import (C, clock_gettime, "clock_gettime");
function To_Duration (TS : timespec) return Duration;
pragma Inline (To_Duration);
function To_Timespec (D : Duration) return timespec;
pragma Inline (To_Timespec);
type struct_timezone is record
tz_minuteswest : int;
tz_dsttime : int;
end record;
pragma Convention (C, struct_timezone);
procedure usleep (useconds : unsigned_long);
pragma Import (C, usleep, "usleep");
-------------------------
-- Priority Scheduling --
-------------------------
SCHED_FIFO : constant := 1;
SCHED_OTHER : constant := 2;
SCHED_RR : constant := 3;
function To_Target_Priority
(Prio : System.Any_Priority) return Interfaces.C.int;
-- Maps System.Any_Priority to a POSIX priority
-------------
-- Process --
-------------
type pid_t is private;
function kill (pid : pid_t; sig : Signal) return int;
pragma Import (C, kill, "kill");
function getpid return pid_t;
pragma Import (C, getpid, "getpid");
---------
-- LWP --
---------
function lwp_self return System.Address;
-- lwp_self does not exist on this thread library, revert to pthread_self
-- which is the closest approximation (with getpid). This function is
-- needed to share 7staprop.adb across POSIX-like targets.
pragma Import (C, lwp_self, "pthread_self");
-------------
-- Threads --
-------------
type Thread_Body is access
function (arg : System.Address) return System.Address;
pragma Convention (C, Thread_Body);
function Thread_Body_Access is new
Ada.Unchecked_Conversion (System.Address, Thread_Body);
type pthread_t is private;
subtype Thread_Id is pthread_t;
type pthread_mutex_t is limited private;
type pthread_cond_t is limited private;
type pthread_attr_t is limited private;
type pthread_mutexattr_t is limited private;
type pthread_condattr_t is limited private;
type pthread_key_t is private;
PTHREAD_CREATE_DETACHED : constant := 1;
PTHREAD_CREATE_JOINABLE : constant := 0;
PTHREAD_SCOPE_PROCESS : constant := 0;
PTHREAD_SCOPE_SYSTEM : constant := 2;
-- Read/Write lock not supported on DragonFly. To add support both types
-- pthread_rwlock_t and pthread_rwlockattr_t must properly be defined
-- with the associated routines pthread_rwlock_[init/destroy] and
-- pthread_rwlock_[rdlock/wrlock/unlock].
subtype pthread_rwlock_t is pthread_mutex_t;
subtype pthread_rwlockattr_t is pthread_mutexattr_t;
-----------
-- Stack --
-----------
type stack_t is record
ss_sp : System.Address;
ss_size : size_t;
ss_flags : int;
end record;
pragma Convention (C, stack_t);
function sigaltstack
(ss : not null access stack_t;
oss : access stack_t) return int;
pragma Import (C, sigaltstack, "sigaltstack");
Alternate_Stack : aliased System.Address;
-- This is a dummy definition, never used (Alternate_Stack_Size is null)
Alternate_Stack_Size : constant := 0;
-- No alternate signal stack is used on this platform
Stack_Base_Available : constant Boolean := False;
-- Indicates whether the stack base is available on this target. This
-- allows us to share s-osinte.adb between all the FSU run time. Note that
-- this value can only be true if pthread_t has a complete definition that
-- corresponds exactly to the C header files.
function Get_Stack_Base (thread : pthread_t) return Address;
pragma Inline (Get_Stack_Base);
-- returns the stack base of the specified thread. Only call this function
-- when Stack_Base_Available is True.
function Get_Page_Size return size_t;
function Get_Page_Size return Address;
pragma Import (C, Get_Page_Size, "getpagesize");
-- Returns the size of a page
PROT_NONE : constant := 0;
PROT_READ : constant := 1;
PROT_WRITE : constant := 2;
PROT_EXEC : constant := 4;
PROT_ALL : constant := PROT_READ + PROT_WRITE + PROT_EXEC;
PROT_ON : constant := PROT_NONE;
PROT_OFF : constant := PROT_ALL;
function mprotect (addr : Address; len : size_t; prot : int) return int;
pragma Import (C, mprotect);
---------------------------------------
-- Nonstandard Thread Initialization --
---------------------------------------
-- FSU_THREADS requires pthread_init, which is nonstandard and this should
-- be invoked during the elaboration of s-taprop.adb.
-- DragonFlyBSD does not require this so we provide an empty Ada body
procedure pthread_init;
-------------------------
-- POSIX.1c Section 3 --
-------------------------
function sigwait
(set : access sigset_t;
sig : access Signal) return int;
pragma Import (C, sigwait, "sigwait");
function pthread_kill
(thread : pthread_t;
sig : Signal) return int;
pragma Import (C, pthread_kill, "pthread_kill");
function pthread_sigmask
(how : int;
set : access sigset_t;
oset : access sigset_t) return int;
pragma Import (C, pthread_sigmask, "pthread_sigmask");
--------------------------
-- POSIX.1c Section 11 --
--------------------------
function pthread_mutexattr_init
(attr : access pthread_mutexattr_t) return int;
pragma Import (C, pthread_mutexattr_init, "pthread_mutexattr_init");
function pthread_mutexattr_destroy
(attr : access pthread_mutexattr_t) return int;
pragma Import (C, pthread_mutexattr_destroy, "pthread_mutexattr_destroy");
function pthread_mutex_init
(mutex : access pthread_mutex_t;
attr : access pthread_mutexattr_t) return int;
pragma Import (C, pthread_mutex_init, "pthread_mutex_init");
function pthread_mutex_destroy (mutex : access pthread_mutex_t) return int;
pragma Import (C, pthread_mutex_destroy, "pthread_mutex_destroy");
function pthread_mutex_lock (mutex : access pthread_mutex_t) return int;
pragma Import (C, pthread_mutex_lock, "pthread_mutex_lock");
function pthread_mutex_unlock (mutex : access pthread_mutex_t) return int;
pragma Import (C, pthread_mutex_unlock, "pthread_mutex_unlock");
function pthread_condattr_init
(attr : access pthread_condattr_t) return int;
pragma Import (C, pthread_condattr_init, "pthread_condattr_init");
function pthread_condattr_destroy
(attr : access pthread_condattr_t) return int;
pragma Import (C, pthread_condattr_destroy, "pthread_condattr_destroy");
function pthread_cond_init
(cond : access pthread_cond_t;
attr : access pthread_condattr_t) return int;
pragma Import (C, pthread_cond_init, "pthread_cond_init");
function pthread_cond_destroy (cond : access pthread_cond_t) return int;
pragma Import (C, pthread_cond_destroy, "pthread_cond_destroy");
function pthread_cond_signal (cond : access pthread_cond_t) return int;
pragma Import (C, pthread_cond_signal, "pthread_cond_signal");
function pthread_cond_wait
(cond : access pthread_cond_t;
mutex : access pthread_mutex_t) return int;
pragma Import (C, pthread_cond_wait, "pthread_cond_wait");
function pthread_cond_timedwait
(cond : access pthread_cond_t;
mutex : access pthread_mutex_t;
abstime : access timespec) return int;
pragma Import (C, pthread_cond_timedwait, "pthread_cond_timedwait");
Relative_Timed_Wait : constant Boolean := False;
-- pthread_cond_timedwait requires an absolute delay time
--------------------------
-- POSIX.1c Section 13 --
--------------------------
PTHREAD_PRIO_NONE : constant := 0;
PTHREAD_PRIO_PROTECT : constant := 2;
PTHREAD_PRIO_INHERIT : constant := 1;
function pthread_mutexattr_setprotocol
(attr : access pthread_mutexattr_t;
protocol : int) return int;
pragma Import
(C, pthread_mutexattr_setprotocol, "pthread_mutexattr_setprotocol");
function pthread_mutexattr_getprotocol
(attr : access pthread_mutexattr_t;
protocol : access int) return int;
pragma Import
(C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
function pthread_mutexattr_setprioceiling
(attr : access pthread_mutexattr_t;
prioceiling : int) return int;
pragma Import
(C, pthread_mutexattr_setprioceiling,
"pthread_mutexattr_setprioceiling");
function pthread_mutexattr_getprioceiling
(attr : access pthread_mutexattr_t;
prioceiling : access int) return int;
pragma Import
(C, pthread_mutexattr_getprioceiling,
"pthread_mutexattr_getprioceiling");
type struct_sched_param is record
sched_priority : int;
end record;
pragma Convention (C, struct_sched_param);
function pthread_getschedparam
(thread : pthread_t;
policy : access int;
param : access struct_sched_param) return int;
pragma Import (C, pthread_getschedparam, "pthread_getschedparam");
function pthread_setschedparam
(thread : pthread_t;
policy : int;
param : access struct_sched_param) return int;
pragma Import (C, pthread_setschedparam, "pthread_setschedparam");
function pthread_attr_setscope
(attr : access pthread_attr_t;
contentionscope : int) return int;
pragma Import (C, pthread_attr_setscope, "pthread_attr_setscope");
function pthread_attr_getscope
(attr : access pthread_attr_t;
contentionscope : access int) return int;
pragma Import (C, pthread_attr_getscope, "pthread_attr_getscope");
function pthread_attr_setinheritsched
(attr : access pthread_attr_t;
inheritsched : int) return int;
pragma Import
(C, pthread_attr_setinheritsched, "pthread_attr_setinheritsched");
function pthread_attr_getinheritsched
(attr : access pthread_attr_t;
inheritsched : access int) return int;
pragma Import
(C, pthread_attr_getinheritsched, "pthread_attr_getinheritsched");
function pthread_attr_setschedpolicy
(attr : access pthread_attr_t;
policy : int) return int;
pragma Import (C, pthread_attr_setschedpolicy,
"pthread_attr_setschedpolicy");
function pthread_attr_getschedpolicy
(attr : access pthread_attr_t;
policy : access int) return int;
pragma Import (C, pthread_attr_getschedpolicy,
"pthread_attr_getschedpolicy");
function pthread_attr_setschedparam
(attr : access pthread_attr_t;
sched_param : int) return int;
pragma Import (C, pthread_attr_setschedparam, "pthread_attr_setschedparam");
function pthread_attr_getschedparam
(attr : access pthread_attr_t;
sched_param : access int) return int;
pragma Import (C, pthread_attr_getschedparam, "pthread_attr_getschedparam");
function sched_yield return int;
pragma Import (C, sched_yield, "pthread_yield");
--------------------------
-- P1003.1c Section 16 --
--------------------------
function pthread_attr_init (attributes : access pthread_attr_t) return int;
pragma Import (C, pthread_attr_init, "pthread_attr_init");
function pthread_attr_destroy
(attributes : access pthread_attr_t) return int;
pragma Import (C, pthread_attr_destroy, "pthread_attr_destroy");
function pthread_attr_setdetachstate
(attr : access pthread_attr_t;
detachstate : int) return int;
pragma Import
(C, pthread_attr_setdetachstate, "pthread_attr_setdetachstate");
function pthread_attr_getdetachstate
(attr : access pthread_attr_t;
detachstate : access int) return int;
pragma Import
(C, pthread_attr_getdetachstate, "pthread_attr_getdetachstate");
function pthread_attr_getstacksize
(attr : access pthread_attr_t;
stacksize : access size_t) return int;
pragma Import
(C, pthread_attr_getstacksize, "pthread_attr_getstacksize");
function pthread_attr_setstacksize
(attr : access pthread_attr_t;
stacksize : size_t) return int;
pragma Import
(C, pthread_attr_setstacksize, "pthread_attr_setstacksize");
function pthread_create
(thread : access pthread_t;
attributes : access pthread_attr_t;
start_routine : Thread_Body;
arg : System.Address) return int;
pragma Import (C, pthread_create, "pthread_create");
function pthread_detach (thread : pthread_t) return int;
pragma Import (C, pthread_detach, "pthread_detach");
procedure pthread_exit (status : System.Address);
pragma Import (C, pthread_exit, "pthread_exit");
function pthread_self return pthread_t;
pragma Import (C, pthread_self, "pthread_self");
--------------------------
-- POSIX.1c Section 17 --
--------------------------
function pthread_setspecific
(key : pthread_key_t;
value : System.Address) return int;
pragma Import (C, pthread_setspecific, "pthread_setspecific");
function pthread_getspecific (key : pthread_key_t) return System.Address;
pragma Import (C, pthread_getspecific, "pthread_getspecific");
type destructor_pointer is access procedure (arg : System.Address);
pragma Convention (C, destructor_pointer);
function pthread_key_create
(key : access pthread_key_t;
destructor : destructor_pointer) return int;
pragma Import (C, pthread_key_create, "pthread_key_create");
------------------------------------
-- Non-portable Pthread Functions --
------------------------------------
function pthread_set_name_np
(thread : pthread_t;
name : System.Address) return int;
pragma Import (C, pthread_set_name_np, "pthread_set_name_np");
private
type sigset_t is array (1 .. 4) of unsigned;
-- In DragonFlyBSD the component sa_handler turns out to
-- be one a union type, and the selector is a macro:
-- #define sa_handler __sigaction_u._handler
-- #define sa_sigaction __sigaction_u._sigaction
-- Should we add a signal_context type here ???
-- How could it be done independent of the CPU architecture ???
-- sigcontext type is opaque, so it is architecturally neutral.
-- It is always passed as an access type, so define it as an empty record
-- since the contents are not used anywhere.
type struct_sigcontext is null record;
pragma Convention (C, struct_sigcontext);
type pid_t is new int;
type time_t is new long;
type timespec is record
ts_sec : time_t;
ts_nsec : long;
end record;
pragma Convention (C, timespec);
type pthread_t is new System.Address;
type pthread_attr_t is new System.Address;
type pthread_mutex_t is new System.Address;
type pthread_mutexattr_t is new System.Address;
type pthread_cond_t is new System.Address;
type pthread_condattr_t is new System.Address;
type pthread_key_t is new int;
end System.OS_Interface;

View File

@ -6,7 +6,7 @@
-- --
-- B o d y --
-- --
-- Copyright (C) 1991-2009, Free Software Foundation, Inc. --
-- Copyright (C) 1991-2015, Free Software Foundation, Inc. --
-- --
-- GNARL 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- --
@ -44,7 +44,7 @@ package body System.OS_Interface is
type int_ptr is access all int;
function internal_errno return int_ptr;
pragma Import (C, internal_errno, "__error");
pragma Import (C, internal_errno, "__get_errno");
begin
return (internal_errno.all);
@ -57,7 +57,7 @@ package body System.OS_Interface is
function Get_Stack_Base (thread : pthread_t) return Address is
pragma Unreferenced (thread);
begin
return (0);
return Null_Address;
end Get_Stack_Base;
------------------

View File

@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
* Copyright (C) 2003-2014, Free Software Foundation, Inc. *
* Copyright (C) 2003-2015, 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- *
@ -37,7 +37,8 @@
#include "gsocket.h"
#if defined(__FreeBSD__)
#if defined (__FreeBSD__) || defined (__DragonFly__) \
|| defined (__NetBSD__) || defined (__OpenBSD__)
typedef unsigned int IOCTL_Req_T;
#else
typedef int IOCTL_Req_T;

View File

@ -287,7 +287,7 @@ __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 (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__)
# ifdef __MINGW32__
# if OLD_MINGW
@ -339,7 +339,7 @@ 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 (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__)
char c;
int nread;
int good_one = 0;
@ -359,7 +359,7 @@ 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 (__GLIBC__) || defined (__APPLE__) || defined (__DragonFly__)
eof_ch = termios_rec.c_cc[VEOF];
/* If waiting (i.e. Get_Immediate (Char)), set MIN = 1 and wait for
@ -820,7 +820,7 @@ __gnat_localtime_tzoff (const time_t *timer ATTRIBUTE_UNUSED,
struct tm */
#elif defined (__APPLE__) || defined (__FreeBSD__) || defined (__linux__) \
|| defined (__GLIBC__)
|| defined (__GLIBC__) || defined (__DragonFly__) || defined (__OpenBSD__)
{
localtime_r (timer, &tp);
*off = tp.tm_gmtoff;

View File

@ -6,7 +6,7 @@
* *
* C Implementation File *
* *
* Copyright (C) 2000-2014, Free Software Foundation, Inc. *
* Copyright (C) 2000-2015, 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- *
@ -278,6 +278,20 @@ __gnat_backtrace (void **array,
#error Unhandled darwin architecture.
#endif
/*---------------------------- x86 *BSD --------------------------------*/
#elif defined (__i386__) && \
( defined (__NetBSD__) || defined (__FreeBSD__) || defined (__OpenBSD__) )
#define USE_GCC_UNWINDER
/* The generic unwinder is not used for this target because the default
implementation doesn't unwind on the BSD platforms. AMD64 targets use the
gcc unwinder for all platforms, so let's keep i386 consistent with that.
*/
#define PC_ADJUST -2
/* The minimum size of call instructions on this architecture is 2 bytes */
/*---------------------- PPC AIX/PPC Lynx 178/Older Darwin ------------------*/
#elif ((defined (_POWER) && defined (_AIX)) || \
(defined (__powerpc__) && defined (__Lynx__) && !defined(__ELF__)) || \

View File

@ -1,3 +1,8 @@
2015-06-08 John Marino <gnugcc@marino.st>
* configure.ac (*-*-dragonfly*): New configuration.
* configure: Regenerate.
2014-02-23 Eric Botcazou <ebotcazou@adacore.com>
* Makefile.in (TOOLS_FLAGS_TO_PASS_CROSS): Robustify.

5
gnattools/configure vendored
View File

@ -2039,6 +2039,11 @@ case "${target}" in
mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
indepsw.adb<indepsw-darwin.adb"
;;
*-*-dragonfly*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
indepsw.adb<indepsw-gnu.adb"
;;
*-*-freebsd*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \

View File

@ -79,6 +79,11 @@ case "${target}" in
mlib-tgt-specific.adb<mlib-tgt-specific-darwin.adb \
indepsw.adb<indepsw-darwin.adb"
;;
*-*-dragonfly*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
indepsw.adb<indepsw-gnu.adb"
;;
*-*-freebsd*)
TOOLS_TARGET_PAIRS="\
mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \