diff options
author | marino <marino@FreeBSD.org> | 2014-04-09 21:52:50 +0800 |
---|---|---|
committer | marino <marino@FreeBSD.org> | 2014-04-09 21:52:50 +0800 |
commit | 6d15a167ddc482f9988d4b455447343ff1d6f8d6 (patch) | |
tree | 1e4b0dd43928e38cedc3b2cb402dbc6b6c770dc8 /lang/gcc-aux | |
parent | 05911206f44f6019303ffec46ed2eb8c57332cad (diff) | |
download | freebsd-ports-gnome-6d15a167ddc482f9988d4b455447343ff1d6f8d6.tar.gz freebsd-ports-gnome-6d15a167ddc482f9988d4b455447343ff1d6f8d6.tar.zst freebsd-ports-gnome-6d15a167ddc482f9988d4b455447343ff1d6f8d6.zip |
lang/gcc-aux: Upgrade from 30 March snapshot to 6 April
Since the April 6 snapshot, a lot of work has entered the GCC tree to
fix the arm-android GNAT port. Currently it passes everything except
stack checking.
A lot of the additional lines in diff-ada will be removed with the
next snapshot. Future plans also include significantly reducing the
size of the diff-cxx-testsuite file too.
Diffstat (limited to 'lang/gcc-aux')
-rw-r--r-- | lang/gcc-aux/Makefile.version | 2 | ||||
-rw-r--r-- | lang/gcc-aux/distinfo | 4 | ||||
-rw-r--r-- | lang/gcc-aux/files/diff-ada | 775 | ||||
-rw-r--r-- | lang/gcc-aux/files/diff-ada-testsuite | 2 | ||||
-rw-r--r-- | lang/gcc-aux/files/diff-core | 31 | ||||
-rw-r--r-- | lang/gcc-aux/files/diff-cxx | 5 | ||||
-rw-r--r-- | lang/gcc-aux/files/diff-cxx-testsuite | 13 | ||||
-rw-r--r-- | lang/gcc-aux/files/diff-fortran | 2 | ||||
-rw-r--r-- | lang/gcc-aux/files/patch-Makefile.def | 10 | ||||
-rw-r--r-- | lang/gcc-aux/files/patch-Makefile.in | 10 |
10 files changed, 810 insertions, 44 deletions
diff --git a/lang/gcc-aux/Makefile.version b/lang/gcc-aux/Makefile.version index 6216ea8a2d63..d82208b800ff 100644 --- a/lang/gcc-aux/Makefile.version +++ b/lang/gcc-aux/Makefile.version @@ -3,7 +3,7 @@ GCC_BRANCH= 4.9 GCC_POINT= 0 GCC_VERSION= ${GCC_BRANCH}.${GCC_POINT} -SNAPSHOT= 20140330 +SNAPSHOT= 20140406 IDENTIFICATION= gcc-${GCC_BRANCH}-${SNAPSHOT} MS_SUBDIR= snapshots/${GCC_BRANCH}-${SNAPSHOT} diff --git a/lang/gcc-aux/distinfo b/lang/gcc-aux/distinfo index ff62f2ffc3ca..c44e9f30de87 100644 --- a/lang/gcc-aux/distinfo +++ b/lang/gcc-aux/distinfo @@ -1,5 +1,5 @@ -SHA256 (gcc-4.9-20140330.tar.bz2) = 34374d87b1a58bf5d11d7bc53b921088281c731bc141907049f2f57f453af104 -SIZE (gcc-4.9-20140330.tar.bz2) = 85486216 +SHA256 (gcc-4.9-20140406.tar.bz2) = 5f9e1c96b5bc000456b7fe7805dca90866cd18b6fbe00e26f3f3e8236d07d0a3 +SIZE (gcc-4.9-20140406.tar.bz2) = 85440592 SHA256 (ada-bootstrap.i386.dragonfly.36A.tar.bz2) = 6b1a6ff0fe0e3bf13c667db2fef177b811329cd998400a1303969a86911cb1c8 SIZE (ada-bootstrap.i386.dragonfly.36A.tar.bz2) = 39357314 SHA256 (ada-bootstrap.i386.freebsd.84.tar.bz2) = b410336cb0e71c8a29dd5f831a17b4b7282e7d590f452475a94c6a625cfc8846 diff --git a/lang/gcc-aux/files/diff-ada b/lang/gcc-aux/files/diff-ada index b3c301897cb8..1763266297c6 100644 --- a/lang/gcc-aux/files/diff-ada +++ b/lang/gcc-aux/files/diff-ada @@ -1993,6 +1993,531 @@ Non_Empty_Node : constant Project_Node_Id := 1; --- /dev/null ++++ gcc/ada/s-intman-android.adb +@@ -0,0 +1,331 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- GNAT RUN-TIME LIBRARY (GNARL) COMPONENTS -- ++-- -- ++-- S Y S T E M . I N T E R R U P T _ M A N A G E M E N T -- ++-- -- ++-- B o d y -- ++-- -- ++-- Copyright (C) 2014, 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- -- ++-- ware Foundation; either version 3, or (at your option) any later ver- -- ++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- ++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- ++-- or FITNESS FOR A PARTICULAR PURPOSE. -- ++-- -- ++-- As a special exception under Section 7 of GPL version 3, you are granted -- ++-- additional permissions described in the GCC Runtime Library Exception, -- ++-- version 3.1, as published by the Free Software Foundation. -- ++-- -- ++-- In particular, you can freely distribute your programs built with the -- ++-- GNAT Pro compiler, including any required library run-time units, using -- ++-- any licensing terms of your choosing. See the AdaCore Software License -- ++-- for full details. -- ++-- -- ++-- GNARL was developed by the GNARL team at Florida State University. -- ++-- Extensive contributions were provided by Ada Core Technologies, Inc. -- ++-- -- ++------------------------------------------------------------------------------ ++ ++-- This is the Android version of this package ++ ++-- Make a careful study of all signals available under the OS, to see which ++-- need to be reserved, kept always unmasked, or kept always unmasked. Be on ++-- the lookout for special signals that may be used by the thread library. ++ ++-- Since this is a multi target file, the signal <-> exception mapping ++-- is simple minded. If you need a more precise and target specific ++-- signal handling, create a new s-intman.adb that will fit your needs. ++ ++-- This file assumes that: ++ ++-- SIGFPE, SIGILL, SIGSEGV and SIGBUS exist. They are mapped as follows: ++-- SIGPFE => Constraint_Error ++-- SIGILL => Program_Error ++-- SIGSEGV => Storage_Error ++-- SIGBUS => Storage_Error ++ ++-- SIGINT exists and will be kept unmasked unless the pragma ++-- Unreserve_All_Interrupts is specified anywhere in the application. ++ ++-- System.OS_Interface contains the following: ++-- SIGADAABORT: the signal that will be used to abort tasks. ++-- Unmasked: the OS specific set of signals that should be unmasked in ++-- all the threads. SIGADAABORT is unmasked by ++-- default ++-- Reserved: the OS specific set of signals that are reserved. ++ ++with System.Task_Primitives; ++ ++package body System.Interrupt_Management is ++ ++ use Interfaces.C; ++ use System.OS_Interface; ++ ++ type Interrupt_List is array (Interrupt_ID range <>) of Interrupt_ID; ++ Exception_Interrupts : constant Interrupt_List := ++ (SIGFPE, SIGILL, SIGSEGV, SIGBUS); ++ ++ Unreserve_All_Interrupts : Interfaces.C.int; ++ pragma Import ++ (C, Unreserve_All_Interrupts, "__gl_unreserve_all_interrupts"); ++ ++ ----------------------- ++ -- Local Subprograms -- ++ ----------------------- ++ ++ procedure Signal_Trampoline ++ (signo : Signal; ++ siginfo : System.Address; ++ ucontext : System.Address; ++ handler : System.Address); ++ pragma Import (C, Signal_Trampoline, "__gnat_sigtramp"); ++ -- Pass the real handler to a speical function that handles unwinding by ++ -- skipping over the kernel signal frame (which doesn't contain any unwind ++ -- information). ++ ++ function State (Int : Interrupt_ID) return Character; ++ pragma Import (C, State, "__gnat_get_interrupt_state"); ++ -- Get interrupt state. Defined in init.c The input argument is the ++ -- interrupt number, and the result is one of the following: ++ ++ procedure Map_Signal ++ (signo : Signal; ++ siginfo : System.Address; ++ ucontext : System.Address); ++ -- This function identifies the Ada exception to be raised using the ++ -- information when the system received a synchronous signal. ++ ++---------------- ++-- Map_Signal -- ++---------------- ++ ++ procedure Map_Signal ++ (signo : Signal; ++ siginfo : System.Address; ++ ucontext : System.Address) ++ is ++ pragma Unreferenced (siginfo); ++ pragma Unreferenced (ucontext); ++ ++ begin ++ ++ -- Check that treatment of exception propagation here is consistent with ++ -- treatment of the abort signal in System.Task_Primitives.Operations. ++ ++ case signo is ++ when SIGFPE => ++ raise Constraint_Error; ++ when SIGILL => ++ raise Program_Error; ++ when SIGSEGV => ++ raise Storage_Error; ++ when SIGBUS => ++ raise Storage_Error; ++ when others => ++ null; ++ end case; ++ end Map_Signal; ++ ++---------------------- ++-- Notify_Exception -- ++---------------------- ++ ++ User : constant Character := 'u'; ++ Runtime : constant Character := 'r'; ++ Default : constant Character := 's'; ++ -- 'n' this interrupt not set by any Interrupt_State pragma ++ -- 'u' Interrupt_State pragma set state to User ++ -- 'r' Interrupt_State pragma set state to Runtime ++ -- 's' Interrupt_State pragma set state to System (use "default" ++ -- system handler) ++ ++ procedure Notify_Exception ++ (signo : Signal; ++ siginfo : System.Address; ++ ucontext : System.Address); ++ -- This function is the signal handler and calls a trampoline subprogram ++ -- that adjusts the unwind information so the ARM unwinder can find it's ++ -- way back to the context of the originating subprogram. Compare with ++ -- __gnat_error_handler for non-tasking programs. ++ ++ ---------------------- ++ -- Notify_Exception -- ++ ---------------------- ++ ++ Signal_Mask : aliased sigset_t; ++ -- The set of signals handled by Notify_Exception ++ ++ procedure Notify_Exception ++ (signo : Signal; ++ siginfo : System.Address; ++ ucontext : System.Address) ++ is ++ Result : Interfaces.C.int; ++ ++ begin ++ -- With the __builtin_longjmp, the signal mask is not restored, so we ++ -- need to restore it explicitly. ??? We don't use __builtin_longjmp ++ -- anymore, so do we still need this? */ ++ ++ Result := pthread_sigmask (SIG_UNBLOCK, Signal_Mask'Access, null); ++ pragma Assert (Result = 0); ++ ++ -- Perform the necessary context adjustments prior to calling the ++ -- trampoline subprogram with the "real" signal handler. ++ ++ Adjust_Context_For_Raise (signo, ucontext); ++ ++ Signal_Trampoline (signo, siginfo, ucontext, Map_Signal'Address); ++ end Notify_Exception; ++ ++ ---------------- ++ -- Initialize -- ++ ---------------- ++ ++ Initialized : Boolean := False; ++ ++ procedure Initialize is ++ act : aliased struct_sigaction; ++ old_act : aliased struct_sigaction; ++ Result : System.OS_Interface.int; ++ ++ Use_Alternate_Stack : constant Boolean := ++ System.Task_Primitives.Alternate_Stack_Size /= 0; ++ -- Whether to use an alternate signal stack for stack overflows ++ ++ begin ++ if Initialized then ++ return; ++ end if; ++ ++ Initialized := True; ++ ++ -- Need to call pthread_init very early because it is doing signal ++ -- initializations. ++ ++ pthread_init; ++ ++ Abort_Task_Interrupt := SIGADAABORT; ++ ++ act.sa_handler := Notify_Exception'Address; ++ ++ -- Setting SA_SIGINFO asks the kernel to pass more than just the signal ++ -- number argument to the handler when it is called. The set of extra ++ -- parameters includes a pointer to the interrupted context, which the ++ -- ZCX propagation scheme needs. ++ ++ -- Most man pages for sigaction mention that sa_sigaction should be set ++ -- instead of sa_handler when SA_SIGINFO is on. In practice, the two ++ -- fields are actually union'ed and located at the same offset. ++ ++ -- On some targets, we set sa_flags to SA_NODEFER so that during the ++ -- handler execution we do not change the Signal_Mask to be masked for ++ -- the Signal. ++ ++ -- This is a temporary fix to the problem that the Signal_Mask is not ++ -- restored after the exception (longjmp) from the handler. The right ++ -- fix should be made in sigsetjmp so that we save the Signal_Set and ++ -- restore it after a longjmp. ++ ++ -- We set SA_NODEFER to be compatible with what is done in ++ -- __gnat_error_handler. ++ ++ Result := sigemptyset (Signal_Mask'Access); ++ pragma Assert (Result = 0); ++ ++ -- Add signals that map to Ada exceptions to the mask ++ ++ for J in Exception_Interrupts'Range loop ++ if State (Exception_Interrupts (J)) /= Default then ++ Result := ++ sigaddset ++ (Signal_Mask'Access, Signal (Exception_Interrupts (J))); ++ pragma Assert (Result = 0); ++ end if; ++ end loop; ++ ++ act.sa_mask := Signal_Mask; ++ ++ pragma Assert (Keep_Unmasked = (Interrupt_ID'Range => False)); ++ pragma Assert (Reserve = (Interrupt_ID'Range => False)); ++ ++ -- Process state of exception signals ++ ++ for J in Exception_Interrupts'Range loop ++ if State (Exception_Interrupts (J)) /= User then ++ Keep_Unmasked (Exception_Interrupts (J)) := True; ++ Reserve (Exception_Interrupts (J)) := True; ++ ++ if State (Exception_Interrupts (J)) /= Default then ++ act.sa_flags := SA_NODEFER + SA_RESTART + SA_SIGINFO; ++ ++ if Use_Alternate_Stack ++ and then Exception_Interrupts (J) = SIGSEGV ++ then ++ act.sa_flags := act.sa_flags + SA_ONSTACK; ++ end if; ++ ++ Result := ++ sigaction ++ (Signal (Exception_Interrupts (J)), act'Unchecked_Access, ++ old_act'Unchecked_Access); ++ pragma Assert (Result = 0); ++ end if; ++ end if; ++ end loop; ++ ++ if State (Abort_Task_Interrupt) /= User then ++ Keep_Unmasked (Abort_Task_Interrupt) := True; ++ Reserve (Abort_Task_Interrupt) := True; ++ end if; ++ ++ -- Set SIGINT to unmasked state as long as it is not in "User" state. ++ -- Check for Unreserve_All_Interrupts last. ++ ++ if State (SIGINT) /= User then ++ Keep_Unmasked (SIGINT) := True; ++ Reserve (SIGINT) := True; ++ end if; ++ ++ -- Check all signals for state that requires keeping them unmasked and ++ -- reserved. ++ ++ for J in Interrupt_ID'Range loop ++ if State (J) = Default or else State (J) = Runtime then ++ Keep_Unmasked (J) := True; ++ Reserve (J) := True; ++ end if; ++ end loop; ++ ++ -- Add the set of signals that must always be unmasked for this target ++ ++ for J in Unmasked'Range loop ++ Keep_Unmasked (Interrupt_ID (Unmasked (J))) := True; ++ Reserve (Interrupt_ID (Unmasked (J))) := True; ++ end loop; ++ ++ -- Add target-specific reserved signals ++ ++ for J in Reserved'Range loop ++ Reserve (Interrupt_ID (Reserved (J))) := True; ++ end loop; ++ ++ -- Process pragma Unreserve_All_Interrupts. This overrides any settings ++ -- due to pragma Interrupt_State: ++ ++ if Unreserve_All_Interrupts /= 0 then ++ Keep_Unmasked (SIGINT) := False; ++ Reserve (SIGINT) := False; ++ end if; ++ ++ -- We do not really have Signal 0. We just use this value to identify ++ -- non-existent signals (see s-intnam.ads). Therefore, Signal should not ++ -- be used in all signal related operations hence mark it as reserved. ++ ++ Reserve (0) := True; ++ end Initialize; ++ ++end System.Interrupt_Management; +--- /dev/null ++++ gcc/ada/s-linux-android.ads +@@ -0,0 +1,112 @@ ++------------------------------------------------------------------------------ ++-- -- ++-- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS -- ++-- -- ++-- S Y S T E M . L I N U X -- ++-- -- ++-- S p e c -- ++-- -- ++-- Copyright (C) 2014, 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- -- ++-- ware Foundation; either version 3, or (at your option) any later ver- -- ++-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- ++-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- ++-- or FITNESS FOR A PARTICULAR PURPOSE. -- ++-- -- ++-- As a special exception under Section 7 of GPL version 3, you are granted -- ++-- additional permissions described in the GCC Runtime Library Exception, -- ++-- version 3.1, as published by the Free Software Foundation. -- ++-- -- ++-- In particular, you can freely distribute your programs built with the -- ++-- GNAT Pro compiler, including any required library run-time units, using -- ++-- any licensing terms of your choosing. See the AdaCore Software License -- ++-- for full details. -- ++-- -- ++-- -- ++------------------------------------------------------------------------------ ++ ++-- This is the Android version of this package ++ ++-- This package encapsulates cpu specific differences between implementations ++-- of GNU/Linux, in order to share s-osinte-linux.ads. ++ ++-- PLEASE DO NOT add any with-clauses to this package or remove the pragma ++-- Preelaborate. This package is designed to be a bottom-level (leaf) package ++ ++package System.Linux is ++ pragma Preelaborate; ++ ++ ------------ ++ -- time_t -- ++ ------------ ++ ++ type time_t is new Long_Integer; ++ ++ ----------- ++ -- Errno -- ++ ----------- ++ ++ EAGAIN : constant := 11; ++ EINTR : constant := 4; ++ EINVAL : constant := 22; ++ ENOMEM : constant := 12; ++ EPERM : constant := 1; ++ ETIMEDOUT : constant := 110; ++ ++ ------------- ++ -- Signals -- ++ ------------- ++ ++ SIGHUP : constant := 1; -- hangup ++ SIGINT : constant := 2; -- interrupt (rubout) ++ SIGQUIT : constant := 3; -- quit (ASCD FS) ++ SIGILL : constant := 4; -- illegal instruction (not reset) ++ SIGTRAP : constant := 5; -- trace trap (not reset) ++ SIGIOT : constant := 6; -- IOT instruction ++ SIGABRT : constant := 6; -- used by abort, replace SIGIOT in the future ++ SIGFPE : constant := 8; -- floating point exception ++ SIGKILL : constant := 9; -- kill (cannot be caught or ignored) ++ SIGBUS : constant := 7; -- bus error ++ SIGSEGV : constant := 11; -- segmentation violation ++ SIGPIPE : constant := 13; -- write on a pipe with no one to read it ++ SIGALRM : constant := 14; -- alarm clock ++ SIGTERM : constant := 15; -- software termination signal from kill ++ SIGUSR1 : constant := 10; -- user defined signal 1 ++ SIGUSR2 : constant := 12; -- user defined signal 2 ++ SIGCLD : constant := 17; -- alias for SIGCHLD ++ SIGCHLD : constant := 17; -- child status change ++ SIGPWR : constant := 30; -- power-fail restart ++ SIGWINCH : constant := 28; -- window size change ++ SIGURG : constant := 23; -- urgent condition on IO channel ++ SIGPOLL : constant := 29; -- pollable event occurred ++ SIGIO : constant := 29; -- I/O now possible (4.2 BSD) ++ SIGLOST : constant := 29; -- File lock lost ++ SIGSTOP : constant := 19; -- stop (cannot be caught or ignored) ++ SIGTSTP : constant := 20; -- user stop requested from tty ++ SIGCONT : constant := 18; -- stopped process has been continued ++ SIGTTIN : constant := 21; -- background tty read attempted ++ SIGTTOU : constant := 22; -- background tty write attempted ++ SIGVTALRM : constant := 26; -- virtual timer expired ++ SIGPROF : constant := 27; -- profiling timer expired ++ SIGXCPU : constant := 24; -- CPU time limit exceeded ++ SIGXFSZ : constant := 25; -- filesize limit exceeded ++ SIGUNUSED : constant := 31; -- unused signal (GNU/Linux) ++ SIGSTKFLT : constant := 16; -- coprocessor stack fault (Linux) ++ SIGLTHRRES : constant := 32; -- GNU/LinuxThreads restart signal ++ SIGLTHRCAN : constant := 33; -- GNU/LinuxThreads cancel signal ++ SIGLTHRDBG : constant := 34; -- GNU/LinuxThreads debugger signal ++ ++ -- struct_sigaction offsets ++ ++ sa_handler_pos : constant := 0; ++ sa_mask_pos : constant := Standard'Address_Size / 8; ++ sa_flags_pos : constant := 4 + sa_mask_pos; ++ ++ SA_SIGINFO : constant := 16#00000004#; ++ SA_ONSTACK : constant := 16#08000000#; ++ SA_RESTART : constant := 16#10000000#; ++ SA_NODEFER : constant := 16#40000000#; ++ ++end System.Linux; +--- gcc/ada/s-osinte-android.ads.orig ++++ gcc/ada/s-osinte-android.ads +@@ -6,7 +6,7 @@ + -- -- + -- S p e c -- + -- -- +--- Copyright (C) 1995-2013, Free Software Foundation, Inc. -- ++-- Copyright (C) 1995-2014, Free Software Foundation, Inc. -- + -- -- + -- GNAT 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- -- +@@ -75,7 +75,7 @@ + -- Signals -- + ------------- + +- Max_Interrupt : constant := 63; ++ Max_Interrupt : constant := 31; + type Signal is new int range 0 .. Max_Interrupt; + for Signal'Size use int'Size; + +@@ -114,9 +114,6 @@ + SIGXFSZ : constant := System.Linux.SIGXFSZ; + SIGUNUSED : constant := System.Linux.SIGUNUSED; + SIGSTKFLT : constant := System.Linux.SIGSTKFLT; +- SIGLTHRRES : constant := System.Linux.SIGLTHRRES; +- SIGLTHRCAN : constant := System.Linux.SIGLTHRCAN; +- SIGLTHRDBG : constant := System.Linux.SIGLTHRDBG; + + SIGADAABORT : constant := SIGABRT; + -- Change this to use another signal for task abort. SIGTERM might be a +@@ -138,13 +135,9 @@ + SIGPROF, + -- To avoid confusing the profiler + +- SIGKILL, SIGSTOP, ++ SIGKILL, SIGSTOP); + -- These two signals actually can't be masked (POSIX won't allow it) + +- SIGLTHRRES, SIGLTHRCAN, SIGLTHRDBG); +- -- These three signals are used by GNU/LinuxThreads starting from glibc +- -- 2.1 (future 2.2). +- + Reserved : constant Signal_Set := (SIGVTALRM, SIGUNUSED); + -- Not clear why these two signals are reserved. Perhaps they are not + -- supported by this version of GNU/Linux ??? +@@ -187,6 +180,8 @@ + + SA_SIGINFO : constant := System.Linux.SA_SIGINFO; + SA_ONSTACK : constant := System.Linux.SA_ONSTACK; ++ SA_NODEFER : constant := System.Linux.SA_NODEFER; ++ SA_RESTART : constant := System.Linux.SA_RESTART; + + SIG_BLOCK : constant := 0; + SIG_UNBLOCK : constant := 1; +@@ -580,17 +575,16 @@ + + private + +- type sigset_t is +- -- array (0 .. OS_Constants.SIZEOF_sigset - 1) of unsigned_char; +- array (1 .. 127) of unsigned_char; ++ type sigset_t is new Interfaces.C.unsigned_long; + pragma Convention (C, sigset_t); + for sigset_t'Alignment use Interfaces.C.unsigned_long'Alignment; + + pragma Warnings (Off); + for struct_sigaction use record + sa_handler at Linux.sa_handler_pos range 0 .. Standard'Address_Size - 1; +- sa_mask at Linux.sa_mask_pos range 0 .. 1023; +- sa_flags at Linux.sa_flags_pos range 0 .. Standard'Address_Size - 1; ++ sa_mask at Linux.sa_mask_pos range 0 .. sigset_t'Size - 1; ++ sa_flags at Linux.sa_flags_pos ++ range 0 .. Interfaces.C.unsigned_long'Size - 1; + end record; + -- We intentionally leave sa_restorer unspecified and let the compiler + -- append it after the last field, so disable corresponding warning. +--- /dev/null +++ gcc/ada/s-osinte-dragonfly.adb @@ -0,0 +1,116 @@ +------------------------------------------------------------------------------ @@ -6953,6 +7478,213 @@ + end Initialize; + +end System.OS_Primitives; +--- /dev/null ++++ gcc/ada/sigtramp-armdroid.c +@@ -0,0 +1,161 @@ ++/**************************************************************************** ++ * * ++ * GNAT COMPILER COMPONENTS * ++ * * ++ * S I G T R A M P * ++ * * ++ * Asm Implementation File * ++ * * ++ * Copyright (C) 2014, Free Software Foundation, Inc. * ++ * * ++ * GNAT 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- * ++ * ware Foundation; either version 3, or (at your option) any later ver- * ++ * sion. GNAT is distributed in the hope that it will be useful, but WITH- * ++ * OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY * ++ * or FITNESS FOR A PARTICULAR PURPOSE. * ++ * * ++ * As a special exception under Section 7 of GPL version 3, you are granted * ++ * additional permissions described in the GCC Runtime Library Exception, * ++ * version 3.1, as published by the Free Software Foundation. * ++ * * ++ * In particular, you can freely distribute your programs built with the * ++ * GNAT Pro compiler, including any required library run-time units, using * ++ * any licensing terms of your choosing. See the AdaCore Software License * ++ * for full details. * ++ * * ++ * GNAT was originally developed by the GNAT team at New York University. * ++ * Extensive contributions were provided by Ada Core Technologies Inc. * ++ * * ++ ****************************************************************************/ ++ ++/****************************************************** ++ * ARM-Android version of the __gnat_sigtramp service * ++ ******************************************************/ ++ ++#include "sigtramp.h" ++/* See sigtramp.h for a general explanation of functionality. */ ++ ++/* ---------------------- ++ -- General comments -- ++ ---------------------- ++ ++ Stubs are generated from toplevel asms, ++ The general idea is to establish CFA as the sigcontext ++ and state where to find the registers as offsets from there. ++ ++ We support stubs for VxWorks and Android, providing unwind info for ++ common registers. We might need variants with support for floating ++ point or altivec registers as well at some point. ++ ++ For Android it would be simpler to write this in Asm since there's only ++ one variant, but to keep it looking like the VxWorks stubs, ++ C is the choice for our toplevel interface. ++ ++ Note that the registers we "restore" here are those to which we have ++ direct access through the system sigcontext structure, which includes ++ only a partial set of the non-volatiles ABI-wise. */ ++ ++/* ----------------------------------------- ++ -- Protypes for our internal asm stubs -- ++ ----------------------------------------- ++ ++ The registers are expected to be at SIGCONTEXT + 12 (reference the ++ sicontext structure in asm/sigcontext.h which describes the first ++ 3 * 4byte fields.) Even though our symbols will remain local, the ++ prototype claims "extern" and not "static" to prevent compiler complaints ++ about a symbol used but never defined. */ ++ ++/* sigtramp stub providing unwind info for common registers. */ ++ ++extern void __gnat_sigtramp_common ++ (int signo, void *siginfo, void *sigcontext, ++ __sigtramphandler_t * handler); ++ ++void __gnat_sigtramp (int signo, void *si, void *sc, ++ __sigtramphandler_t * handler) ++ __attribute__((optimize(2))); ++ ++void __gnat_sigtramp (int signo, void *si, void *ucontext, ++ __sigtramphandler_t * handler) ++{ ++ struct sigcontext *mcontext = &((ucontext_t *) ucontext)->uc_mcontext; ++ ++ __gnat_sigtramp_common (signo, si, mcontext, handler); ++} ++ ++/* asm string construction helpers. */ ++ ++#define STR(TEXT) #TEXT ++/* stringify expanded TEXT, surrounding it with double quotes. */ ++ ++#define S(E) STR(E) ++/* stringify E, which will resolve as text but may contain macros ++ still to be expanded. */ ++ ++/* asm (TEXT) outputs <tab>TEXT. These facilitate the output of ++ multiline contents: */ ++#define TAB(S) "\t" S ++#define CR(S) S "\n" ++ ++#undef TCR ++#define TCR(S) TAB(CR(S)) ++ ++/* Trampoline body block ++ --------------------- */ ++ ++#define SIGTRAMP_BODY \ ++CR("") \ ++TCR("# Allocate frame and also save r2 which is the argument register") \ ++TCR("# containing the sigcontext, so that we can restore it during") \ ++TCR("# unwinding and thereby load the rest of the desired context.") \ ++TCR("stmfd sp!, {r2, r3, lr}") \ ++TCR("# The unwinder undo's these operations in reverse order so starting") \ ++TCR("# from bottom, restore r2 from the current vsp location, move r2 into") \ ++TCR("# the vsp, add 12 bytes to get the start of the register save area") \ ++TCR("# then restore the 15 general purpose registers of the frame which") \ ++TCR("# raised the signal.") \ ++TCR(".save {r0, r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13, r14, r15}") \ ++TCR(".pad #12") \ ++TCR(".movsp r2") \ ++TCR(".save {r2}") \ ++TCR("# Call the real handler. The signo, siginfo and sigcontext") \ ++TCR("# arguments are the same as those we received in r0, r1 and r2.") \ ++TCR("blx r3") \ ++TCR("# Restore our callee-saved items, release our frame and return") \ ++TCR("# (should never get here!).") \ ++TCR("ldmfd sp, {r2, r3, pc}") ++ ++/* Symbol definition block ++ ----------------------- */ ++ ++#define SIGTRAMP_START(SYM) \ ++CR("# " S(SYM) " unwind trampoline") \ ++TCR(".type " S(SYM) ", %function") \ ++CR("") \ ++CR(S(SYM) ":") \ ++TCR(".fnstart") ++ ++/* Symbol termination block ++ ------------------------ */ ++ ++#define SIGTRAMP_END(SYM) \ ++CR(".fnend") \ ++TCR(".size " S(SYM) ", .-" S(SYM)) ++ ++/*---------------------------- ++ -- And now, the real code -- ++ ---------------------------- */ ++ ++/* Text section start. The compiler isn't aware of that switch. */ ++ ++asm (".text\n" ++ TCR(".align 2")); ++ ++/* sigtramp stub for common registers. */ ++ ++#define TRAMP_COMMON __gnat_sigtramp_common ++ ++asm (SIGTRAMP_START(TRAMP_COMMON)); ++asm (SIGTRAMP_BODY); ++asm (SIGTRAMP_END(TRAMP_COMMON)); +--- gcc/ada/sigtramp.h.orig ++++ gcc/ada/sigtramp.h +@@ -6,7 +6,7 @@ + * * + * C Header File * + * * +- * Copyright (C) 2011-2013, Free Software Foundation, Inc. * ++ * Copyright (C) 2011-2014, Free Software Foundation, Inc. * + * * + * GNAT 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- * +@@ -41,10 +41,29 @@ + extern "C" { + #endif + +- typedef void sighandler_t (int signo, void *siginfo, void *sigcontext); ++#ifdef __ANDROID__ ++#include <stdlib.h> ++#include <asm/signal.h> ++#include <asm/sigcontext.h> ++ ++/* Android SDK doesn't define these structs */ ++typedef struct sigcontext mcontext_t; ++ ++typedef struct ucontext ++ { ++ unsigned long uc_flags; ++ struct ucontext *uc_link; ++ stack_t uc_stack; ++ mcontext_t uc_mcontext; ++} ucontext_t; ++#endif ++ ++ /* This typedef signature sometimes conflicts with the sighandler_t from ++ system headers so call it something unique. */ ++ typedef void __sigtramphandler_t (int signo, void *siginfo, void *sigcontext); + + void __gnat_sigtramp (int signo, void *siginfo, void *sigcontext, +- sighandler_t * handler); ++ __sigtramphandler_t * handler); + + /* To be called from an established signal handler. Setup the DWARF CFI + bits letting unwinders walk through the signal frame up into the --- gcc/ada/sysdep.c.orig +++ gcc/ada/sysdep.c @@ -263,6 +263,7 @@ @@ -8136,20 +8868,27 @@ TARGET_ADA_SRCS = --- gcc/ada/gcc-interface/Makefile.in.orig +++ gcc/ada/gcc-interface/Makefile.in -@@ -1044,9 +1044,11 @@ +@@ -1044,25 +1044,27 @@ ifeq ($(strip $(filter-out arm% linux-androideabi,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ a-intnam.ads<a-intnam-linux.ads \ + g-socthi.adb<g-socthi-bsd.adb \ s-inmaop.adb<s-inmaop-posix.adb \ - s-intman.adb<s-intman-posix.adb \ - s-linux.ads<s-linux.ads \ +- s-intman.adb<s-intman-posix.adb \ +- s-linux.ads<s-linux.ads \ ++ s-intman.adb<s-intman-android.adb \ ++ s-linux.ads<s-linux-android.ads \ + s-mudido.adb<s-mudido-affinity.adb \ s-osinte.adb<s-osinte-android.adb \ s-osinte.ads<s-osinte-android.ads \ s-osprim.adb<s-osprim-posix.adb \ -@@ -1056,10 +1058,6 @@ + s-taprop.adb<s-taprop-posix.adb \ +- s-taspri.ads<s-taspri-posix-noaltstack.ads \ ++ s-taspri.ads<s-taspri-posix.ads \ + s-tpopsp.adb<s-tpopsp-posix-foreign.adb \ system.ads<system-linux-armel.ads \ ++ a-exexpr.adb<a-exexpr-gcc.adb \ ++ s-excmac.ads<s-excmac-arm.ads \ $(DUMMY_SOCKETS_TARGET_PAIRS) - TOOLS_TARGET_PAIRS = \ @@ -8158,8 +8897,14 @@ - GNATRTL_SOCKETS_OBJS = EXTRA_GNATRTL_TASKING_OBJS=s-linux.o - EH_MECHANISM= -@@ -1072,6 +1070,7 @@ +- EH_MECHANISM= ++ EXTRA_LIBGNAT_OBJS+=raise-gcc.o sigtramp-armdroid.o ++ EXTRA_GNATRTL_NONTASKING_OBJS+=g-cppexc.o s-excmac.o ++ EH_MECHANISM=-arm + THREADSLIB = + GNATLIB_SHARED = gnatlib-shared-dual + LIBRARY_VERSION := $(LIB_VERSION) +@@ -1072,6 +1074,7 @@ ifeq ($(strip $(filter-out sparc% sun solaris%,$(target_cpu) $(target_vendor) $(target_os))),) LIBGNAT_TARGET_PAIRS_COMMON = \ a-intnam.ads<a-intnam-solaris.ads \ @@ -8167,7 +8912,7 @@ s-inmaop.adb<s-inmaop-posix.adb \ s-intman.adb<s-intman-solaris.adb \ s-mudido.adb<s-mudido-affinity.adb \ -@@ -1114,6 +1113,8 @@ +@@ -1114,6 +1117,8 @@ TOOLS_TARGET_PAIRS=mlib-tgt-specific.adb<mlib-tgt-specific-solaris.adb EH_MECHANISM=-gcc @@ -8176,7 +8921,7 @@ THREADSLIB = -lposix4 -lthread MISCLIB = -lposix4 -lnsl -lsocket SO_OPTS = -Wl,-h, -@@ -1325,12 +1326,17 @@ +@@ -1325,12 +1330,17 @@ # x86 FreeBSD ifeq ($(strip $(filter-out %86 freebsd%,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ @@ -8196,7 +8941,7 @@ s-taprop.adb<s-taprop-posix.adb \ s-taspri.ads<s-taspri-posix.ads \ s-tpopsp.adb<s-tpopsp-posix.adb \ -@@ -1338,11 +1344,12 @@ +@@ -1338,11 +1348,12 @@ $(X86_TARGET_PAIRS) \ system.ads<system-freebsd-x86.ads @@ -8211,7 +8956,7 @@ EH_MECHANISM=-gcc THREADSLIB= -lpthread -@@ -1354,12 +1361,17 @@ +@@ -1354,12 +1365,17 @@ # x86-64 FreeBSD ifeq ($(strip $(filter-out %86_64 freebsd%,$(target_cpu) $(target_os))),) LIBGNAT_TARGET_PAIRS = \ @@ -8231,7 +8976,7 @@ s-taprop.adb<s-taprop-posix.adb \ s-taspri.ads<s-taspri-posix.ads \ s-tpopsp.adb<s-tpopsp-posix.adb \ -@@ -1367,11 +1379,240 @@ +@@ -1367,11 +1383,240 @@ $(X86_64_TARGET_PAIRS) \ system.ads<system-freebsd-x86_64.ads @@ -8474,6 +9219,14 @@ EH_MECHANISM=-gcc THREADSLIB= -lpthread +@@ -3063,6 +3308,7 @@ + socket.o : socket.c gsocket.h + sysdep.o : sysdep.c + raise.o : raise.c raise.h ++sigtramp-armdroid.o : sigtramp-armdroid.c sigtramp.h + sigtramp-armvxw.o : sigtramp-armvxw.c sigtramp.h + sigtramp-ppcvxw.o : sigtramp-ppcvxw.c sigtramp.h + terminals.o : terminals.c --- gnattools/configure.ac.orig +++ gnattools/configure.ac @@ -79,11 +79,27 @@ diff --git a/lang/gcc-aux/files/diff-ada-testsuite b/lang/gcc-aux/files/diff-ada-testsuite index 2ae35594f206..6ddaf4193ba3 100644 --- a/lang/gcc-aux/files/diff-ada-testsuite +++ b/lang/gcc-aux/files/diff-ada-testsuite @@ -113,7 +113,7 @@ +++ gcc/testsuite/gnat.dg/test_raise_from_pure.adb @@ -1,4 +1,4 @@ --- { dg-do run { xfail arm*-*-* } } -+-- { dg-do run { xfail arm*-*-* *-*-openbsd* } } ++-- { dg-do run { xfail *-*-openbsd* } } -- { dg-options "-O2" } -- This is an optimization test and its failure is only a missed optimization. diff --git a/lang/gcc-aux/files/diff-core b/lang/gcc-aux/files/diff-core index bedb57ffed9f..436d6b6ff8d4 100644 --- a/lang/gcc-aux/files/diff-core +++ b/lang/gcc-aux/files/diff-core @@ -328,6 +328,23 @@ + +#define INTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long int" : "int") +#define UINTPTR_TYPE (LONG_TYPE_SIZE == 64 ? "long unsigned int" : "unsigned int") +--- gcc/config/arm/arm.h.orig ++++ gcc/config/arm/arm.h +@@ -937,13 +937,13 @@ + + #ifndef ARM_TARGET2_DWARF_FORMAT + #define ARM_TARGET2_DWARF_FORMAT DW_EH_PE_pcrel ++#endif + + /* ttype entries (the only interesting data references used) + use TARGET2 relocations. */ + #define ASM_PREFERRED_EH_DATA_FORMAT(code, data) \ + (((code) == 0 && (data) == 1 && ARM_UNWIND_INFO) ? ARM_TARGET2_DWARF_FORMAT \ + : DW_EH_PE_absptr) +-#endif + + /* The native (Norcroft) Pascal compiler for the ARM passes the static chain + as an invisible last argument (possible since varargs don't exist in --- /dev/null +++ gcc/config/i386/dragonfly.h @@ -0,0 +1,105 @@ @@ -1414,16 +1431,16 @@ insn-preds.c: s-preds; @true tm-preds.h: s-preds-h; @true tm-constrs.h: s-constrs-h; @true -@@ -3208,6 +3219,9 @@ - -rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-$(version)$(exeext) - -( cd $(DESTDIR)$(bindir) && \ - $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) ) +@@ -3210,6 +3221,9 @@ + ( cd $(DESTDIR)$(bindir) && \ + $(LN) $(GCC_INSTALL_NAME)$(exeext) $(target_noncanonical)-gcc-$(version)$(exeext) ); \ + fi + -if [ -f gnat1$(exeext) ] ; then \ + ( cd $(DESTDIR)$(bindir) && $(LN) $(GCC_INSTALL_NAME)$(exeext) ada$(exeext) ) \ + fi - -if [ ! -f gcc-cross$(exeext) ] ; then \ + -if [ ! -f gcc-cross$(exeext) ] \ + && [ "$(GCC_INSTALL_NAME)" != "$(GCC_TARGET_INSTALL_NAME)" ]; then \ rm -f $(DESTDIR)$(bindir)/$(target_noncanonical)-gcc-tmp$(exeext); \ - ( cd $(DESTDIR)$(bindir) && \ --- libgcc/config.host.orig +++ libgcc/config.host @@ -207,6 +207,11 @@ @@ -1490,7 +1507,7 @@ ;; i[34567]86-*-openbsd2.*|i[34567]86-*openbsd3.[0123]) ;; -@@ -1259,6 +1281,7 @@ +@@ -1262,6 +1284,7 @@ i[34567]86-*-solaris2* | x86_64-*-solaris2.1[0-9]* | \ i[34567]86-*-cygwin* | x86_64-*-cygwin* | \ i[34567]86-*-mingw* | x86_64-*-mingw* | \ diff --git a/lang/gcc-aux/files/diff-cxx b/lang/gcc-aux/files/diff-cxx index 19fbf56cf66f..29ed481a78ed 100644 --- a/lang/gcc-aux/files/diff-cxx +++ b/lang/gcc-aux/files/diff-cxx @@ -1124,13 +1124,16 @@ CTIME_CC=config/locale/generic/time_members.cc --- libstdc++-v3/configure.host.orig +++ libstdc++-v3/configure.host -@@ -230,6 +230,9 @@ +@@ -230,6 +230,12 @@ os_include_dir="os/generic" atomicity_dir="cpu/generic" ;; + dragonfly*) + os_include_dir="os/bsd/dragonfly" + ;; ++ linux-androideabi) ++ os_include_dir="os/bionic" ++ ;; bsd*) # Plain BSD attempts to share FreeBSD files. os_include_dir="os/bsd/freebsd" diff --git a/lang/gcc-aux/files/diff-cxx-testsuite b/lang/gcc-aux/files/diff-cxx-testsuite index 18c599ccf7a9..acb824c886aa 100644 --- a/lang/gcc-aux/files/diff-cxx-testsuite +++ b/lang/gcc-aux/files/diff-cxx-testsuite @@ -113,6 +113,19 @@ // { dg-options "-pthreads -std=gnu++0x" { target *-*-solaris* } } // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } } +--- libstdc++-v3/testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc.orig ++++ libstdc++-v3/testsuite/20_util/shared_ptr/thread/mutex_weaktoshared.cc +@@ -17,8 +17,8 @@ + + // 20.6.6.2 Template class shared_ptr [util.smartptr.shared] + +-// { dg-do run { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* } } +-// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-netbsd* *-*-linux* *-*-gnu* } } ++// { dg-do run { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-gnu* *-*-solaris* *-*-cygwin *-*-darwin* } } ++// { dg-options " -std=gnu++0x -pthread" { target *-*-freebsd* *-*-dragonfly* *-*-netbsd* *-*-linux* *-*-gnu* } } + // { dg-options " -std=gnu++0x -pthreads" { target *-*-solaris* } } + // { dg-options " -std=gnu++0x " { target *-*-cygwin *-*-darwin* } } + --- libstdc++-v3/testsuite/21_strings/basic_string/pthread18185.cc.orig +++ libstdc++-v3/testsuite/21_strings/basic_string/pthread18185.cc @@ -16,8 +16,8 @@ diff --git a/lang/gcc-aux/files/diff-fortran b/lang/gcc-aux/files/diff-fortran index 6781da1ae8e3..ed7bbb169f7d 100644 --- a/lang/gcc-aux/files/diff-fortran +++ b/lang/gcc-aux/files/diff-fortran @@ -31,7 +31,7 @@ ;; --- libgfortran/configure.orig +++ libgfortran/configure -@@ -26337,7 +26337,7 @@ +@@ -26340,7 +26340,7 @@ fi case "$host" in diff --git a/lang/gcc-aux/files/patch-Makefile.def b/lang/gcc-aux/files/patch-Makefile.def deleted file mode 100644 index 37e60a4ec7c1..000000000000 --- a/lang/gcc-aux/files/patch-Makefile.def +++ /dev/null @@ -1,10 +0,0 @@ ---- Makefile.def.orig 2013-10-29 13:37:47.000000000 -0500 -+++ Makefile.def -@@ -336,6 +336,7 @@ dependencies = { module=all-libcpp; on=a - dependencies = { module=all-fixincludes; on=all-libiberty; }; - - dependencies = { module=all-gnattools; on=all-target-libada; }; -+dependencies = { module=all-gnattools; on=all-target-libstdc++-v3; }; - - dependencies = { module=all-lto-plugin; on=all-libiberty; }; - diff --git a/lang/gcc-aux/files/patch-Makefile.in b/lang/gcc-aux/files/patch-Makefile.in deleted file mode 100644 index 1773cd8d65a4..000000000000 --- a/lang/gcc-aux/files/patch-Makefile.in +++ /dev/null @@ -1,10 +0,0 @@ ---- Makefile.in.orig 2014-03-07 07:58:27.000000000 -0500 -+++ Makefile.in -@@ -46730,6 +46730,7 @@ all-stageprofile-libcpp: maybe-all-stage - all-stagefeedback-libcpp: maybe-all-stagefeedback-intl - all-fixincludes: maybe-all-libiberty - all-gnattools: maybe-all-target-libada -+all-gnattools: maybe-all-target-libstdc++-v3 - all-lto-plugin: maybe-all-libiberty - - all-stage1-lto-plugin: maybe-all-stage1-libiberty |