summaryrefslogtreecommitdiffstats
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.diff70
1 files changed, 70 insertions, 0 deletions
diff --git a/debian/patches/ada-kfreebsd.diff b/debian/patches/ada-kfreebsd.diff
new file mode 100644
index 0000000..9a926da
--- /dev/null
+++ b/debian/patches/ada-kfreebsd.diff
@@ -0,0 +1,70 @@
+Description: add support for GNU/kFreeBSD and GNU/Hurd.
+ For now, it seems that BSD requires -lrt.
+ On other architectures, the library is ignored thanks to --as-needed.
+Author: Ludovic Brenta <lbrenta@debian.org>
+Author: Nicolas Boulenguez <nicolas@debian.org>
+
+--- a/src/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads
++++ b/src/gcc/ada/libgnarl/s-osinte__kfreebsd-gnu.ads
+@@ -46,6 +46,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;
+@@ -438,31 +439,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");
++ (ignored_attr : access pthread_mutexattr_t;
++ ignored_protocol : int) return int is (0);
+
+ function pthread_mutexattr_getprotocol
+- (attr : access pthread_mutexattr_t;
+- protocol : access int) return int;
+- pragma Import
+- (C, pthread_mutexattr_getprotocol, "pthread_mutexattr_getprotocol");
++ (ignored_attr : access pthread_mutexattr_t;
++ ignored_protocol : access int) return int is (0);
+
+ function pthread_mutexattr_setprioceiling
+- (attr : access pthread_mutexattr_t;
+- prioceiling : int) return int;
+- pragma Import
+- (C, pthread_mutexattr_setprioceiling,
+- "pthread_mutexattr_setprioceiling");
++ (ignored_attr : access pthread_mutexattr_t;
++ ignored_prioceiling : int) return int is (0);
+
+ function pthread_mutexattr_getprioceiling
+- (attr : access pthread_mutexattr_t;
+- prioceiling : access int) return int;
+- pragma Import
+- (C, pthread_mutexattr_getprioceiling,
+- "pthread_mutexattr_getprioceiling");
++ (ignored_attr : access pthread_mutexattr_t;
++ ignored_prioceiling : access int) return int is (0);
+
+ type struct_sched_param is record
+ sched_priority : int; -- scheduling priority
+--- a/src/gcc/ada/s-oscons-tmplt.c
++++ b/src/gcc/ada/s-oscons-tmplt.c
+@@ -1970,6 +1970,7 @@ CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU
+
+ #if defined(__linux__) || defined(__FreeBSD__) \
+ || (defined(_AIX) && defined(_AIXVERSION_530)) \
++ || defined(__FreeBSD_kernel__) \
+ || defined(__DragonFly__) || defined(__QNX__)
+ /** On these platforms use system provided monotonic clock instead of
+ ** the default CLOCK_REALTIME. We then need to set up cond var attributes