summaryrefslogblamecommitdiff
path: root/system/gcc/201-ada.patch
blob: d16bbbbaac35761572114f1ba54319565c5f726b (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11
12
13



                                                
                   







                              
                                                     











                                                                          
                                                                                  

















                                                             

                     



















                                                                               


                      











                                                    
                 





                     


                    







                    
                                                        
                                       


                                                                                               


















                                                                                                                 


                  










                                                                                        
                                                   











                                                                          
                                                   














                                                                                        
                                                                     








                                                                           
                                                                      































                                                                             
                                                                 
                                                              
                                                                


                                                                              
                                                                     








                                                                               
                                                                      
















                                                           
                                                                      














                                                                             
                                                         
                           
 
                 
                                                                    

                                                         
                                                                       
                         
                                                                 

                                         












                                                                        

















































































                                                                                      
                                                                

















                                                                             

                      



















                                                                              


                     


















                                                

                     







                                                                           











                                                                            



                                         
                         


                                     










                                                              
diff --git a/gcc/ada/adaint.c b/gcc/ada/adaint.c
index 414346558654..2586a1368903 100644
--- a/gcc/ada/adaint.c
+++ b/gcc/ada/adaint.c
@@ -101,6 +101,8 @@
 #define _LARGEFILE64_SOURCE 1
 #endif
 
+#include "adaint.h"
+
 #ifdef IN_RTS
 #include "tconfig.h"
 #include "tsystem.h"
@@ -243,8 +245,6 @@ UINT __gnat_current_ccs_encoding;
 #include <utime.h>
 #endif
 
-#include "adaint.h"
-
 /* Define symbols O_BINARY and O_TEXT as harmless zeroes if they are not
    defined in the current system. On DOS-like systems these flags control
    whether the file is opened/created in text-translation mode (CR/LF in
diff --git a/gcc/ada/adaint.h b/gcc/ada/adaint.h
index 0d12f7e90209..74182446d4ac 100644
--- a/gcc/ada/adaint.h
+++ b/gcc/ada/adaint.h
@@ -319,6 +319,7 @@ extern void   *__gnat_lwp_self			   (void);
 
 /* Routines for interface to required CPU set primitives */
 
+#define _GNU_SOURCE
 #include <sched.h>
 
 extern cpu_set_t *__gnat_cpu_alloc                 (size_t);
diff --git a/gcc/ada/argv.c b/gcc/ada/argv.c
index f62cf1eb37dc..0b6c5fe6f0df 100644
--- a/gcc/ada/argv.c
+++ b/gcc/ada/argv.c
@@ -42,6 +42,8 @@
    main program, and these routines are accessed from the
    Ada.Command_Line.Environment package.  */
 
+#include "adaint.h"
+
 #ifdef IN_RTS
 #include "runtime.h"
 #include <stdlib.h>
@@ -51,8 +53,6 @@
 #include "system.h"
 #endif
 
-#include "adaint.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
diff --git a/gcc/ada/cio.c b/gcc/ada/cio.c
index ff97abe36ef1..56aa3477c8cd 100644
--- a/gcc/ada/cio.c
+++ b/gcc/ada/cio.c
@@ -29,6 +29,8 @@
  *                                                                          *
  ****************************************************************************/
 
+#include "adaint.h"
+
 #ifdef IN_RTS
 #include "runtime.h"
 #include <sys/stat.h>
@@ -37,8 +39,6 @@
 #include "system.h"
 #endif
 
-#include "adaint.h"
-
 /* We need L_tmpnam definition */
 #include <stdio.h>
 
diff --git a/gcc/ada/cstreams.c b/gcc/ada/cstreams.c
index cdcb531e2b3f..dde6b9948089 100644
--- a/gcc/ada/cstreams.c
+++ b/gcc/ada/cstreams.c
@@ -58,6 +58,8 @@
 #include "vxWorks.h"
 #endif
 
+#include "adaint.h"
+
 #ifdef IN_RTS
 #include <string.h>
 #else
@@ -65,8 +67,6 @@
 #include "system.h"
 #endif
 
-#include "adaint.h"
-
 #ifdef __cplusplus
 extern "C" {
 #endif
diff --git a/gcc/ada/Makefile.rtl b/gcc/ada/Makefile.rtl
index 0258f106d404..0416244ae428 100644
--- a/gcc/ada/Makefile.rtl
+++ b/gcc/ada/Makefile.rtl
@@ -2205,7 +2205,7 @@ ifeq ($(strip $(filter-out powerpc% linux%,$(target_cpu) $(target_os))),)
 endif
 
 # ARM linux, GNU eabi
-ifeq ($(strip $(filter-out arm% linux-gnueabi%,$(target_cpu) $(target_os))),)
+ifeq ($(strip $(filter-out arm% linux-gnueabi% linux-musleabi% linux-muslgnueabi%,$(target_cpu) $(target_os))),)
   LIBGNAT_TARGET_PAIRS = \
   a-intnam.ads<libgnarl/a-intnam__linux.ads \
   s-inmaop.adb<libgnarl/s-inmaop__posix.adb \
diff --git a/gcc/ada/init.c b/gcc/ada/init.c
index 5088ecffc4f1..02a45b3ce7ca 100644
--- a/gcc/ada/init.c
+++ b/gcc/ada/init.c
@@ -53,6 +53,8 @@
 #undef __linux__
 #endif
 
+#include "adaint.h"
+
 #ifdef IN_RTS
 
 #ifdef STANDALONE
@@ -71,7 +73,6 @@
 #include "system.h"
 #endif
 
-#include "adaint.h"
 #include "raise.h"
 
 #ifdef __cplusplus
diff --git a/gcc/ada/libgnarl/s-osinte__linux.ads b/gcc/ada/libgnarl/s-osinte__linux.ads
index 5bf4a5fe1d26..c52cc70dfbab 100644
--- a/gcc/ada/libgnarl/s-osinte__linux.ads
+++ b/gcc/ada/libgnarl/s-osinte__linux.ads
@@ -403,12 +403,6 @@ package System.OS_Interface is
    PTHREAD_RWLOCK_PREFER_WRITER_NP              : constant := 1;
    PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP : constant := 2;
 
-   function pthread_rwlockattr_setkind_np
-     (attr : access pthread_rwlockattr_t;
-      pref : int) return int;
-   pragma Import
-     (C, pthread_rwlockattr_setkind_np, "pthread_rwlockattr_setkind_np");
-
    function pthread_rwlock_init
      (mutex : access pthread_rwlock_t;
       attr  : access pthread_rwlockattr_t) return int;
@@ -470,11 +464,6 @@ package System.OS_Interface is
       protocol : int) return int;
    pragma Import (C, pthread_mutexattr_setprotocol);
 
-   function pthread_mutexattr_setprioceiling
-     (attr        : access pthread_mutexattr_t;
-      prioceiling : int) return int;
-   pragma Import (C, pthread_mutexattr_setprioceiling);
-
    type struct_sched_param is record
       sched_priority : int;  --  scheduling priority
    end record;
diff --git a/gcc/ada/libgnarl/s-taprop__linux.adb b/gcc/ada/libgnarl/s-taprop__linux.adb
index e55cd65e54f6..32d72b3980a6 100644
--- a/gcc/ada/libgnarl/s-taprop__linux.adb
+++ b/gcc/ada/libgnarl/s-taprop__linux.adb
@@ -198,9 +198,6 @@ package body System.Task_Primitives.Operations is
    pragma Import
      (C, GNAT_pthread_condattr_setup, "__gnat_pthread_condattr_setup");
 
-   function GNAT_has_cap_sys_nice return C.int;
-   pragma Import
-     (C, GNAT_has_cap_sys_nice, "__gnat_has_cap_sys_nice");
    --  We do not have pragma Linker_Options ("-lcap"); here, because this
    --  library is not present on many Linux systems. 'libcap' is the Linux
    --  "capabilities" library, called by __gnat_has_cap_sys_nice.
@@ -210,38 +207,6 @@ package body System.Task_Primitives.Operations is
    --  Convert Ada priority to Linux priority. Priorities are 1 .. 99 on
    --  GNU/Linux, so we map 0 .. 98 to 1 .. 99.
 
-   function Get_Ceiling_Support return Boolean;
-   --  Get the value of the Ceiling_Support constant (see below).
-   --  Note well: If this function or related code is modified, it should be
-   --  tested by hand, because automated testing doesn't exercise it.
-
-   -------------------------
-   -- Get_Ceiling_Support --
-   -------------------------
-
-   function Get_Ceiling_Support return Boolean is
-      Ceiling_Support : Boolean := False;
-   begin
-      if Locking_Policy /= 'C' then
-         return False;
-      end if;
-
-      declare
-         function geteuid return Integer;
-         pragma Import (C, geteuid, "geteuid");
-         Superuser : constant Boolean := geteuid = 0;
-         Has_Cap : constant C.int := GNAT_has_cap_sys_nice;
-         pragma Assert (Has_Cap in 0 | 1);
-      begin
-         Ceiling_Support := Superuser or else Has_Cap = 1;
-      end;
-
-      return Ceiling_Support;
-   end Get_Ceiling_Support;
-
-   pragma Warnings (Off, "non-preelaborable call not allowed*");
-   Ceiling_Support : constant Boolean := Get_Ceiling_Support;
-   pragma Warnings (On, "non-preelaborable call not allowed*");
    --  True if the locking policy is Ceiling_Locking, and the current process
    --  has permission to use this policy. The process has permission if it is
    --  running as 'root', or if the capability was set by the setcap command,
@@ -344,7 +309,9 @@ package body System.Task_Primitives.Operations is
    -- Init_Mutex --
    ----------------
 
+   pragma Warnings (Off, "formal parameter * is not referenced");
    function Init_Mutex (L : RTS_Lock_Ptr; Prio : Any_Priority) return C.int is
+   pragma Warnings (On, "formal parameter * is not referenced");
       Mutex_Attr : aliased pthread_mutexattr_t;
       Result, Result_2 : C.int;
 
@@ -356,16 +323,7 @@ package body System.Task_Primitives.Operations is
          return Result;
       end if;
 
-      if Ceiling_Support then
-         Result := pthread_mutexattr_setprotocol
-           (Mutex_Attr'Access, PTHREAD_PRIO_PROTECT);
-         pragma Assert (Result = 0);
-
-         Result := pthread_mutexattr_setprioceiling
-           (Mutex_Attr'Access, Prio_To_Linux_Prio (Prio));
-         pragma Assert (Result = 0);
-
-      elsif Locking_Policy = 'I' then
+      if Locking_Policy = 'I' then
          Result := pthread_mutexattr_setprotocol
            (Mutex_Attr'Access, PTHREAD_PRIO_INHERIT);
          pragma Assert (Result = 0);
@@ -405,11 +363,6 @@ package body System.Task_Primitives.Operations is
             Result := pthread_rwlockattr_init (RWlock_Attr'Access);
             pragma Assert (Result = 0);
 
-            Result := pthread_rwlockattr_setkind_np
-              (RWlock_Attr'Access,
-               PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP);
-            pragma Assert (Result = 0);
-
             Result := pthread_rwlock_init (L.RW'Access, RWlock_Attr'Access);
 
             pragma Assert (Result in 0 | ENOMEM);
diff --git a/gcc/ada/libgnat/s-dwalin.adb b/gcc/ada/libgnat/s-dwalin.adb
index a857b67132af..1e2bb4c545ad 100644
--- a/gcc/ada/libgnat/s-dwalin.adb
+++ b/gcc/ada/libgnat/s-dwalin.adb
@@ -1538,7 +1538,11 @@ package body System.Dwarf_Lines is
             --  Read table
 
             loop
                Read_Aranges_Entry (C, Addr_Size, Ar_Start, Ar_Len);
+               --  Skip references to discarded sections
+               while Ar_Start = 0 and Ar_Len /= 0 loop
+                  Read_Aranges_Entry (C, Addr_Size, Ar_Start, Ar_Len);
+               end loop;
                exit when Ar_Start = Null_Address and Ar_Len = 0;
 
                Len   := uint32 (Ar_Len);
diff --git a/gcc/ada/libgnat/s-parame.ads b/gcc/ada/libgnat/s-parame.ads
index 3d6e345a1ba9..cfe0b4d3ca6c 100644
--- a/gcc/ada/libgnat/s-parame.ads
+++ b/gcc/ada/libgnat/s-parame.ads
@@ -102,7 +102,7 @@ package System.Parameters is
    -- Characteristics of time_t type --
    ------------------------------------

-   time_t_bits : constant := Long_Integer'Size;
+   time_t_bits : constant := Long_Long_Integer'Size;
    --  Number of bits in type time_t

    ----------------------------------------------
diff --git a/gcc/ada/libgnat/s-tsmona__linux.adb b/gcc/ada/libgnat/s-tsmona__linux.adb
index cbebd0652048..c882aa64a6e2 100644
--- a/gcc/ada/libgnat/s-tsmona__linux.adb
+++ b/gcc/ada/libgnat/s-tsmona__linux.adb
@@ -87,45 +87,49 @@ package body Module_Name is
    -- Build_Cache_For_All_Modules --
    ---------------------------------
 
-   procedure Build_Cache_For_All_Modules is
-      type link_map;
-      type link_map_acc is access all link_map;
-      pragma Convention (C, link_map_acc);
-
-      type link_map is record
-         l_addr : Address;
-         --  Base address of the shared object
-
-         l_name : Address;
-         --  Null-terminated absolute file name
-
-         l_ld   : Address;
-         --  Dynamic section
-
-         l_next, l_prev : link_map_acc;
-         --  Chain
-      end record;
-      pragma Convention (C, link_map);
-
-      type r_debug_type is record
-         r_version : Integer;
-         r_map : link_map_acc;
-      end record;
-      pragma Convention (C, r_debug_type);
+   type dl_phdr_info is record
+      dlpi_addr  : Address;
+      dlpi_name  : Address;
+      dlpi_phdr  : Address;
+      dlpi_phnum : unsigned_short;
+   end record;
+   pragma Convention (C, dl_phdr_info);
+
+   type Callback_Type is access function
+     (info : not null access dl_phdr_info;
+      size : size_t;
+      data : Address) return int;
+   pragma Convention (C, Callback_Type);
+
+   function Build_Cache_Callback
+     (info : not null access dl_phdr_info;
+      size : size_t;
+      data : Address) return int;
+   pragma Convention (C, Build_Cache_Callback);
+
+   function Build_Cache_Callback
+     (info : not null access dl_phdr_info;
+      size : size_t;
+      data : Address) return int is
+      pragma Unreferenced (size);
+      pragma Unreferenced (data);
+   begin
+      if Big_String_Conv.To_Pointer (info.dlpi_name) (1) /= ASCII.NUL then
+         --  Discard non-file (like the executable itself or the gate).
+         Add_Module_To_Cache (Value (info.dlpi_name), info.dlpi_addr);
+      end if;
+      return 0;
+   end Build_Cache_Callback;
 
-      r_debug : r_debug_type;
-      pragma Import (C, r_debug, "_r_debug");
+   function dl_iterate_phdr
+     (callback : Callback_Type;
+      data     : Address) return int;
+   pragma Import (C, dl_iterate_phdr, "dl_iterate_phdr");
 
-      lm : link_map_acc;
+   procedure Build_Cache_For_All_Modules is
+      unused : int;
    begin
-      lm := r_debug.r_map;
-      while lm /= null loop
-         if Big_String_Conv.To_Pointer (lm.l_name) (1) /= ASCII.NUL then
-            --  Discard non-file (like the executable itself or the gate).
-            Add_Module_To_Cache (Value (lm.l_name), lm.l_addr);
-         end if;
-         lm := lm.l_next;
-      end loop;
+      unused := dl_iterate_phdr (Build_Cache_Callback'Access, Null_Address);
    end Build_Cache_For_All_Modules;
 
    ---------
diff --git a/gcc/ada/mkdir.c b/gcc/ada/mkdir.c
index c101d968a851..43cdd51e8320 100644
--- a/gcc/ada/mkdir.c
+++ b/gcc/ada/mkdir.c
@@ -34,6 +34,8 @@
 #include <version.h>
 #endif /* __vxworks */
 
+#include "adaint.h"
+
 #ifdef IN_RTS
 #include "runtime.h"
 #include <sys/stat.h>
@@ -53,8 +55,6 @@
 #endif
 #endif
 
-#include "adaint.h"
-
 /*  This function provides a portable binding to the mkdir function.  */
 
 int
diff --git a/gcc/ada/raise.c b/gcc/ada/raise.c
index 70ad6cd3282a..eb92de1b2137 100644
--- a/gcc/ada/raise.c
+++ b/gcc/ada/raise.c
@@ -32,6 +32,8 @@
 /* Shared routines to support exception handling.  __gnat_unhandled_terminate
    is shared between all exception handling mechanisms.  */
 
+#include "adaint.h"
+
 #ifdef IN_RTS
 #include "runtime.h"
 #else
@@ -39,7 +41,6 @@
 #include "system.h"
 #endif
 
-#include "adaint.h"
 #include "raise.h"
 
 #ifdef __cplusplus
diff --git a/gcc/ada/sysdep.c b/gcc/ada/sysdep.c
index 98b3901cb16f..98db6a14c2d5 100644
--- a/gcc/ada/sysdep.c
+++ b/gcc/ada/sysdep.c
@@ -52,6 +52,8 @@
 #undef __linux__
 #endif
 
+#include "adaint.h"
+
 #ifdef IN_RTS
 #define POSIX
 #include "runtime.h"
@@ -74,8 +76,6 @@
 extern struct tm *localtime_r(const time_t *, struct tm *);
 #endif
 
-#include "adaint.h"
-
 /* Don't use macros versions of this functions on VxWorks since they cause
    imcompatible changes in some VxWorks versions */
 #ifdef __vxworks
--- a/gcc/ada/terminals.c	2019-01-08 10:54:04.000000000 +0100
+++ b/gcc/ada/terminals.c	2019-05-15 13:14:09.935742526 +0200
@@ -1136,7 +1136,7 @@
 /* POSIX does not specify how to open the master side of a terminal.Several
    methods are available (system specific):
       1- using a cloning device (USE_CLONE_DEVICE)
-      2- getpt                  (USE_GETPT)
+      2- posix_openpt           (USE_POSIX_OPENPT)
       3- openpty                (USE_OPENPTY)
 
    When using the cloning device method, the macro USE_CLONE_DEVICE should
@@ -1150,7 +1150,7 @@
 #if defined (__APPLE__) || defined (BSD)
 #define USE_OPENPTY
 #elif defined (__linux__)
-#define USE_GETPT
+#define USE_POSIX_OPENPT
 #elif defined (__sun__)
 #define USE_CLONE_DEVICE "/dev/ptmx"
 #elif defined (_AIX)
@@ -1199,8 +1199,8 @@
    int  master_fd   = -1;
    char *slave_name = NULL;
 
-#ifdef USE_GETPT
-  master_fd = getpt ();
+#if defined(USE_POSIX_OPENPT)
+  master_fd = posix_openpt(O_RDWR | O_NOCTTY);
 #elif defined (USE_OPENPTY)
   status = openpty (&master_fd, &slave_fd, NULL, NULL, NULL);
 #elif defined (USE_CLONE_DEVICE)