Re: Please revert the patches in bug #54040 and #59346 and special case x32
Eric Botcazou writes: > In order to avoid creating more x32-specific files, I think that we > need to move the definition of 'struct timespec' and 'struct timeval' > (both specified by POSIX) to s-linux.ads. This requires with'ing > Interfaces.C, but I think that's OK since s-linux.ads is a spin-off of > s-osinte-linux.ads which also with'es Interfaces.C. In my worthless opinion, it is a mistake to declare POSIX data types in s-linux.ads, they should be in s-posix.ads or similar (don't worry if that's a new file; and it should not be a "leaf" package). Think of GNU/kFreeBSD and GNU/Hurd, which have nothing to do with Linux. Furthermore there should be only one declaration of type timespec (i.e. "do not repeat yourself"); that declaration should be in s-posix.ads and that declaration should "violate" POSIX like so: with System.OS_Interface; package System.POSIX is type timespec is record tv_sec : time_t; tv_nsec : System.OS_Interface.Nanoseconds_T; -- instead of "long" end record; pragma Convention (C, timespec); end System.POSIX; Each platform-specific version of System.OS_Interface should then declare their own type Nanoseconds_T. The version for x32 would declare type Nanoseconds_T is new Long_Long_Integer; -- or perhaps range -2**63 .. 2**63-1 to be more explicit? thereby really violating POSIX but all others would declare type Nanoseconds_T is new Interfaces.C.long; thereby restoring compliance with POSIX. I'm really sorry that I don't have the time to propose a proper patch but if someone does, I'd be happy to review it. -- Ludovic Brenta.
PR ada/49940 [4.5/4.6/4.7 regression] Bootstrapping on x86_64-pc-kfreebsd-gnu fails with "s-taprop.adb:717:32: "lwp_self" is undefined"
I think the following fixes this PR; it consists only in duplicating a few lines from s-osinte-freebsd.ads to s-osinte-kfreebsd-gnu.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 @@ -238,6 +238,16 @@ function getpid return pid_t; pragma Import (C, getpid, "getpid"); + - + -- LWP -- + - + + function lwp_self return System.Address; + -- lwp_self does not exist on this thread library, revert to pthread_self + -- which is the closest approximation (with getpid). This function is + -- needed to share 7staprop.adb across POSIX-like targets. + pragma Import (C, lwp_self, "pthread_self"); + - -- Threads -- - Index: b/src/gcc/ada/ChangeLog === --- a/src/gcc/ada/ChangeLog +++ b/src/gcc/ada/ChangeLog @@ -0,0 +1,6 @@ +2011-08-02 Ludovic Brenta + + PR ada/49940 + * s-osinte-kfreebsd-gnu.ads (lwp_self): import pthread_self, as on + FreeBSD. + -- Ludovic Brenta.
PR ada/49944 [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)"
I think the following patch fixes this problem; it consists only in copying a few lines from s-osinte-linux.ads to s-osinte-kfreebsd-gnu.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 @@ -469,7 +479,20 @@ (thread : pthread_t; cpusetsize : size_t; cpuset : access cpu_set_t) return int; - pragma Import (C, pthread_setaffinity_np, "__gnat_pthread_setaffinity_np"); + pragma Import (C, pthread_setaffinity_np, "pthread_setaffinity_np"); + pragma Weak_External (pthread_setaffinity_np); + -- Use a weak symbol because this function may be available or not, + -- depending on the version of the system. + + function pthread_attr_setaffinity_np + (attr : access pthread_attr_t; + cpusetsize : size_t; + cpuset : access cpu_set_t) return int; + pragma Import (C, pthread_attr_setaffinity_np, +"pthread_attr_setaffinity_np"); + pragma Weak_External (pthread_attr_setaffinity_np); + -- Use a weak symbol because this function may be available or not, + -- depending on the version of the system. private Index: b/src/gcc/ada/ChangeLog === --- a/src/gcc/ada/ChangeLog +++ b/src/gcc/ada/ChangeLog @@ -0,0 +1,15 @@ +2011-08-02 Ludovic Brenta + + PR ada/49944 + * s-osinte-kfreebsd-gnu.ads (pthread_setaffinity_np): import + pthread_setaffinity_np instead of __gnat_pthread_setaffinity_np, + which no longer exists; and use a Weak_External reference, like we + do on Linux. + (pthread_attr_setaffinity_np): new, copy from s-osinte-linux.ads. +
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 + (a
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_NO
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_I
[PATCH] PR ada/50048: "cc1: note: obsolete option -I- used, please use -iquote instead" during bootstrap
OK to apply as trivial? 2011-08-11 Ludovic Brenta PR ada/50048 * gcc-interface/Makefile.in (INCLUDES): replace -I- with -iquote. --- a/src/gcc/ada/gcc-interface/Makefile.in +++ b/src/gcc/ada/gcc-interface/Makefile.in @@ -247,7 +247,7 @@ # Both . and srcdir are used, in that order, # so that tm.h and config.h will be found in the compilation # subdirectory rather than in the source directory. -INCLUDES = -I- -I. -I.. -I$(srcdir)/ada -I$(srcdir) -I$(srcdir)/config \ +INCLUDES = -iquote -I. -I.. -I$(srcdir)/ada -I$(srcdir) -I$(srcdir)/config \ -I$(srcdir)/../include ADA_INCLUDES = -I- -I. -I$(srcdir)/ada
Re: [PATCH] PR ada/50048: "cc1: note: obsolete option -I- used, please use -iquote instead" during bootstrap
Andrew Pinski writes: > This is wrong as -iquote takes an operand. So it is eating up -I. for > the -iquote. You have to replace all of the -I after -I- with > -iquote. OK, here is an amended patch. I don't dare call it "trivial" anymore :) (Note that even the "wrong" patch solved the problem reported on Debian, though). 2011-08-11 Ludovic Brenta PR ada/50048 * gcc-interface/Makefile.in (INCLUDES): replace -I- with -iquote. 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 @@ -247,8 +247,8 @@ # Both . and srcdir are used, in that order, # so that tm.h and config.h will be found in the compilation # subdirectory rather than in the source directory. -INCLUDES = -I- -I. -I.. -I$(srcdir)/ada -I$(srcdir) -I$(srcdir)/config \ - -I$(srcdir)/../include +INCLUDES = -iquote . -iquote .. -iquote $(srcdir)/ada -iquote$(srcdir) \ + -iquote $(srcdir)/config -iquote $(srcdir)/../include ADA_INCLUDES = -I- -I. -I$(srcdir)/ada