From 1ee806d8d759be9c7326ce55b472f326089b47f0 Mon Sep 17 00:00:00 2001 From: Svante Signell Date: Wed, 27 Apr 2016 07:38:41 +0000 Subject: [PATCH] Makefile.in (x86 GNU/Hurd): Use s-osinte-gnu.adb. * gcc-interface/Makefile.in (x86 GNU/Hurd): Use s-osinte-gnu.adb. * s-osinte-gnu.ads: Small tweaks. * s-osinte-gnu.adb: New file. From-SVN: r235467 --- gcc/ada/ChangeLog | 6 ++ gcc/ada/gcc-interface/Makefile.in | 2 +- gcc/ada/s-osinte-gnu.adb | 144 ++++++++++++++++++++++++++++++ gcc/ada/s-osinte-gnu.ads | 14 +-- 4 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 gcc/ada/s-osinte-gnu.adb diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 0051dbd7f7c..1c41831e4d2 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,9 @@ +2016-04-27 Svante Signell + + * gcc-interface/Makefile.in (x86 GNU/Hurd): Use s-osinte-gnu.adb. + * s-osinte-gnu.ads: Small tweaks. + * s-osinte-gnu.adb: New file. + 2016-04-21 Hristian Kirtchev * sem_prag.adb (Match_Constituent): Treat a constant as a legal diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in index bfc718b38bb..d9ede9f4260 100644 --- a/gcc/ada/gcc-interface/Makefile.in +++ b/gcc/ada/gcc-interface/Makefile.in @@ -1426,7 +1426,7 @@ ifeq ($(strip $(filter-out %86 pc gnu,$(target_cpu) $(target_vendor) $(target_os a-intnam.ads. -- +-- -- +-- GNARL was developed by the GNARL team at Florida State University. -- +-- Extensive contributions were provided by Ada Core Technologies, Inc. -- +-- -- +------------------------------------------------------------------------------ + +-- This is the GNU/Hurd 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_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; + + --------------------------- + -- pthread_setschedparam -- + --------------------------- + + function pthread_setschedparam + (thread : pthread_t; + policy : int; + param : access struct_sched_param) return int is + pragma Unreferenced (thread, policy, param); + begin + return 0; + end pthread_setschedparam; + + ----------------- + -- 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; diff --git a/gcc/ada/s-osinte-gnu.ads b/gcc/ada/s-osinte-gnu.ads index b3397c1ea8e..6cac9b9b880 100644 --- a/gcc/ada/s-osinte-gnu.ads +++ b/gcc/ada/s-osinte-gnu.ads @@ -344,8 +344,9 @@ package System.OS_Interface is -- returns the stack base of the specified thread. Only call this function -- when Stack_Base_Available is True. - -- From: /usr/include/unistd.h __getpagesize or getpagesize?? - function Get_Page_Size return int; + -- From: /usr/include/i386-gnu/bits/shm.h __getpagesize or getpagesize?? + 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 @@ -498,7 +499,11 @@ package System.OS_Interface is PTHREAD_PRIO_PROTECT : constant := 2; PTHREAD_PRIO_INHERIT : constant := 1; + -- GNU/Hurd does not support Thread Priority Protection or Thread + -- Priority Inheritance and lacks some pthread_mutexattr_* functions. + -- Replace them with dummy versions. -- From: /usr/include/pthread/pthread.h + function pthread_mutexattr_setprotocol (attr : access pthread_mutexattr_t; protocol : int) return int; @@ -514,14 +519,10 @@ package System.OS_Interface is 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 @@ -532,7 +533,6 @@ package System.OS_Interface is (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; -- 2.30.2