diff options
-rw-r--r-- | system/gcc/006_as-needed-gold.patch | 58 | ||||
-rw-r--r-- | system/gcc/201-ada.patch | 565 | ||||
-rw-r--r-- | system/gcc/401-libsanitizer-linux.patch | 100 | ||||
-rw-r--r-- | system/gcc/402-libsanitizer-utmp.patch | 75 | ||||
-rw-r--r-- | system/gcc/APKBUILD | 12 | ||||
-rw-r--r-- | system/gcc/ada-musl.patch | 12 |
6 files changed, 806 insertions, 16 deletions
diff --git a/system/gcc/006_as-needed-gold.patch b/system/gcc/006_as-needed-gold.patch new file mode 100644 index 000000000..3dc0aee7a --- /dev/null +++ b/system/gcc/006_as-needed-gold.patch @@ -0,0 +1,58 @@ +# DP: Use --push-state/--pop-state for gold as well when linking libtsan. + +Index: src/gcc/gcc.c +=================================================================== +--- src/gcc/gcc.c ++++ src/gcc/gcc.c +@@ -686,10 +686,10 @@ proper position among the other output f + #define LIBASAN_SPEC STATIC_LIBASAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) + #define LIBASAN_SPEC "%{static-libasan:" LD_STATIC_OPTION "}" \ +- " %{!static-libasan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-libasan:--push-state --no-as-needed}" \ + " -lasan " \ + " %{static-libasan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-libasan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-libasan:--pop-state}" \ + STATIC_LIBASAN_LIBS + #else + #define LIBASAN_SPEC "-lasan" STATIC_LIBASAN_LIBS +@@ -707,10 +707,10 @@ proper position among the other output f + #define LIBTSAN_SPEC STATIC_LIBTSAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) + #define LIBTSAN_SPEC "%{static-libtsan:" LD_STATIC_OPTION "}" \ +- " %{!static-libtsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-libtsan:--push-state --no-as-needed}" \ + " -ltsan " \ + " %{static-libtsan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-libtsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-libtsan:--pop-state}" \ + STATIC_LIBTSAN_LIBS + #else + #define LIBTSAN_SPEC "-ltsan" STATIC_LIBTSAN_LIBS +@@ -728,10 +728,10 @@ proper position among the other output f + #define LIBLSAN_SPEC STATIC_LIBLSAN_LIBS + #elif defined(HAVE_LD_STATIC_DYNAMIC) + #define LIBLSAN_SPEC "%{static-liblsan:" LD_STATIC_OPTION "}" \ +- " %{!static-liblsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-liblsan:--push-state --no-as-needed}" \ + " -llsan " \ + " %{static-liblsan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-liblsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-liblsan:--pop-state}" \ + STATIC_LIBLSAN_LIBS + #else + #define LIBLSAN_SPEC "-llsan" STATIC_LIBLSAN_LIBS +@@ -747,10 +747,10 @@ proper position among the other output f + " %{static-libubsan|static:%:include(libsanitizer.spec)%(link_libubsan)}" + #ifdef HAVE_LD_STATIC_DYNAMIC + #define LIBUBSAN_SPEC "%{static-libubsan:" LD_STATIC_OPTION "}" \ +- " %{!static-libubsan:%{!fuse-ld=gold:--push-state }--no-as-needed}" \ ++ " %{!static-libubsan:--push-state --no-as-needed}" \ + " -lubsan " \ + " %{static-libubsan:" LD_DYNAMIC_OPTION "}" \ +- " %{!static-libubsan:%{fuse-ld=gold:--as-needed;:--pop-state}}" \ ++ " %{!static-libubsan:--pop-state}" \ + STATIC_LIBUBSAN_LIBS + #else + #define LIBUBSAN_SPEC "-lubsan" STATIC_LIBUBSAN_LIBS diff --git a/system/gcc/201-ada.patch b/system/gcc/201-ada.patch new file mode 100644 index 000000000..acb1e1f1b --- /dev/null +++ b/system/gcc/201-ada.patch @@ -0,0 +1,565 @@ +diff --git a/gcc/ada/adadecode.c b/gcc/ada/adadecode.c +index a63b7e7641b0..92155ef2025a 100644 +--- a/gcc/ada/adadecode.c ++++ b/gcc/ada/adadecode.c +@@ -29,6 +29,7 @@ + * * + ****************************************************************************/ + ++#include "adaint.h" /* for a macro version of xstrdup. */ + + #if defined(IN_RTS) + #include "tconfig.h" +@@ -42,8 +43,6 @@ + #include <stdio.h> + #include <ctype.h> + +-#include "adaint.h" /* for a macro version of xstrdup. */ +- + #ifndef ISDIGIT + #define ISDIGIT(c) isdigit(c) + #endif +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 +@@ -85,6 +85,8 @@ + #define _LARGEFILE64_SOURCE 1 + #endif + ++#include "adaint.h" ++ + #ifdef IN_RTS + #include "tconfig.h" + #include "tsystem.h" +@@ -202,8 +204,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 +@@ -316,6 +316,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 "tconfig.h" + #include "tsystem.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 "tconfig.h" + #include "tsystem.h" +@@ -38,8 +40,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 +@@ -52,6 +52,8 @@ + #include "vxWorks.h" + #endif + ++#include "adaint.h" ++ + #ifdef IN_RTS + #include "tconfig.h" + #include "tsystem.h" +@@ -61,8 +63,6 @@ + #include "system.h" + #endif + +-#include "adaint.h" +- + #ifdef __cplusplus + extern "C" { + #endif +diff --git a/gcc/ada/exit.c b/gcc/ada/exit.c +index 6274571c6f04..336b0f8f386b 100644 +--- a/gcc/ada/exit.c ++++ b/gcc/ada/exit.c +@@ -33,6 +33,8 @@ + #include "vxWorks.h" + #endif + ++#include "adaint.h" ++ + #ifdef IN_RTS + #include "tconfig.h" + #include "tsystem.h" +@@ -42,8 +44,6 @@ + #include "system.h" + #endif + +-#include "adaint.h" +- + #ifdef __cplusplus + extern "C" { + #endif +diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in +index 0258f106d404..0416244ae428 100644 +--- a/gcc/ada/gcc-interface/Makefile.in ++++ b/gcc/ada/gcc-interface/Makefile.in +@@ -1574,7 +1574,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 + #include "tconfig.h" + #include "tsystem.h" +@@ -65,7 +67,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 +@@ -394,12 +394,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; +@@ -464,11 +458,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 +@@ -202,9 +202,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. +@@ -214,38 +211,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-static call not allowed in preelaborated unit"); +- Ceiling_Support : constant Boolean := Get_Ceiling_Support; +- pragma Warnings (On, "non-static call not allowed in preelaborated unit"); + -- 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, +@@ -348,7 +313,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; + +@@ -360,16 +327,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); +@@ -409,11 +367,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 +@@ -382,7 +382,7 @@ package body System.Dwarf_Lines is + + function Low (C : Dwarf_Context) return Address is + begin +- return C.Low; ++ return To_Address (To_Integer (C.Low) + C.Load_Slide); + end Low; + + ---------- +@@ -1210,19 +1210,21 @@ package body System.Dwarf_Lines is + -- Discard symbols whose length is 0 + Sz := uint32 (Size (S)); + +- -- Try to filter symbols at the same address. This is a best +- -- effort as they might not be consecutive. +- Addr := uint32 (Value (S) - uint64 (C.Low)); +- if Sz > 0 and then Addr /= Prev_Addr then +- Nbr_Symbols := Nbr_Symbols + 1; +- Prev_Addr := Addr; +- +- if Phase = 2 then +- C.Cache (Nbr_Symbols) := +- (First => Addr, +- Size => Sz, +- Sym => uint32 (Off (S)), +- Line => 0); ++ if Sz > 0 then ++ -- Try to filter symbols at the same address. This is a best ++ -- effort as they might not be consecutive. ++ Addr := uint32 (Value (S) - uint64 (C.Low)); ++ if Addr /= Prev_Addr then ++ Nbr_Symbols := Nbr_Symbols + 1; ++ Prev_Addr := Addr; ++ ++ if Phase = 2 then ++ C.Cache (Nbr_Symbols) := ++ (First => Addr, ++ Size => Sz, ++ Sym => uint32 (Off (S)), ++ Line => 0); ++ end if; + end if; + end if; + +@@ -1267,6 +1269,10 @@ package body System.Dwarf_Lines is + -- Read table + loop + Read_Aranges_Entry (C, Ar_Start, Ar_Len); ++ -- Skip references to discarded sections ++ while Ar_Start = 0 and Ar_Len /= 0 loop ++ Read_Aranges_Entry (C, Ar_Start, Ar_Len); ++ end loop; + exit when Ar_Start = 0 and Ar_Len = 0; + + Len := uint32 (Ar_Len); +diff --git a/gcc/ada/libgnat/s-trasym__dwarf.adb b/gcc/ada/libgnat/s-trasym__dwarf.adb +index db7c5eb4cdd8..3cd60ecbc37b 100644 +--- a/gcc/ada/libgnat/s-trasym__dwarf.adb ++++ b/gcc/ada/libgnat/s-trasym__dwarf.adb +@@ -123,7 +123,8 @@ package body System.Traceback.Symbolic is + -- Return the String contained in Item, up until the first NUL character + + pragma Warnings (Off, "*Add_Module_To_Cache*"); +- procedure Add_Module_To_Cache (Module_Name : String); ++ procedure Add_Module_To_Cache (Module_Name : String; ++ Load_Address : System.Address); + -- To be called by Build_Cache_For_All_Modules to add a new module to the + -- list. May not be referenced. + +@@ -217,12 +218,13 @@ package body System.Traceback.Symbolic is + -- Add_Module_To_Cache -- + ------------------------- + +- procedure Add_Module_To_Cache (Module_Name : String) is ++ procedure Add_Module_To_Cache (Module_Name : String; ++ Load_Address : System.Address) is + Module : Module_Cache_Acc; + Success : Boolean; + begin + Module := new Module_Cache; +- Init_Module (Module.all, Success, Module_Name); ++ Init_Module (Module.all, Success, Module_Name, Load_Address); + if not Success then + Free (Module); + return; +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)); +- 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 "tconfig.h" + #include "tsystem.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 "tconfig.h" + #include "tsystem.h" +@@ -40,7 +42,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 "tconfig.h" +@@ -72,8 +74,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 +diff --git a/gcc/ada/terminals.c b/gcc/ada/terminals.c +index 7025f57d645e..074845584958 100644 +--- a/gcc/ada/terminals.c ++++ b/gcc/ada/terminals.c +@@ -1112,7 +1112,6 @@ __gnat_setup_winsize (void *desc, int rows, int columns) + (HP-UX) */ + #if !defined (__hpux__) && !defined (BSD) && !defined (__APPLE__) \ + && !defined (__rtems__) && !defined (__QNXNTO__) +-# include <termio.h> + #endif + + #include <sys/ioctl.h> +@@ -1159,7 +1158,8 @@ __gnat_setup_winsize (void *desc, int rows, int columns) + #if defined (__APPLE__) || defined (BSD) + #define USE_OPENPTY + #elif defined (__linux__) +-#define USE_GETPT ++#include <pty.h> ++#define USE_OPENPTY + #elif defined (__sun__) + #define USE_CLONE_DEVICE "/dev/ptmx" + #elif defined (_AIX) diff --git a/system/gcc/401-libsanitizer-linux.patch b/system/gcc/401-libsanitizer-linux.patch new file mode 100644 index 000000000..8a662a268 --- /dev/null +++ b/system/gcc/401-libsanitizer-linux.patch @@ -0,0 +1,100 @@ +--- gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_linux.cc.old 2017-10-19 11:23:59.000000000 +0000 ++++ gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_linux.cc 2019-06-27 05:39:48.258332316 +0000 +@@ -752,7 +752,9 @@ + } + + #if SANITIZER_LINUX ++#ifndef SA_RESTORER + #define SA_RESTORER 0x04000000 ++#endif + // Doesn't set sa_restorer if the caller did not set it, so use with caution + //(see below). + int internal_sigaction_norestorer(int signum, const void *act, void *oldact) { +@@ -1687,65 +1689,59 @@ + } + + static void GetPcSpBp(void *context, uptr *pc, uptr *sp, uptr *bp) { +-#if defined(__arm__) + ucontext_t *ucontext = (ucontext_t*)context; ++#if defined(__arm__) + *pc = ucontext->uc_mcontext.arm_pc; + *bp = ucontext->uc_mcontext.arm_fp; + *sp = ucontext->uc_mcontext.arm_sp; + #elif defined(__aarch64__) +- ucontext_t *ucontext = (ucontext_t*)context; + *pc = ucontext->uc_mcontext.pc; + *bp = ucontext->uc_mcontext.regs[29]; + *sp = ucontext->uc_mcontext.sp; + #elif defined(__hppa__) +- ucontext_t *ucontext = (ucontext_t*)context; + *pc = ucontext->uc_mcontext.sc_iaoq[0]; + /* GCC uses %r3 whenever a frame pointer is needed. */ + *bp = ucontext->uc_mcontext.sc_gr[3]; + *sp = ucontext->uc_mcontext.sc_gr[30]; + #elif defined(__x86_64__) + # if SANITIZER_FREEBSD +- ucontext_t *ucontext = (ucontext_t*)context; + *pc = ucontext->uc_mcontext.mc_rip; + *bp = ucontext->uc_mcontext.mc_rbp; + *sp = ucontext->uc_mcontext.mc_rsp; + #elif SANITIZER_NETBSD +- ucontext_t *ucontext = (ucontext_t *)context; + *pc = ucontext->uc_mcontext.__gregs[_REG_RIP]; + *bp = ucontext->uc_mcontext.__gregs[_REG_RBP]; + *sp = ucontext->uc_mcontext.__gregs[_REG_RSP]; + # else +- ucontext_t *ucontext = (ucontext_t*)context; + *pc = ucontext->uc_mcontext.gregs[REG_RIP]; + *bp = ucontext->uc_mcontext.gregs[REG_RBP]; + *sp = ucontext->uc_mcontext.gregs[REG_RSP]; + # endif + #elif defined(__i386__) + # if SANITIZER_FREEBSD +- ucontext_t *ucontext = (ucontext_t*)context; + *pc = ucontext->uc_mcontext.mc_eip; + *bp = ucontext->uc_mcontext.mc_ebp; + *sp = ucontext->uc_mcontext.mc_esp; + #elif SANITIZER_NETBSD +- ucontext_t *ucontext = (ucontext_t *)context; + *pc = ucontext->uc_mcontext.__gregs[_REG_EIP]; + *bp = ucontext->uc_mcontext.__gregs[_REG_EBP]; + *sp = ucontext->uc_mcontext.__gregs[_REG_ESP]; + # else +- ucontext_t *ucontext = (ucontext_t*)context; + *pc = ucontext->uc_mcontext.gregs[REG_EIP]; + *bp = ucontext->uc_mcontext.gregs[REG_EBP]; + *sp = ucontext->uc_mcontext.gregs[REG_ESP]; + # endif +-#elif defined(__powerpc__) || defined(__powerpc64__) +- ucontext_t *ucontext = (ucontext_t*)context; +- *pc = ucontext->uc_mcontext.regs->nip; +- *sp = ucontext->uc_mcontext.regs->gpr[PT_R1]; ++#elif defined(__powerpc64__) ++ *pc = ucontext->uc_mcontext.gp_regs[32]; ++ *sp = ucontext->uc_mcontext.gp_regs[1]; ++ *bp = ucontext->uc_mcontext.gp_regs[31]; ++#elif defined(__powerpc__) ++ *pc = ucontext->uc_mcontext.gregs[32]; ++ *sp = ucontext->uc_mcontext.gregs[1]; + // The powerpc{,64}-linux ABIs do not specify r31 as the frame + // pointer, but GCC always uses r31 when we need a frame pointer. +- *bp = ucontext->uc_mcontext.regs->gpr[PT_R31]; ++ *bp = ucontext->uc_mcontext.gregs[31]; + #elif defined(__sparc__) +- ucontext_t *ucontext = (ucontext_t*)context; + uptr *stk_ptr; + # if defined (__arch64__) + *pc = ucontext->uc_mcontext.mc_gregs[MC_PC]; +@@ -1759,12 +1755,10 @@ + *bp = stk_ptr[15]; + # endif + #elif defined(__mips__) +- ucontext_t *ucontext = (ucontext_t*)context; + *pc = ucontext->uc_mcontext.pc; + *bp = ucontext->uc_mcontext.gregs[30]; + *sp = ucontext->uc_mcontext.gregs[29]; + #elif defined(__s390__) +- ucontext_t *ucontext = (ucontext_t*)context; + # if defined(__s390x__) + *pc = ucontext->uc_mcontext.psw.addr; + # else diff --git a/system/gcc/402-libsanitizer-utmp.patch b/system/gcc/402-libsanitizer-utmp.patch new file mode 100644 index 000000000..7929cd8b9 --- /dev/null +++ b/system/gcc/402-libsanitizer-utmp.patch @@ -0,0 +1,75 @@ +--- gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc.old 2018-05-31 09:58:32.000000000 +0000 ++++ gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc 2019-06-27 08:52:53.520080465 +0000 +@@ -43,9 +43,6 @@ + #include <termios.h> + #include <time.h> + #include <wchar.h> +-#if !SANITIZER_MAC && !SANITIZER_FREEBSD +-#include <utmp.h> +-#endif + + #if !SANITIZER_IOS + #include <net/route.h> +@@ -291,9 +288,6 @@ + int shmctl_shm_stat = (int)SHM_STAT; + #endif + +-#if !SANITIZER_MAC && !SANITIZER_FREEBSD +- unsigned struct_utmp_sz = sizeof(struct utmp); +-#endif + #if !SANITIZER_ANDROID + unsigned struct_utmpx_sz = sizeof(struct utmpx); + #endif +--- gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h.old 2017-10-19 11:23:59.000000000 +0000 ++++ gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.h 2019-06-27 08:53:41.114993442 +0000 +@@ -873,9 +873,6 @@ + extern int shmctl_shm_stat; + #endif + +-#if !SANITIZER_MAC && !SANITIZER_FREEBSD +- extern unsigned struct_utmp_sz; +-#endif + #if !SANITIZER_ANDROID + extern unsigned struct_utmpx_sz; + #endif +--- gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc.old 2017-10-19 11:23:59.000000000 +0000 ++++ gcc-8.3.0/libsanitizer/sanitizer_common/sanitizer_common_interceptors.inc 2019-06-27 08:54:20.530780618 +0000 +@@ -6106,38 +6106,7 @@ + + // FIXME: add other *stat interceptor + +-#if SANITIZER_INTERCEPT_UTMP +-INTERCEPTOR(void *, getutent, int dummy) { +- void *ctx; +- COMMON_INTERCEPTOR_ENTER(ctx, getutent, dummy); +- void *res = REAL(getutent)(dummy); +- if (res) +- COMMON_INTERCEPTOR_INITIALIZE_RANGE(res, __sanitizer::struct_utmp_sz); +- return res; +-} +-INTERCEPTOR(void *, getutid, void *ut) { +- void *ctx; +- COMMON_INTERCEPTOR_ENTER(ctx, getutid, ut); +- void *res = REAL(getutid)(ut); +- if (res) +- COMMON_INTERCEPTOR_INITIALIZE_RANGE(res, __sanitizer::struct_utmp_sz); +- return res; +-} +-INTERCEPTOR(void *, getutline, void *ut) { +- void *ctx; +- COMMON_INTERCEPTOR_ENTER(ctx, getutline, ut); +- void *res = REAL(getutline)(ut); +- if (res) +- COMMON_INTERCEPTOR_INITIALIZE_RANGE(res, __sanitizer::struct_utmp_sz); +- return res; +-} +-#define INIT_UTMP \ +- COMMON_INTERCEPT_FUNCTION(getutent); \ +- COMMON_INTERCEPT_FUNCTION(getutid); \ +- COMMON_INTERCEPT_FUNCTION(getutline); +-#else + #define INIT_UTMP +-#endif + + #if SANITIZER_INTERCEPT_UTMPX + INTERCEPTOR(void *, getutxent, int dummy) { diff --git a/system/gcc/APKBUILD b/system/gcc/APKBUILD index 2ab149205..0cde409b5 100644 --- a/system/gcc/APKBUILD +++ b/system/gcc/APKBUILD @@ -6,7 +6,7 @@ pkgver=8.3.0 [ "$CHOST" != "$CTARGET" ] && _target="-$CTARGET_ARCH" || _target="" pkgname="$pkgname$_target" -pkgrel=0 +pkgrel=1 pkgdesc="The GNU Compiler Collection" url="https://gcc.gnu.org" arch="all" @@ -26,7 +26,7 @@ options="$options !check !dbg strip toolchain" : ${LANG_OBJC:=true} : ${LANG_GO:=true} : ${LANG_FORTRAN:=true} -: ${LANG_ADA:=false} +: ${LANG_ADA:=true} LIBGOMP=true LIBGCC=true @@ -149,11 +149,13 @@ source="https://ftp.gnu.org/gnu/gcc/gcc-$pkgver/gcc-$pkgver.tar.xz 002_all_default-relro.patch 005_all_default-as-needed.patch + 006_as-needed-gold.patch 011_all_default-warn-format-security.patch 012_all_default-warn-trampolines.patch 020_all_msgfmt-libstdc++-link.patch 051_all_libiberty-pic.patch + 201-ada.patch 205-nopie.patch libgcc-always-build-gcceh.a.patch @@ -244,7 +246,7 @@ build() { case "$CTARGET_LIBC" in musl) - # musl does not support mudflap, or libsanitizer + # musl does not support mudflap # libmpx uses secure_getenv and struct _libc_fpstate not present in musl _libc_configure="--disable-libmpx --disable-libmudflap --disable-libsanitizer" _symvers="--disable-symvers" @@ -546,10 +548,12 @@ cd3ba928121e8578ba9f73215e4d81ee3ebbab33e00b04cdfd62b46d21f9536297ae12dc021aad6e dfedf48829cff22ee836ece743de20ad467b40e86c8f4034326a4c32df35b10affd69d6b9ab3382df2871a99ad0c2e99d4342183b59f9bca7f15112eed58ec8d 0016-invalid-tls-model.patch 625c02e03c2f1db04da12cc6a086ec85790a031a13df36486243fd9569cd17f7c8ebeec91ac16cc1f87c3ec1ffe4c421153e98a9aeb5eea35943a6f015d81f50 002_all_default-relro.patch 02b725b220e540077efef741e9d457f9e004fe53ae642a138e214875d076a60f7c2f27de0ed9a4225db2030fc9c3d2c5b0414c895b9eec0f5f48fad70e2fb029 005_all_default-as-needed.patch +9073a5ae46e46a44a77adba183db301194a3666afca07a8444a4c10dc2c087dd41d6065a051b1024454bb37bee06fabf4361e5fae62dab8d4c9620520924f606 006_as-needed-gold.patch 622fdbcbbf2feb86bd839af627ec3613c6d2c77b14d37d31165b19f73f45b3663a203efff5d224f194edb15eb62d3d5885e32f85d1b584f071e580fea4e12664 011_all_default-warn-format-security.patch 03cddde56b2a355f08716c8efcd5616606d42946c87831d77d55570636c46e351e81a04c7dabd3466d9406c40476bead857cfe1eceaf7f0d86dd2757c8cf4a9e 012_all_default-warn-trampolines.patch d35a3ac7e13a4446921a90e1ff3eec1079840c845f9d523c868e24ae21f94cf69ba041de5341ebef96432a6f57598e223381d4286e8fb8baaa25906707f29fbd 020_all_msgfmt-libstdc++-link.patch 0a0bc72b9366158f5d23fff1928e756fdd212433bac6ab1f00d632f241382820db8db5d475ddf11ea020eaf7e2e71b12fb9b1c3c870cf84adf6c2b16f15aabca 051_all_libiberty-pic.patch +a3702c1f642412413d0ffc69f6439a3e101b2b56c16610f94c66556c88e52d01b0b6d1e57bfc5a972668f976c02fbf2fc22bcf707b000867e44744d9eb7b7566 201-ada.patch 98473bcaa77903a223ca9b0d2087c0921b287a2816d308cc32c8fe009e6cbf5dd1ae7fba27794ab8d9c09e117fe534413d91a464d1218474fc123ce0adfdc2c1 205-nopie.patch d08d7ead2de0429e5c9055d5b029ec2be9a8c821d22cecaf9b51f633652c493333f98963d9267fa2fa63850c50ae5eefd5f59e5910ec10d20044dac082182a8b libgcc-always-build-gcceh.a.patch 600fe5098dc54edaa9808fd5717af9dec058953f9ad37d49cfba1db4f7e9a7a8f02019342f75157fc575946fa693259422184de27b7ecc8386d9f3ecc0f7cc5d gcc-4.9-musl-fortify.patch @@ -557,7 +561,7 @@ dbe0ee917fc7668571722364ab7c806731e3a31e8bfa30b4941b28b16b877d2a32b4a3897ef53339 fa62556719449caec6b2b434355bfbcaa5ae55ffe017b3e1f827f66a2aae21b79c571ee7a4ce723ea69169bc3a6447e73650991a200cc372adf2f102677518d7 gcc-pure64.patch 35d6d59f0b7b968f282f56767c9e0823a7bdc5aa0d450aca50fbd802649a7ca608b47671244a3faa208a9b0d6832cabb5a22724157dc817b2c0ad63d09f93282 fix-cxxflags-passing.patch 3f5bc334d9f73d06f5f7c876738d02356acdd08958bea0e4d2095ebf15c2c2ec4e411abdae0297505ae9a1699ca01b17338e853184e84663203b192b0d35fc19 ada-shared.patch -631d4bdef6d8bde34df7978bb53ec28c3c909cf1f87139e5f148138d0f09adc58b41ecf0148bbf50fb4bc916c411e9bf8a2b6c046c75c0e77d754d8c35bcd4d7 ada-musl.patch +a1049167028db900024d3fc4f785e54a5f6eadbbc5d94e2bd3c3ba1a15bf3f2881acb82d647ac3fef7601cc9cb39b55989cffbe9966bd8cf9a4945e1566e936e ada-musl.patch f4ef08454e28c8732db69115e4998ec153399e8d229dd27f923dbdcf57b68128a65640d026cc7f45b58ba8764ab1eb575d4eb6d6dfc550a87a183f8b94e76181 320-libffi-gnulinux.patch 8efd028febb962ae100be32f72f7450c4f77d67ad96a5f47072136cdf47043f9d54835a87c7ab5aaa0fa0108c4c7a97ba2d7732d5aaf2efce70fe1f7e1c39d6e 330-gccgo-link-to-ucontext.patch 24c8708f64b9b7945b3f07e9bbecf17ab8bcde2524f49cbd694ca2f6146ccc3f13bb027db282f326525ea79d50a2868fa3fa2b0d688a914b5ea77bbfd7e5cbe4 331-gccgo-use-real-off_t-type.patch diff --git a/system/gcc/ada-musl.patch b/system/gcc/ada-musl.patch index 464c3d57d..a7c06c155 100644 --- a/system/gcc/ada-musl.patch +++ b/system/gcc/ada-musl.patch @@ -123,15 +123,3 @@ diff -rup gcc-5.1.0/gcc.orig/ada/adaint.h gcc-5.1.0/gcc/ada/adaint.h #endif #if defined (_WIN32) -diff -rup gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in ---- gcc-5.1.0/gcc.orig/ada/gcc-interface/Makefile.in 2015-04-09 20:29:28.000000000 +0000 -+++ gcc-5.1.0/gcc/ada/gcc-interface/Makefile.in 2015-06-02 10:47:23.188910894 +0000 -@@ -1910,7 +1910,7 @@ ifeq ($(strip $(filter-out powerpc% linu - 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<a-intnam-linux.ads \ - s-inmaop.adb<s-inmaop-posix.adb \ |