Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 9 Apr 2014 13:52:50 +0000 (UTC)
From:      John Marino <marino@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r350703 - in head/lang/gcc-aux: . files
Message-ID:  <201404091352.s39DqoIE057784@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: marino
Date: Wed Apr  9 13:52:50 2014
New Revision: 350703
URL: http://svnweb.freebsd.org/changeset/ports/350703
QAT: https://qat.redports.org/buildarchive/r350703/

Log:
  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.

Deleted:
  head/lang/gcc-aux/files/patch-Makefile.def
  head/lang/gcc-aux/files/patch-Makefile.in
Modified:
  head/lang/gcc-aux/Makefile.version
  head/lang/gcc-aux/distinfo
  head/lang/gcc-aux/files/diff-ada
  head/lang/gcc-aux/files/diff-ada-testsuite
  head/lang/gcc-aux/files/diff-core
  head/lang/gcc-aux/files/diff-cxx
  head/lang/gcc-aux/files/diff-cxx-testsuite
  head/lang/gcc-aux/files/diff-fortran

Modified: head/lang/gcc-aux/Makefile.version
==============================================================================
--- head/lang/gcc-aux/Makefile.version	Wed Apr  9 13:44:11 2014	(r350702)
+++ head/lang/gcc-aux/Makefile.version	Wed Apr  9 13:52:50 2014	(r350703)
@@ -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}
 

Modified: head/lang/gcc-aux/distinfo
==============================================================================
--- head/lang/gcc-aux/distinfo	Wed Apr  9 13:44:11 2014	(r350702)
+++ head/lang/gcc-aux/distinfo	Wed Apr  9 13:52:50 2014	(r350703)
@@ -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

Modified: head/lang/gcc-aux/files/diff-ada
==============================================================================
--- head/lang/gcc-aux/files/diff-ada	Wed Apr  9 13:44:11 2014	(r350702)
+++ head/lang/gcc-aux/files/diff-ada	Wed Apr  9 13:52:50 2014	(r350703)
@@ -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 @@

Modified: head/lang/gcc-aux/files/diff-ada-testsuite
==============================================================================
--- head/lang/gcc-aux/files/diff-ada-testsuite	Wed Apr  9 13:44:11 2014	(r350702)
+++ head/lang/gcc-aux/files/diff-ada-testsuite	Wed Apr  9 13:52:50 2014	(r350703)
@@ -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.

Modified: head/lang/gcc-aux/files/diff-core
==============================================================================
--- head/lang/gcc-aux/files/diff-core	Wed Apr  9 13:44:11 2014	(r350702)
+++ head/lang/gcc-aux/files/diff-core	Wed Apr  9 13:52:50 2014	(r350703)
@@ -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* | \

Modified: head/lang/gcc-aux/files/diff-cxx
==============================================================================
--- head/lang/gcc-aux/files/diff-cxx	Wed Apr  9 13:44:11 2014	(r350702)
+++ head/lang/gcc-aux/files/diff-cxx	Wed Apr  9 13:52:50 2014	(r350703)
@@ -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"

Modified: head/lang/gcc-aux/files/diff-cxx-testsuite
==============================================================================
--- head/lang/gcc-aux/files/diff-cxx-testsuite	Wed Apr  9 13:44:11 2014	(r350702)
+++ head/lang/gcc-aux/files/diff-cxx-testsuite	Wed Apr  9 13:52:50 2014	(r350703)
@@ -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 @@

Modified: head/lang/gcc-aux/files/diff-fortran
==============================================================================
--- head/lang/gcc-aux/files/diff-fortran	Wed Apr  9 13:44:11 2014	(r350702)
+++ head/lang/gcc-aux/files/diff-fortran	Wed Apr  9 13:52:50 2014	(r350703)
@@ -31,7 +31,7 @@
        ;;
 --- libgfortran/configure.orig
 +++ libgfortran/configure
-@@ -26337,7 +26337,7 @@
+@@ -26340,7 +26340,7 @@
  
    fi
    case "$host" in

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201404091352.s39DqoIE057784>