Package: src:gcc-5 Version: 5.4.0-2 Severity: important Tags: patch Hi,
Part of ada-kfreebsd.diff has been applied upstream. The Debian 5.4.0-2 package defines function clock_getres again, causing it to FTBFS. | s-osinte.ads:223:13: "clock_getres" conflicts with declaration at line 218 | s-osinte.ads:226:22: at most one Convention/Export/Import pragma is allowed https://buildd.debian.org/status/fetch.php?pkg=gcc-5&arch=kfreebsd-amd64&ver=5.4.0-2&stamp=1465025776 Attached is an updated ada-kfreebsd.diff removing that part. Thanks! -- System Information: Debian Release: stretch/sid APT prefers unstable APT policy: (500, 'unstable'), (1, 'experimental') Architecture: kfreebsd-amd64 (x86_64) Kernel: kFreeBSD 10.1-0-amd64 Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Init: sysvinit (via /sbin/init)
# 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,6 +1071,7 @@ __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 (FREEBSD) && \ + ! defined (__FreeBSD_kernel__) && ! defined (__GNU__) && \ ! defined (__APPLE__) && ! 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 @@ -1366,7 +1366,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 \ @@ -1426,7 +1426,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; @@ -442,31 +446,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 @@ -593,8 +591,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. @@ -611,9 +609,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 @@ -241,7 +241,7 @@ # endif #endif -#if defined (__FreeBSD__) || defined (__vxworks) || defined(__rtems__) +#if defined (__FreeBSD__) || defined (__FreeBSD_kernel__) || defined (__vxworks) || defined(__rtems__) || defined(__GNU__) # define Has_Sockaddr_Len 1 #else # define Has_Sockaddr_Len 0 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 @@ -1435,7 +1435,7 @@ CND(CLOCK_FASTEST, "Fastest clock") #endif CND(CLOCK_THREAD_CPUTIME_ID, "Thread CPU clock") -#if defined(__FreeBSD__) || (defined(_AIX) && defined(_AIXVERSION_530)) +#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || (defined(_AIX) && defined(_AIXVERSION_530)) /** 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).