Re: PR ada/49944, take 2 [4.5/4.6/4.7 regression] Bootstrapping on x86_64-pc-kfreebsd-gnu fails with "s-taprop.adb:856:10: "pthread_attr_setaffinity_np" is undefined (more references follow)"
> >> --- This is the GNU/kFreeBSD (GNU/LinuxThreads) version of this > >> package > >> +-- This is the GNU/kFreeBSD PTHREADS version of this package > > > > Not sure why PTHREADS is upper cased here, any specific reason? > > Because that's how it was written in s-osint-freebsd.ads, that's all. Yes well, programming by copy/pasting isn't always a good idea :-) In particular, the freebsd version isn't well maintained, so I wouldn't take it as an example/reference. Arno
Re: PR ada/49944, take 2 [4.5/4.6/4.7 regression] Bootstrapping on x86_64-pc-kfreebsd-gnu fails with "s-taprop.adb:856:10: "pthread_attr_setaffinity_np" is undefined (more references follow)"
Arnaud Charlet writes: >> --- This is the GNU/kFreeBSD (GNU/LinuxThreads) version of this package >> +-- This is the GNU/kFreeBSD PTHREADS version of this package > > Not sure why PTHREADS is upper cased here, any specific reason? Because that's how it was written in s-osint-freebsd.ads, that's all. > If not, I'd lower case it. Actually I'd probably replace it by: > -- This is the GNU/kFreeBSD (POSIX Threads) version of this package > > unless "PTHREADS" has a special meaning on kFreeBSD. Not that I know. I made the change you suggested in both files. > OK with the above changes. Thanks for your comments. 2011-08-05 Ludovic Brenta PR ada/49944 * s-osinte-freebsd.ads: Update copyright years. 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. 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 @@ -7,7 +7,7 @@ -- S p e c -- -- -- -- Copyright (C) 1991-1994, Florida State University-- --- Copyright (C) 1995-2005,2008 Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2011, Free Software Foundation, Inc. -- -- -- -- 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- -- @@ -32,7 +32,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 -- that are needed by children of System. @@ -200,8 +200,24 @@ -- Time -- -- + Time_Slice_Supported : constant Boolean := True; + -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) + 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; pragma Inline (To_Duration); @@ -273,6 +289,10 @@ type pthread_key_t is private; PTHREAD_CREATE_DETACHED : constant := 1; + PTHREAD_CREATE_JOINABLE : constant := 0; + + PTHREAD_SCOPE_PROCESS : constant := 0; + PTHREAD_SCOPE_SYSTEM : constant := 2; --- -- Stack -- @@ -296,9 +316,29 @@ Alternate_Stack_Size : constant := 0; -- 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; 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 -- @@ -387,6 +427,36 @@ -- 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 pthre
Re: PR ada/49944, take 2 [4.5/4.6/4.7 regression] Bootstrapping on x86_64-pc-kfreebsd-gnu fails with "s-taprop.adb:856:10: "pthread_attr_setaffinity_np" is undefined (more references follow)"
> Here is my amended patch. I have fixed the stylistic issues in both > s-osinte-kfreebsd-gnu.ads and in the original place, > s-osinte-freebsd.ads. I hope the changelog entry is more correct, too. Better but not quite the standard style yet. I believe there's a doc in gnu.org explaining the proper format for ChangeLogs. I'd suggest you familiarize yourself with this document. > 2011-08-05 Ludovic Brenta > > PR ada/49944 > * s-osinte-freebsd.ads: > - update copyright years. > - minor reformatting. We don't use "-" in changelog in general, so would be more something like: * s-osinte-freebsd.ads: Update copyright years. Minor reformatting. (Stack_Base_Available): Correct comments. Also we don't put a newline just after the file name. > * gcc-interface/Makefile.in (kfreebsd%): > use s-taprop-posix.ad[bs] instead of s-taprop-linux.ad[bs]. > use s-tasinf.ad[bs] instead of s-tasinf-linux.ad[bs]. > * s-osinte-kfreebsd-gnu.ads > (Time_Slice_Supported): copy from s-osinte-freebsd.ads. > (nanosleep): ditto. > (clock_id_t, clock_gettime): ditto. > (Stack_Base_Available): ditto. > (Get_Page_Size): ditto. > (mprotect): ditto. > (pthread_mutexattr_setprotocol): ditto. > (pthread_mutexattr_getprotocol): ditto. > (pthread_mutexattr_setprioceiling): ditto. > (pthread_mutexattr_getprioceiling): ditto. > (pthread_attr_setscope): ditto. > (pthread_attr_getscope): ditto. > (pthread_attr_setinheritsched): ditto. > (pthread_attr_getinheritsched): ditto. The indentation is wrong above, should be one TAB character everywhere. You can also list all functions at once, and after a semicolon, usually you should start with an upper case: * 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. > --- This is the GNU/kFreeBSD (GNU/LinuxThreads) version of this package > +-- This is the GNU/kFreeBSD PTHREADS version of this package Not sure why PTHREADS is upper cased here, any specific reason? If not, I'd lower case it. Actually I'd probably replace it by: -- This is the GNU/kFreeBSD (POSIX Threads) version of this package unless "PTHREADS" has a special meaning on kFreeBSD. OK with the above changes. Arno
Re: PR ada/49944, take 2 [4.5/4.6/4.7 regression] Bootstrapping on x86_64-pc-kfreebsd-gnu fails with "s-taprop.adb:856:10: "pthread_attr_setaffinity_np" is undefined (more references follow)"
Arnaud Charlet writes: > The above ChangeLog isn't quite in the proper format. > Also see below for a few stylistic issues to fix. > > Once fixed, the patch is OK to commit, thanks. Here is my amended patch. I have fixed the stylistic issues in both s-osinte-kfreebsd-gnu.ads and in the original place, s-osinte-freebsd.ads. I hope the changelog entry is more correct, too. 2011-08-05 Ludovic Brenta PR ada/49944 * s-osinte-freebsd.ads: - update copyright years. - minor reformatting. (Stack_Base_Available): correct comments. * gcc-interface/Makefile.in (kfreebsd%): use s-taprop-posix.ad[bs] instead of s-taprop-linux.ad[bs]. use s-tasinf.ad[bs] instead of s-tasinf-linux.ad[bs]. * s-osinte-kfreebsd-gnu.ads (Time_Slice_Supported): copy from s-osinte-freebsd.ads. (nanosleep): ditto. (clock_id_t, clock_gettime): ditto. (Stack_Base_Available): ditto. (Get_Page_Size): ditto. (mprotect): ditto. (pthread_mutexattr_setprotocol): ditto. (pthread_mutexattr_getprotocol): ditto. (pthread_mutexattr_setprioceiling): ditto. (pthread_mutexattr_getprioceiling): ditto. (pthread_attr_setscope): ditto. (pthread_attr_getscope): ditto. (pthread_attr_setinheritsched): ditto. (pthread_attr_getinheritsched): ditto. 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 @@ -7,7 +7,7 @@ -- S p e c -- -- -- -- Copyright (C) 1991-1994, Florida State University-- --- Copyright (C) 1995-2005,2008 Free Software Foundation, Inc. -- +-- Copyright (C) 1995-2011, Free Software Foundation, Inc. -- -- -- -- 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- -- @@ -32,7 +32,7 @@ -- -- -- --- This is the GNU/kFreeBSD (GNU/LinuxThreads) version of this package +-- This is the GNU/kFreeBSD PTHREADS version of this package -- This package encapsulates all direct interfaces to OS services -- that are needed by children of System. @@ -200,8 +200,24 @@ -- Time -- -- + Time_Slice_Supported : constant Boolean := True; + -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) + 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; pragma Inline (To_Duration); @@ -273,6 +289,10 @@ type pthread_key_t is private; PTHREAD_CREATE_DETACHED : constant := 1; + PTHREAD_CREATE_JOINABLE : constant := 0; + + PTHREAD_SCOPE_PROCESS : constant := 0; + PTHREAD_SCOPE_SYSTEM : constant := 2; --- -- Stack -- @@ -296,9 +316,29 @@ Alternate_Stack_Size : constant := 0; -- 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; 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 -- @@ -387,6 +427,36 @@ -- POSIX.1c Section 13 -- -- + PTHREAD_PRIO_NONE: constant := 0; + PTHREAD_PRIO_PROTECT :
Re: PR ada/49944, take 2 [4.5/4.6/4.7 regression] Bootstrapping on x86_64-pc-kfreebsd-gnu fails with "s-taprop.adb:856:10: "pthread_attr_setaffinity_np" is undefined (more references follow)"
> Pursuant to Arno's comments on PR ada/49444, here is another patch that > allows GCC to compile with Ada support on Debian GNU/kFreeBSD. > > 2011-08-04 Ludovic Brenta > > * gcc/ada/gcc-interface/Makefile.in (kfreebsd%): > - use s-taprop-posix.ad[bs] instead of s-taprop-linux.ad[bs] > - use use s-tasinf.ad[bs] instead of s-tasinf-linux.ad[bs]. > * s-osinte-kfreebsd-gnu.ads: allow the above by bringing the > interface closer to s-osinte-freebsd.ads. The above ChangeLog isn't quite in the proper format. Also see below for a few stylistic issues to fix. Once fixed, the patch is OK to commit, thanks. Arno > --- a/src/gcc/ada/s-osinte-kfreebsd-gnu.ads > +++ b/src/gcc/ada/s-osinte-kfreebsd-gnu.ads > @@ -200,8 +200,24 @@ > -- Time -- > -- > > + Time_Slice_Supported : constant Boolean := True; > + -- Indicates whether time slicing is supported (i.e SCHED_RR is > supported) > + > type timespec is private; > > + function nanosleep (rqtp, rmtp : access timespec) return int; remove extra blank here^ > @@ -286,9 +316,32 @@ > Alternate_Stack_Size : constant := 0; > -- 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. This > + -- 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. The above comment is wrong/obsolete. Replace it simply by: -- Indicates whether the stack base is available on this target Arno
PR ada/49944, take 2 [4.5/4.6/4.7 regression] Bootstrapping on x86_64-pc-kfreebsd-gnu fails with "s-taprop.adb:856:10: "pthread_attr_setaffinity_np" is undefined (more references follow)"
Pursuant to Arno's comments on PR ada/49444, here is another patch that allows GCC to compile with Ada support on Debian GNU/kFreeBSD. 2011-08-04 Ludovic Brenta * gcc/ada/gcc-interface/Makefile.in (kfreebsd%): - use s-taprop-posix.ad[bs] instead of s-taprop-linux.ad[bs] - use use s-tasinf.ad[bs] instead of s-tasinf-linux.ad[bs]. * s-osinte-kfreebsd-gnu.ads: allow the above by bringing the interface closer to s-osinte-freebsd.ads. 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 @@ -200,8 +200,24 @@ -- Time -- -- + Time_Slice_Supported : constant Boolean := True; + -- Indicates whether time slicing is supported (i.e SCHED_RR is supported) + 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; pragma Inline (To_Duration); @@ -263,6 +289,10 @@ type pthread_key_t is private; PTHREAD_CREATE_DETACHED : constant := 1; + PTHREAD_CREATE_JOINABLE : constant := 0; + + PTHREAD_SCOPE_PROCESS : constant := 0; + PTHREAD_SCOPE_SYSTEM : constant := 2; --- -- Stack -- @@ -286,9 +316,32 @@ Alternate_Stack_Size : constant := 0; -- 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. This + -- 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; 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 -- @@ -377,6 +430,36 @@ -- 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 sched_priority : int; -- scheduling priority end record; @@ -388,6 +471,28 @@ param : access struct_sched_param) return int; 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_setinheri