Re: Please revert the patches in bug #54040 and #59346 and special case x32

2014-04-09 Thread Ludovic Brenta
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"

2011-08-02 Thread Ludovic Brenta
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)"

2011-08-02 Thread Ludovic Brenta
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)"

2011-08-04 Thread Ludovic Brenta
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)"

2011-08-05 Thread Ludovic Brenta
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)"

2011-08-05 Thread Ludovic Brenta
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

2011-08-11 Thread Ludovic Brenta
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

2011-08-12 Thread Ludovic Brenta
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