summaryrefslogtreecommitdiff
path: root/lang/gnat-aux
diff options
context:
space:
mode:
authorFrederic Culot <culot@FreeBSD.org>2011-09-12 17:16:58 +0000
committerFrederic Culot <culot@FreeBSD.org>2011-09-12 17:16:58 +0000
commit7107582dc72ebbfe3ece4f6cc4a05d63ca40368f (patch)
tree61a1d60cd04fc527e9c588021e1b7a3263af881a /lang/gnat-aux
parentSwitch to system ICU, this should fix building on 8.0-i386 (diff)
- Add patches to implement run-time symbolic traceback support
(without it programs requiring this traceback fail to link) - Bump PORTREVISION PR: ports/160616 Submitted by: John Marino <draco@marino.st> (maintainer)
Notes
Notes: svn path=/head/; revision=281681
Diffstat (limited to 'lang/gnat-aux')
-rw-r--r--lang/gnat-aux/Makefile35
-rw-r--r--lang/gnat-aux/files/patch-gcc__ada__adaint.c279
-rw-r--r--lang/gnat-aux/files/patch-gcc__ada__g-trasym-bsd.adb153
-rw-r--r--lang/gnat-aux/files/patch-gcc__ada__gccint__Makefile.in101
4 files changed, 551 insertions, 17 deletions
diff --git a/lang/gnat-aux/Makefile b/lang/gnat-aux/Makefile
index 099c3de49a63..5622be829edf 100644
--- a/lang/gnat-aux/Makefile
+++ b/lang/gnat-aux/Makefile
@@ -7,6 +7,7 @@
PORTNAME= gnat-aux
PORTVERSION= ${SNAPSHOT}
+PORTREVISION= 1
CATEGORIES= lang
MASTER_SITES= http://downloads.dragonlace.net/src/ \
http://dragonlace.mirrors.ada.cx/src/
@@ -64,12 +65,12 @@ BOOTSTRAP_COMPILER= gnat-bootstrap.i386.freebsd.tar.bz2
PLIST_SUB= GNU_HOST=${BLD_TARGET}
PLIST_SUB+= GCC_VER=${GCC_BRANCH}.${GCC_POINT}
-WRKSRC= ${WRKDIR}/build
-GCC_WRKSRC= ${WRKDIR}/gcc-${GCC_BRANCH}-${SNAPSHOT}
+WRKSRC= ${WRKDIR}/gcc-${GCC_BRANCH}-${SNAPSHOT}
+BUILDDIR= ${WRKDIR}/build
+CFG_SCRIPT= ${WRKSRC}/configure
+REVFILE= ${WRKSRC}/gcc/REVISION
BOOTSTRAP_PREFIX= ${WRKDIR}/bootstrap
PKG_PREFIX= ${PREFIX}
-CONFIGURE_SCRIPT= ${GCC_WRKSRC}/configure
-REVFILE= ${GCC_WRKSRC}/gcc/REVISION
LPATH= lib/gcc/${BLD_TARGET}/${GCC_BRANCH}.${GCC_POINT}
LEPATH= libexec/gcc/${BLD_TARGET}/${GCC_BRANCH}.${GCC_POINT}
MAN1= gnatcpp.1 gnatgcc.1 gnatgcov.1
@@ -141,7 +142,7 @@ ADA_CONFIGURE_ENV= CC=${FULL_GNATGCC}
ADA_CONFIGURE_ENV+= PATH=${FULL_PATH}
ADA_CONFIGURE_ENV+= CONFIG_SHELL=${SH}
ADA_MAKE_ENV= PATH=${FULL_PATH}
-ADA_MAKE_ENV+= LD_LIBRARY_PATH=${WRKSRC}/gcc
+ADA_MAKE_ENV+= LD_LIBRARY_PATH=${BUILDDIR}/gcc
# The standard configuration options
CONFIGURE_ARGS= --enable-languages=${LANGS:Q}
@@ -186,32 +187,32 @@ post-extract:
do-configure:
#reset timestamps
- cd ${GCC_WRKSRC}; contrib/gcc_update --touch
- ${RM} -f ${GCC_WRKSRC}/gcc/*/*.info*
- ${TOUCH} ${GCC_WRKSRC}/gcc/cstamp-h.in
+ cd ${WRKSRC}; contrib/gcc_update --touch
+ ${RM} -f ${WRKSRC}/gcc/*/*.info*
+ ${TOUCH} ${WRKSRC}/gcc/cstamp-h.in
- ${MKDIR} ${WRKSRC}
- cd ${WRKSRC} && ${SETENV} ${ADA_CONFIGURE_ENV} \
- ${SH} ${CONFIGURE_SCRIPT} ${CONFIGURE_ARGS}
+ ${MKDIR} ${BUILDDIR}
+ cd ${BUILDDIR} && ${SETENV} ${ADA_CONFIGURE_ENV} \
+ ${CFG_SCRIPT} ${CONFIGURE_ARGS}
do-build:
- cd ${WRKSRC} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} all
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} ${_MAKE_JOBS} all
test: build
.if defined(WITH_TS_ADA)
- cd ${WRKSRC} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-ada
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-ada
.endif
.if defined(WITH_TS_CXX)
- cd ${WRKSRC} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-c++
- cd ${WRKSRC} && ${SETENV} ${ADA_MAKE_ENV} \
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-c++
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} \
${GMAKE} -sk check-target-libstdc++-v3
.endif
.if defined(WITH_TS_GCC)
- cd ${WRKSRC} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-c
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} -sk check-c
.endif
do-install:
- cd ${WRKSRC} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} install-strip DESTDIR=${DESTDIR}
+ cd ${BUILDDIR} && ${SETENV} ${ADA_MAKE_ENV} ${GMAKE} install-strip DESTDIR=${DESTDIR}
post-install:
${RM} -f ${WRKDIR}/PLIST.lib
diff --git a/lang/gnat-aux/files/patch-gcc__ada__adaint.c b/lang/gnat-aux/files/patch-gcc__ada__adaint.c
new file mode 100644
index 000000000000..3e3b787e5de0
--- /dev/null
+++ b/lang/gnat-aux/files/patch-gcc__ada__adaint.c
@@ -0,0 +1,279 @@
+--- gcc/ada/adaint.c
++++ gcc/ada/adaint.c
+@@ -1201,6 +1201,47 @@ __gnat_tmp_name (char *tmp_filename)
+ free (pname);
+ }
+
++#elif defined (__ANDROID__)
++
++ /*
++ * ext2 /ext3/ext4/fat16/fat32 have no path limits
++ * /data/local/tmp normally requires rooted devices, if it even exists
++ * /sdcard is the standard location for external storage. Nativeactivity
++ * manifest needs to authorize its use, otherwise it might not have the
++ * proper permissions.
++ */
++
++ int testfd;
++ char *datadir = getenv ("ANDROID_DATA");
++
++ if (datadir == NULL)
++ strcpy (tmp_filename, "/data/local/tmp/gnat-XXXXXX");
++ else
++ sprintf (tmp_filename, "%s/local/tmp/gnat-XXXXXX", datadir);
++
++ testfd = mkstemp (tmp_filename);
++ if (testfd != -1)
++ {
++ close (testfd);
++ return;
++ }
++
++ char *sdcard = getenv ("EXTERNAL_STORAGE");
++
++ if (sdcard == NULL)
++ strcpy (tmp_filename, "/sdcard/gnat-XXXXXX");
++ else
++ sprintf (tmp_filename, "%s/gnat-XXXXXX", sdcard);
++
++ testfd = mkstemp (tmp_filename);
++ if (testfd != -1)
++ {
++ close (testfd);
++ return;
++ }
++
++ tmpnam (tmp_filename);
++
+ #elif defined (linux) || defined (__FreeBSD__) || defined (__NetBSD__) \
+ || defined (__DragonFly__) \
+ || defined (__OpenBSD__) || defined(__GLIBC__)
+@@ -3433,26 +3474,208 @@ _flush_cache()
+ }
+ #endif
+
+-#if defined (IS_CROSS) \
+- || (! ((defined (sparc) || defined (i386)) && defined (sun) \
+- && defined (__SVR4)) \
+- && ! (defined (linux) && (defined (i386) || defined (__x86_64__))) \
+- && ! (defined (linux) && defined (__ia64__)) \
+- && ! (defined (linux) && defined (powerpc)) \
+- && ! defined (__FreeBSD__) \
+- && ! defined (__DragonFly__) \
+- && ! defined (__Lynx__) \
+- && ! defined (__hpux__) \
+- && ! defined (__APPLE__) \
+- && ! defined (_AIX) \
+- && ! (defined (__alpha__) && defined (__osf__)) \
+- && ! defined (VMS) \
+- && ! defined (__MINGW32__) \
+- && ! (defined (__mips) && defined (__sgi)))
+-
+-/* Dummy function to satisfy g-trasym.o. See the preprocessor conditional
+- just above for a list of native platforms that provide a non-dummy
+- version of this procedure in libaddr2line.a. */
++/* run-time symbolic traceback support */
++#if defined (__DragonFly__) \
++ || defined (__FreeBSD__) \
++ || defined (__OpenBSD__) \
++ || defined (__NetBSD__)
++
++/* The above platforms use the external program /usr/bin/addr2line */
++#define EXTERNAL_SYMTRACE
++
++#elif defined (VMS) \
++ || defined (_AIX) \
++ || defined (__Lynx__) \
++ || defined (__hpux__) \
++ || defined (__APPLE__) \
++ || defined (__MINGW32__) \
++ || (defined (__mips) && defined (__sgi)) \
++ || (defined (__alpha__) && defined (__osf__)) \
++ || (defined (linux) && defined (i386)) \
++ || (defined (linux) && defined (powerpc)) \
++ || (defined (linux) && defined (__ia64__)) \
++ || (defined (linux) && defined (__x86_64__)) \
++ || (defined (__SVR4) && defined (sun) && defined (i386)) \
++ || (defined (__SVR4) && defined (sun) && defined (sparc))
++
++/* The above platforms use the system library libaddr2line.a */
++#define NATIVE_SYMTRACE
++#endif
++
++#if defined (EXTERNAL_SYMTRACE) && !defined (IS_CROSS)
++
++/*
++ Copyright (C) 1999 by Juergen Pfeifer <juergen.pfeifer@gmx.net>
++ Ada for Linux Team (ALT)
++ Heavily modified by John Marino <http://www.dragonlace.net>
++
++ Permission is hereby granted, free of charge, to any person obtaining a
++ copy of this software and associated documentation files (the
++ "Software"), to deal in the Software without restriction, including
++ without limitation the rights to use, copy, modify, merge, publish,
++ distribute, distribute with modifications, sublicense, and/or sell
++ copies of the Software, and to permit persons to whom the Software is
++ furnished to do so, subject to the following conditions:
++
++ The above copyright notice and this permission notice shall be included
++ in all copies or substantial portions of the Software.
++
++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++ OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
++ DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
++ THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++ Except as contained in this notice, the name(s) of the above copyright
++ holders shall not be used in advertising or otherwise to promote the
++ sale, use or other dealings in this Software without prior written
++ authorization.
++*/
++
++#include <sys/types.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <string.h>
++#include <signal.h>
++
++#define CLOSE_SENDPIPE close(sendpipe[0]); close(sendpipe[1])
++#define CLOSE_READPIPE close(readpipe[0]); close(readpipe[1])
++#define DUP2CLOSE(oldfd, newfd) dup2(oldfd, newfd); close(oldfd);
++#define RESTSIG sigaction(SIGPIPE,&oact,NULL)
++
++#define MAX_LINE 1024
++#define PARENT_READ readpipe[0]
++#define CHILD_WRITE readpipe[1]
++#define CHILD_READ sendpipe[0]
++#define PARENT_WRITE sendpipe[1]
++
++void
++convert_addresses (const char *file_name,
++ void *addrs,
++ int n_addr,
++ void *buf,
++ int *len)
++{
++ int max_len = *len;
++ pid_t childpid;
++
++ struct sigaction act, oact;
++
++ int sendpipe[2] = {-1,-1}, /* parent -> child */
++ readpipe[2] = {-1,-1}; /* parent <- child */
++
++ *len = 0;
++ act.sa_handler = SIG_IGN;
++ sigemptyset(&act.sa_mask);
++ act.sa_flags = 0;
++ if (sigaction(SIGPIPE,&act,&oact) < 0)
++ return;
++
++ if (pipe(sendpipe) < 0) { RESTSIG; return; }
++ if (pipe(readpipe) < 0) { CLOSE_SENDPIPE; RESTSIG; return; }
++ if ((childpid = fork()) < 0) {
++ CLOSE_READPIPE;
++ CLOSE_SENDPIPE;
++ RESTSIG;
++ return;
++ }
++
++ if (childpid == 0) { /* child process */
++ close(PARENT_WRITE);
++ close(PARENT_READ);
++ if ((CHILD_READ != STDIN_FILENO) && (CHILD_WRITE != STDOUT_FILENO)) {
++ if ((CHILD_READ == STDOUT_FILENO) && (CHILD_WRITE == STDIN_FILENO)) {
++ const int temp_fd = dup(CHILD_WRITE);
++ close (CHILD_WRITE);
++ DUP2CLOSE (CHILD_READ, STDIN_FILENO);
++ DUP2CLOSE (temp_fd, STDOUT_FILENO);
++ }
++ else if ((CHILD_READ == STDIN_FILENO) && (CHILD_WRITE > 1)) {
++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO);
++ }
++ else if ((CHILD_READ > 1) && (CHILD_WRITE == STDOUT_FILENO)) {
++ DUP2CLOSE (CHILD_READ, STDIN_FILENO);
++ }
++ else if ((CHILD_READ > 1) && (CHILD_WRITE == STDIN_FILENO)) {
++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO);
++ DUP2CLOSE (CHILD_READ, STDIN_FILENO);
++ }
++ else {
++ /* CHILD_READ >= 1 and CHILD_WRITE > 1 */
++ DUP2CLOSE (CHILD_READ, STDIN_FILENO);
++ DUP2CLOSE (CHILD_WRITE, STDOUT_FILENO);
++ }
++ }
++ /* As pointed out by Florian Weimer to JP, it is a security threat to call
++ the script with a user defined environment and using the path. That
++ would be Trojans pleasure. Therefore the absolute path to addr2line
++ and an empty environment is used. That should be safe.
++ */
++ char *const argv[] = { "addr2line",
++ "-e", file_name,
++ "--demangle=gnat",
++ "--functions",
++ "--basenames",
++ NULL };
++ char *const envp[] = { NULL };
++ if (execve("/usr/bin/addr2line", argv, envp) < 0) {
++ close (CHILD_WRITE);
++ close (CHILD_READ);
++ RESTSIG;
++ exit (1);
++ }
++ }
++
++ /* Below this line is parent process */
++ int i, n;
++ char hex[16];
++ char line[MAX_LINE + 1];
++ char *p;
++ char *s = buf;
++ long *trace_address = addrs;
++
++ close(CHILD_WRITE);
++ close(CHILD_READ);
++
++ for(i=0; i < n_addr; i++) {
++ snprintf(hex,sizeof(hex),"%#lx\n",*trace_address);
++ write(PARENT_WRITE,hex,strlen(hex));
++ n = read(PARENT_READ,line,MAX_LINE);
++ if (n<=0)
++ break;
++
++ line[n]=0;
++ /* We have approx. 16 additional chars for "%#lx in " clause.
++ We use this info to prevent a buffer overrun. */
++ if (n + 16 + (*len) > max_len)
++ break;
++
++ p = strchr(line,'\n');
++ if (p) {
++ if (*(p+1)) {
++ *p = 0;
++ *len += snprintf(s, (max_len - (*len)), "%#lx in %s at %s",
++ *trace_address, line, p+1);
++ }
++ else {
++ *len += snprintf(s, (max_len - (*len)), "%#lx at %s",
++ *trace_address, line);
++ }
++ s = buf + (*len);
++ }
++ trace_address += 1;
++ }
++ close (PARENT_WRITE);
++ close (PARENT_READ);
++ RESTSIG;
++}
++
++#elif defined (IS_CROSS) || !defined (NATIVE_SYMTRACE)
++
++/* run-time symbolic traceback support
++ Dummy function to satisfy g-trasym.o. */
+
+ void
+ convert_addresses (const char *file_name ATTRIBUTE_UNUSED,
diff --git a/lang/gnat-aux/files/patch-gcc__ada__g-trasym-bsd.adb b/lang/gnat-aux/files/patch-gcc__ada__g-trasym-bsd.adb
new file mode 100644
index 000000000000..1aea17fcd9c3
--- /dev/null
+++ b/lang/gnat-aux/files/patch-gcc__ada__g-trasym-bsd.adb
@@ -0,0 +1,153 @@
+--- /dev/null 2011-09-08 20:00:00.000000000 -0500
++++ gcc/ada/g-trasym-bsd.adb 2011-09-08 18:27:45.000000000 -0500
+@@ -0,0 +1,150 @@
++------------------------------------------------------------------------------
++-- --
++-- GNAT RUN-TIME COMPONENTS --
++-- --
++-- G N A T . T R A C E B A C K . S Y M B O L I C --
++-- --
++-- B o d y --
++-- --
++-- Copyright (C) 1999-2009, AdaCore --
++-- --
++-- 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 2, 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. See the GNU General Public License --
++-- for more details. You should have received a copy of the GNU General --
++-- Public License distributed with GNAT; see file COPYING. If not, write --
++-- to the Free Software Foundation, 51 Franklin Street, Fifth Floor, --
++-- Boston, MA 02110-1301, USA. --
++-- --
++-- As a special exception, if other files instantiate generics from this --
++-- unit, or you link this unit with other files to produce an executable, --
++-- this unit does not by itself cause the resulting executable to be --
++-- covered by the GNU General Public License. This exception does not --
++-- however invalidate any other reasons why the executable file might be --
++-- covered by the GNU Public License. --
++-- --
++-- GNAT was originally developed by the GNAT team at New York University. --
++-- Extensive contributions were provided by Ada Core Technologies Inc. --
++-- --
++------------------------------------------------------------------------------
++
++-- Run-time symbolic traceback support
++-- This file is based on the work by Juergen Pfiefer which is still used
++-- today to provide symbolic traceback support for gnu/kFreeBSD.
++-- Incorporated in GNAT-AUX by John Marino <http://www.dragonlace.net>
++
++with System.Soft_Links;
++with Ada.Exceptions.Traceback; use Ada.Exceptions.Traceback;
++
++package body GNAT.Traceback.Symbolic is
++
++ package TSL renames System.Soft_Links;
++
++ -- To perform the raw addresses to symbolic form translation we rely on a
++ -- libaddr2line symbolizer which examines debug info from a provided
++ -- executable file name, and an absolute path is needed to ensure the file
++ -- is always found. This is "__gnat_locate_exec_on_path (gnat_argv [0])"
++ -- for our executable file, a fairly heavy operation so we cache the
++ -- result.
++
++ Exename : System.Address;
++ -- Pointer to the name of the executable file to be used on all
++ -- invocations of the libaddr2line symbolization service.
++
++ Exename_Resolved : Boolean := False;
++ -- Flag to indicate whether we have performed the executable file name
++ -- resolution already. Relying on a not null Exename for this purpose
++ -- would be potentially inefficient as this is what we will get if the
++ -- resolution attempt fails.
++
++ ------------------------
++ -- Symbolic_Traceback --
++ ------------------------
++
++ function Symbolic_Traceback (Traceback : Tracebacks_Array) return String is
++
++ procedure convert_addresses
++ (filename : System.Address;
++ addrs : System.Address;
++ n_addrs : Integer;
++ buf : System.Address;
++ len : System.Address);
++ pragma Import (C, convert_addresses, "convert_addresses");
++ -- This is the procedure version of the Ada-aware addr2line. It places
++ -- in BUF a string representing the symbolic translation of the N_ADDRS
++ -- raw addresses provided in ADDRS, looked up in debug information from
++ -- FILENAME. LEN points to an integer which contains the size of the
++ -- BUF buffer at input and the result length at output.
++ --
++ -- Note that this procedure is *not* thread-safe.
++
++ type Argv_Array is array (0 .. 0) of System.Address;
++ gnat_argv : access Argv_Array;
++ pragma Import (C, gnat_argv, "gnat_argv");
++
++ function locate_exec_on_path
++ (c_exename : System.Address) return System.Address;
++ pragma Import (C, locate_exec_on_path, "__gnat_locate_exec_on_path");
++
++ B_Size : constant Integer := 256 * Traceback'Length;
++ Len : Integer := B_Size;
++ Res : String (1 .. B_Size);
++
++ use type System.Address;
++
++ begin
++ -- The symbolic translation of an empty set of addresses is an empty
++ -- string.
++
++ if Traceback'Length = 0 then
++ return "";
++ end if;
++
++ -- If our input set of raw addresses is not empty, resort to the
++ -- libaddr2line service to symbolize it all.
++
++ -- Compute, cache and provide the absolute path to our executable file
++ -- name as the binary file where the relevant debug information is to be
++ -- found. If the executable file name resolution fails, we have no
++ -- sensible basis to invoke the symbolizer at all.
++
++ -- Protect all this against concurrent accesses explicitly, as the
++ -- underlying services are potentially thread unsafe.
++
++ TSL.Lock_Task.all;
++
++ if not Exename_Resolved then
++ Exename := locate_exec_on_path (gnat_argv (0));
++ Exename_Resolved := True;
++ end if;
++
++ if Exename /= System.Null_Address then
++ Len := Res'Length;
++ convert_addresses
++ (Exename, Traceback'Address, Traceback'Length,
++ Res (1)'Address, Len'Address);
++ end if;
++
++ TSL.Unlock_Task.all;
++
++ -- Return what the addr2line symbolizer has produced if we have called
++ -- it (the executable name resolution succeeded), or an empty string
++ -- otherwise.
++
++ if Exename /= System.Null_Address then
++ return Res (1 .. Len);
++ else
++ return "";
++ end if;
++
++ end Symbolic_Traceback;
++
++ function Symbolic_Traceback (E : Exception_Occurrence) return String is
++ begin
++ return Symbolic_Traceback (Tracebacks (E));
++ end Symbolic_Traceback;
++
++end GNAT.Traceback.Symbolic;
diff --git a/lang/gnat-aux/files/patch-gcc__ada__gccint__Makefile.in b/lang/gnat-aux/files/patch-gcc__ada__gccint__Makefile.in
new file mode 100644
index 000000000000..8a4b0193e329
--- /dev/null
+++ b/lang/gnat-aux/files/patch-gcc__ada__gccint__Makefile.in
@@ -0,0 +1,101 @@
+--- gcc/ada/gcc-interface/Makefile.in.orig 2011-09-08 19:57:28.000000000 -0500
++++ gcc/ada/gcc-interface/Makefile.in 2011-09-08 18:35:48.000000000 -0500
+@@ -1184,6 +1184,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
+ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-freebsd.adb \
+@@ -1219,6 +1220,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
+ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-freebsd.adb \
+@@ -1253,6 +1255,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
+ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-dragonfly.adb \
+@@ -1288,6 +1291,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
+ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-dragonfly.adb \
+@@ -1322,6 +1326,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
+ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-openbsd.adb \
+@@ -1357,6 +1362,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
+ g-socthi.adb<g-socthi-bsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-openbsd.adb \
+@@ -1391,6 +1397,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
+ g-socthi.adb<g-socthi-netbsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-netbsd.adb \
+@@ -1435,6 +1442,7 @@
+ a-numaux.ads<a-numaux-x86.ads \
+ g-bytswa.adb<g-bytswa-x86.adb \
+ g-socthi.adb<g-socthi-netbsd.adb \
++ g-trasym.adb<g-trasym-bsd.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-osinte.adb<s-osinte-netbsd.adb \
+@@ -1472,11 +1480,13 @@
+ ifeq ($(strip $(filter-out arm% android eabi,$(targ))),)
+ LIBGNAT_TARGET_PAIRS = \
+ a-intnam.ads<a-intnam-linux.ads \
++ g-trasym.ads<g-trasym-unimplemented.ads \
++ g-trasym.adb<g-trasym-unimplemented.adb \
+ s-inmaop.adb<s-inmaop-posix.adb \
+ s-intman.adb<s-intman-posix.adb \
+ s-linux.ads<s-linux.ads \
+ s-osinte.adb<s-osinte-posix.adb \
+- s-osinte.ads<s-osinte-linux.ads \
++ s-osinte.ads<s-osinte-android.ads \
+ s-osprim.adb<s-osprim-posix.adb \
+ s-taprop.adb<s-taprop-linux.adb \
+ s-tasinf.ads<s-tasinf-linux.ads \
+@@ -1496,12 +1506,14 @@
+ mlib-tgt-specific.adb<mlib-tgt-specific-linux.adb \
+ indepsw.adb<indepsw-gnu.adb
+
+- EXTRA_GNATRTL_TASKING_OBJS=s-linux.o
++ EXTRA_LIBGNAT_SRCS+= signal_android.c
++ EXTRA_LIBGNAT_OBJS+= signal_android.o
++ EXTRA_GNATRTL_TASKING_OBJS= s-linux.o
+ EH_MECHANISM=
+- THREADSLIB = -lpthread
+- GNATLIB_SHARED = gnatlib-shared-dual
+- GMEM_LIB = gmemlib
+- LIBRARY_VERSION := $(LIB_VERSION)
++ THREADSLIB=
++ GNATLIB_SHARED= gnatlib-shared-dual
++ GMEM_LIB= gmemlib
++ LIBRARY_VERSION:= $(LIB_VERSION)
+ endif
+
+