Commit 928b5b52 by Ludovic Brenta Committed by Eric Botcazou

re PR ada/49944 (Bootstrapping on x86_64-pc-kfreebsd-gnu fails with…

re PR ada/49944 (Bootstrapping on x86_64-pc-kfreebsd-gnu fails with "s-taprop.adb:856:10: "pthread_attr_setaffinity_np" is undefined (more references follow)")

	PR ada/49944
	* s-osinte-freebsd.ads: Minor reformatting.
	(Stack_Base_Available): Correct comments.
	* s-osinte-kfreebsd-gnu.ads (Time_Slice_Supported, nanosleep,
	clock_id_t, clock_gettime, Stack_Base_Available, Get_Page_Size,
	mprotect, pthread_mutexattr_setprotocol,pthread_mutexattr_getprotocol
	pthread_mutexattr_setprioceiling, pthread_mutexattr_getprioceiling,
	pthread_attr_setscope, pthread_attr_getscope,
	pthread_attr_setinheritsched, pthread_attr_getinheritsched,
	Time_Slice_Supported): Copy from s-osinte-freebsd.ads.
	* gcc-interface/Makefile.in (x86/kfreebsd): Use the POSIX version of
	the System.Task_Primitives.Operations package.

From-SVN: r231333
parent f1b76208
2015-12-06 Ludovic Brenta <ludovic@ludovic-brenta.org> 2015-12-06 Ludovic Brenta <ludovic@ludovic-brenta.org>
PR ada/49944
* s-osinte-freebsd.ads: Minor reformatting.
(Stack_Base_Available): Correct comments.
* s-osinte-kfreebsd-gnu.ads (Time_Slice_Supported, nanosleep,
clock_id_t, clock_gettime, Stack_Base_Available, Get_Page_Size,
mprotect, pthread_mutexattr_setprotocol,pthread_mutexattr_getprotocol
pthread_mutexattr_setprioceiling, pthread_mutexattr_getprioceiling,
pthread_attr_setscope, pthread_attr_getscope,
pthread_attr_setinheritsched, pthread_attr_getinheritsched,
Time_Slice_Supported): Copy from s-osinte-freebsd.ads.
* gcc-interface/Makefile.in (x86/kfreebsd): Use the POSIX version of
the System.Task_Primitives.Operations package.
2015-12-06 Ludovic Brenta <ludovic@ludovic-brenta.org>
PR ada/49940 PR ada/49940
* s-osinte-kfreebsd-gnu.ads (lwp_self): New imported function. * s-osinte-kfreebsd-gnu.ads (lwp_self): New imported function.
......
...@@ -1398,9 +1398,7 @@ ifeq ($(strip $(filter-out %86 kfreebsd%,$(target_cpu) $(target_os))),) ...@@ -1398,9 +1398,7 @@ ifeq ($(strip $(filter-out %86 kfreebsd%,$(target_cpu) $(target_os))),)
s-osinte.adb<s-osinte-posix.adb \ s-osinte.adb<s-osinte-posix.adb \
s-osinte.ads<s-osinte-kfreebsd-gnu.ads \ s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
s-osprim.adb<s-osprim-posix.adb \ s-osprim.adb<s-osprim-posix.adb \
s-taprop.adb<s-taprop-linux.adb \ s-taprop.adb<s-taprop-posix.adb \
s-tasinf.ads<s-tasinf-linux.ads \
s-tasinf.adb<s-tasinf-linux.adb \
s-taspri.ads<s-taspri-posix.ads \ s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix-foreign.adb \ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
$(ATOMICS_TARGET_PAIRS) \ $(ATOMICS_TARGET_PAIRS) \
...@@ -1431,9 +1429,7 @@ ifeq ($(strip $(filter-out x86_64 kfreebsd%,$(target_cpu) $(target_os))),) ...@@ -1431,9 +1429,7 @@ ifeq ($(strip $(filter-out x86_64 kfreebsd%,$(target_cpu) $(target_os))),)
s-osinte.adb<s-osinte-posix.adb \ s-osinte.adb<s-osinte-posix.adb \
s-osinte.ads<s-osinte-kfreebsd-gnu.ads \ s-osinte.ads<s-osinte-kfreebsd-gnu.ads \
s-osprim.adb<s-osprim-posix.adb \ s-osprim.adb<s-osprim-posix.adb \
s-taprop.adb<s-taprop-linux.adb \ s-taprop.adb<s-taprop-posix.adb \
s-tasinf.ads<s-tasinf-linux.ads \
s-tasinf.adb<s-tasinf-linux.adb \
s-taspri.ads<s-taspri-posix.ads \ s-taspri.ads<s-taspri-posix.ads \
s-tpopsp.adb<s-tpopsp-posix-foreign.adb \ s-tpopsp.adb<s-tpopsp-posix-foreign.adb \
system.ads<system-freebsd-x86_64.ads system.ads<system-freebsd-x86_64.ads
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
-- -- -- --
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
-- This is the FreeBSD PTHREADS version of this package -- This is the FreeBSD (POSIX Threads) version of this package
-- This package encapsulates all direct interfaces to OS services -- This package encapsulates all direct interfaces to OS services
-- that are needed by the tasking run-time (libgnarl). -- that are needed by the tasking run-time (libgnarl).
...@@ -197,7 +197,7 @@ package System.OS_Interface is ...@@ -197,7 +197,7 @@ package System.OS_Interface is
type timespec is private; type timespec is private;
function nanosleep (rqtp, rmtp : access timespec) return int; function nanosleep (rqtp, rmtp : access timespec) return int;
pragma Import (C, nanosleep, "nanosleep"); pragma Import (C, nanosleep, "nanosleep");
type clockid_t is new int; type clockid_t is new int;
...@@ -322,10 +322,7 @@ package System.OS_Interface is ...@@ -322,10 +322,7 @@ package System.OS_Interface is
-- No alternate signal stack is used on this platform -- No alternate signal stack is used on this platform
Stack_Base_Available : constant Boolean := False; Stack_Base_Available : constant Boolean := False;
-- Indicates whether the stack base is available on this target. This -- Indicates whether the stack base is available on this target
-- 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; function Get_Stack_Base (thread : pthread_t) return Address;
pragma Inline (Get_Stack_Base); pragma Inline (Get_Stack_Base);
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
-- -- -- --
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
-- This is the GNU/kFreeBSD (GNU/LinuxThreads) version of this package -- This is the GNU/kFreeBSD (POSIX Threads) version of this package
-- This package encapsulates all direct interfaces to OS services -- This package encapsulates all direct interfaces to OS services
-- that are needed by children of System. -- that are needed by children of System.
...@@ -198,8 +198,24 @@ package System.OS_Interface is ...@@ -198,8 +198,24 @@ package System.OS_Interface is
-- Time -- -- Time --
---------- ----------
Time_Slice_Supported : constant Boolean := True;
-- Indicates whether time slicing is supported (i.e SCHED_RR is supported)
type timespec is private; type timespec is private;
function nanosleep (rqtp, rmtp : access timespec) return int;
pragma Import (C, nanosleep, "nanosleep");
type clockid_t is private;
CLOCK_REALTIME : constant clockid_t;
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; function To_Duration (TS : timespec) return Duration;
pragma Inline (To_Duration); pragma Inline (To_Duration);
...@@ -271,6 +287,10 @@ package System.OS_Interface is ...@@ -271,6 +287,10 @@ package System.OS_Interface is
type pthread_key_t is private; type pthread_key_t is private;
PTHREAD_CREATE_DETACHED : constant := 1; PTHREAD_CREATE_DETACHED : constant := 1;
PTHREAD_CREATE_JOINABLE : constant := 0;
PTHREAD_SCOPE_PROCESS : constant := 0;
PTHREAD_SCOPE_SYSTEM : constant := 2;
----------- -----------
-- Stack -- -- Stack --
...@@ -294,9 +314,29 @@ package System.OS_Interface is ...@@ -294,9 +314,29 @@ package System.OS_Interface is
Alternate_Stack_Size : constant := 0; Alternate_Stack_Size : constant := 0;
-- No alternate signal stack is used on this platform -- 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
function Get_Stack_Base (thread : pthread_t) return Address; function Get_Stack_Base (thread : pthread_t) return Address;
pragma Inline (Get_Stack_Base); pragma Inline (Get_Stack_Base);
-- This is a dummy procedure to share some GNULLI files -- 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 -- -- Nonstandard Thread Initialization --
...@@ -385,6 +425,36 @@ package System.OS_Interface is ...@@ -385,6 +425,36 @@ package System.OS_Interface is
-- POSIX.1c Section 13 -- -- 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 type struct_sched_param is record
sched_priority : int; -- scheduling priority sched_priority : int; -- scheduling priority
end record; end record;
...@@ -396,6 +466,28 @@ package System.OS_Interface is ...@@ -396,6 +466,28 @@ package System.OS_Interface is
param : access struct_sched_param) return int; param : access struct_sched_param) return int;
pragma Import (C, pthread_setschedparam, "pthread_setschedparam"); 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 function pthread_attr_setschedpolicy
(attr : access pthread_attr_t; (attr : access pthread_attr_t;
policy : int) return int; policy : int) return int;
...@@ -506,6 +598,9 @@ private ...@@ -506,6 +598,9 @@ private
end record; end record;
pragma Convention (C, timespec); pragma Convention (C, timespec);
type clockid_t is new int;
CLOCK_REALTIME : constant clockid_t := 0;
type pthread_attr_t is record type pthread_attr_t is record
detachstate : int; detachstate : int;
schedpolicy : int; schedpolicy : int;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment