summaryrefslogtreecommitdiff
path: root/debian/patches/ada-kfreebsd.diff
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/ada-kfreebsd.diff')
-rw-r--r--debian/patches/ada-kfreebsd.diff306
1 files changed, 306 insertions, 0 deletions
diff --git a/debian/patches/ada-kfreebsd.diff b/debian/patches/ada-kfreebsd.diff
new file mode 100644
index 0000000..c01d834
--- /dev/null
+++ b/debian/patches/ada-kfreebsd.diff
@@ -0,0 +1,306 @@
+# DP: add support for GNU/kFreeBSD.
+
+Index: b/src/gcc/ada/terminals.c
+===================================================================
+--- a/src/gcc/ada/terminals.c
++++ b/src/gcc/ada/terminals.c
+@@ -1071,7 +1071,8 @@ __gnat_setup_winsize (void *desc, int ro
+ /* On some system termio is either absent or including it will disable termios
+ (HP-UX) */
+ #if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \
+- && !defined (__rtems__)
++ && ! defined (__FreeBSD_kernel__) && ! defined (__GNU__) \
++ && ! defined (__rtems__)
+ # include <termio.h>
+ #endif
+
+Index: b/src/gcc/ada/s-osinte-kfreebsd-gnu.adb
+===================================================================
+--- /dev/null
++++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.adb
+@@ -0,0 +1,158 @@
++------------------------------------------------------------------------------
++-- --
++-- 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-1994, Florida State University --
++-- Copyright (C) 1995-2006, AdaCore --
++-- --
++-- 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 2, or (at your option) any later ver- --
++-- sion. GNARL 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. See the GNU General Public License --
++-- for more details. You should have received a copy of the GNU General --
++-- Public License distributed with GNARL; see file COPYING. If not, write --
++-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
++-- Boston, MA 02110-1301, USA. --
++-- --
++-- As a special exception, if other files instantiate generics from this --
++-- unit, or you link this unit with other files to produce an executable, --
++-- this unit does not by itself cause the resulting executable to be --
++-- covered by the GNU General Public License. This exception does not --
++-- however invalidate any other reasons why the executable file might be --
++-- covered by the GNU Public License. --
++-- --
++-- GNARL was developed by the GNARL team at Florida State University. --
++-- Extensive contributions were provided by Ada Core Technologies, Inc. --
++-- --
++------------------------------------------------------------------------------
++
++-- This is the GNU/kFreeBSD version of this package.
++
++pragma Polling (Off);
++-- Turn off polling, we do not want ATC polling to take place during
++-- tasking operations. It causes infinite loops and other problems.
++
++-- This package encapsulates all direct interfaces to OS services
++-- that are needed by children of System.
++
++package body System.OS_Interface is
++
++ --------------------
++ -- Get_Stack_Base --
++ --------------------
++
++ function Get_Stack_Base (thread : pthread_t) return Address is
++ pragma Warnings (Off, thread);
++
++ begin
++ return Null_Address;
++ end Get_Stack_Base;
++
++ ------------------
++ -- pthread_init --
++ ------------------
++
++ procedure pthread_init is
++ begin
++ null;
++ end pthread_init;
++
++ -----------------------------------
++ -- pthread_mutexattr_setprotocol --
++ -----------------------------------
++
++ function pthread_mutexattr_setprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : int) return int is
++ pragma Unreferenced (attr, protocol);
++ begin
++ return 0;
++ end pthread_mutexattr_setprotocol;
++
++ -----------------------------------
++ -- pthread_mutexattr_getprotocol --
++ -----------------------------------
++
++ function pthread_mutexattr_getprotocol
++ (attr : access pthread_mutexattr_t;
++ protocol : access int) return int is
++ pragma Unreferenced (attr, protocol);
++ begin
++ return 0;
++ end pthread_mutexattr_getprotocol;
++
++ --------------------------------------
++ -- pthread_mutexattr_setprioceiling --
++ --------------------------------------
++
++ function pthread_mutexattr_setprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : int) return int is
++ pragma Unreferenced (attr, prioceiling);
++ begin
++ return 0;
++ end pthread_mutexattr_setprioceiling;
++
++ --------------------------------------
++ -- pthread_mutexattr_getprioceiling --
++ --------------------------------------
++
++ function pthread_mutexattr_getprioceiling
++ (attr : access pthread_mutexattr_t;
++ prioceiling : access int) return int is
++ pragma Unreferenced (attr, prioceiling);
++ begin
++ return 0;
++ end pthread_mutexattr_getprioceiling;
++
++ -----------------
++ -- To_Duration --
++ -----------------
++
++ function To_Duration (TS : timespec) return Duration is
++ begin
++ return Duration (TS.tv_sec) + Duration (TS.tv_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'(tv_sec => S,
++ tv_nsec => long (Long_Long_Integer (F * 10#1#E9)));
++ end To_Timespec;
++
++end System.OS_Interface;
+Index: b/src/gcc/ada/gcc-interface/Makefile.in
+===================================================================
+--- a/src/gcc/ada/gcc-interface/Makefile.in
++++ b/src/gcc/ada/gcc-interface/Makefile.in
+@@ -1397,7 +1397,7 @@ ifeq ($(strip $(filter-out %86 kfreebsd%
+ a-intnam.ads<a-intnam-freebsd.ads \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+- s-osinte.adb<s-osinte-posix.adb \
++ s-osinte.adb<s-osinte-kfreebsd-gnu.adb \
+ s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
+ s-osprim.adb<s-osprim-posix.adb \
+ s-taprop.adb<s-taprop-posix.adb \
+@@ -1457,7 +1457,7 @@ ifeq ($(strip $(filter-out x86_64 kfreeb
+ a-numaux.ads<a-numaux-x86.ads \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+- s-osinte.adb<s-osinte-posix.adb \
++ s-osinte.adb<s-osinte-kfreebsd-gnu.adb \
+ s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
+ s-osprim.adb<s-osprim-posix.adb \
+ s-taprop.adb<s-taprop-posix.adb \
+Index: b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+===================================================================
+--- a/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
++++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads
+@@ -45,6 +45,7 @@ package System.OS_Interface is
+ pragma Preelaborate;
+
+ pragma Linker_Options ("-lpthread");
++ pragma Linker_Options ("-lrt");
+
+ subtype int is Interfaces.C.int;
+ subtype char is Interfaces.C.char;
+@@ -206,9 +207,7 @@ package System.OS_Interface is
+ function nanosleep (rqtp, rmtp : access timespec) return int;
+ pragma Import (C, nanosleep, "nanosleep");
+
+- type clockid_t is private;
+-
+- CLOCK_REALTIME : constant clockid_t;
++ type clockid_t is new int;
+
+ function clock_gettime
+ (clock_id : clockid_t;
+@@ -441,31 +440,25 @@ package System.OS_Interface is
+ PTHREAD_PRIO_PROTECT : constant := 2;
+ PTHREAD_PRIO_INHERIT : constant := 1;
+
++ -- GNU/kFreeBSD does not support Thread Priority Protection or Thread
++ -- Priority Inheritance and lacks some pthread_mutexattr_* functions.
++ -- Replace them with dummy versions.
++
+ 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; -- scheduling priority
+@@ -592,8 +585,8 @@ private
+ -- #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 ?
++ -- 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.
+@@ -610,9 +603,6 @@ private
+ end record;
+ pragma Convention (C, timespec);
+
+- type clockid_t is new int;
+- CLOCK_REALTIME : constant clockid_t := 0;
+-
+ type pthread_attr_t is record
+ detachstate : int;
+ schedpolicy : int;
+Index: b/src/gcc/ada/gsocket.h
+===================================================================
+--- a/src/gcc/ada/gsocket.h
++++ b/src/gcc/ada/gsocket.h
+@@ -243,6 +243,7 @@
+ #endif
+
+ #if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__) \
++ || defined (__FreeBSD_kernel__) || defined(__GNU__) \
+ || defined (__DragonFly__) || defined (__NetBSD__) || defined (__OpenBSD__)
+ # define Has_Sockaddr_Len 1
+ #else
+Index: b/src/gcc/ada/s-oscons-tmplt.c
+===================================================================
+--- a/src/gcc/ada/s-oscons-tmplt.c
++++ b/src/gcc/ada/s-oscons-tmplt.c
+@@ -1436,7 +1436,7 @@ CND(CLOCK_FASTEST, "Fastest clock")
+ CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock")
+
+ #if defined(__FreeBSD__) || (defined(_AIX) && defined(_AIXVERSION_530)) \
+- || defined(__DragonFly__)
++ || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
+ /** On these platforms use system provided monotonic clock instead of
+ ** the default CLOCK_REALTIME. We then need to set up cond var attributes
+ ** appropriately (see thread.c).