mingw-w64-gcc-git: Add gfortran patch and libgfortran to gcc-libs deps

Remove libsanitizer patches as they are unmaintained"
This commit is contained in:
Ray Donnelly
2016-04-21 07:04:46 +01:00
parent 1d97468e74
commit 3875e7a95e
20 changed files with 49 additions and 2164 deletions

View File

@@ -1,855 +0,0 @@
From efd07ed77afe493c33581e641a214e0c3975dbef Mon Sep 17 00:00:00 2001
From: Erwin Waterlander <waterlan@xs4all.nl>
Date: Wed, 5 Aug 2015 23:36:03 +0100
Subject: [PATCH 01/19] Relocate libintl
The relocatex-libintl patch adds builtin relocation for executables to the
libintl dll. With this patch the programs are automatically relocatable. There
is no need anymore to add relocation code to your program when you use this
libintl DLL.
The patch was ported from the GnuWin32 port of libintl, which has also builtin
relacation support.
At the moment the relocation support is only active if you compile with MinGW
for Windows. If you compile for Unix/Linux/Cygwin the functionality is
unchanged.
See also:
http://waterlan.home.xs4all.nl/libintl.html
http://sourceforge.net/tracker/?func=detail&atid=302435&aid=3003879&group_id=2435
GnuWin32: http://gnuwin32.sourceforge.net/
Great thanks to GnuWin32 maintainer Kees Zeelenberg.
Erwin Waterlander
waterlan@xs4all.nl
http://waterlan.home.xs4all.nl/
Additional "bogus paths for *nix-style paths" fix by Alexey Pavlov
[jes: fix for 64-bit]
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
intl/Makefile.in | 8 +-
intl/bindtextdom.c | 22 ++++
intl/canonicalize.c | 343 ++++++++++++++++++++++++++++++++++++++++++++++++++++
intl/canonicalize.h | 18 +++
intl/relocatex.c | 284 +++++++++++++++++++++++++++++++++++++++++++
intl/relocatex.h | 41 +++++++
6 files changed, 715 insertions(+), 1 deletion(-)
create mode 100644 intl/canonicalize.c
create mode 100644 intl/canonicalize.h
create mode 100644 intl/relocatex.c
create mode 100644 intl/relocatex.h
diff --git a/intl/Makefile.in b/intl/Makefile.in
index 3dd0b7f..e2b8666 100644
--- a/intl/Makefile.in
+++ b/intl/Makefile.in
@@ -53,6 +53,7 @@ DEFS = -DHAVE_CONFIG_H
COMPILE = $(CC) -c $(CPPFLAGS) $(CFLAGS) $(DEFS) $(DEFS-$@) $(INCLUDES)
HEADERS = \
+ canonicalize.h \
gmo.h \
gettextP.h \
hash-string.h \
@@ -61,6 +62,7 @@ HEADERS = \
eval-plural.h \
localcharset.h \
relocatable.h \
+ relocatex.h \
libgnuintl.h
SOURCES = \
bindtextdom.c \
@@ -81,6 +83,8 @@ SOURCES = \
plural-exp.c \
localcharset.c \
relocatable.c \
+ relocatex.c \
+ canonicalize.c \
localename.c \
log.c \
osdep.c \
@@ -104,6 +108,8 @@ OBJECTS = \
plural-exp.o \
localcharset.o \
relocatable.o \
+ relocatex.o \
+ canonicalize.o \
localename.o \
log.o \
osdep.o \
@@ -158,7 +164,7 @@ install-info install-dvi install-ps install-pdf install-html:
$(OBJECTS): config.h libintl.h
bindtextdom.o dcgettext.o dcigettext.o dcngettext.o dgettext.o \
dngettext.o finddomain.o gettext.o intl-compat.o loadmsgcat.o \
-localealias.o ngettext.o textdomain.o: gettextP.h gmo.h loadinfo.h
+localealias.o ngettext.o textdomain.o: gettextP.h gmo.h loadinfo.h relocatex.h
dcigettext.o loadmsgcat.o: hash-string.h
explodename.o l10nflist.o: loadinfo.h
dcigettext.o loadmsgcat.o plural.o plural-exp.o: plural-exp.h
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
index 6faac57..b7a62d5 100644
--- a/intl/bindtextdom.c
+++ b/intl/bindtextdom.c
@@ -23,6 +23,7 @@
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
+#include <unistd.h>
#ifdef _LIBC
# include <libintl.h>
@@ -91,6 +92,12 @@ static void set_binding_values PARAMS ((const char *domainname,
const char **dirnamep,
const char **codesetp));
+#if ENABLE_RELOCATABLE
+# include "relocatex.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
to be used for the DOMAINNAME message catalog.
If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
@@ -352,8 +359,23 @@ BINDTEXTDOMAIN (domainname, dirname)
const char *domainname;
const char *dirname;
{
+/*
set_binding_values (domainname, &dirname, NULL);
return (char *) dirname;
+*/
+ if (!access (dirname, R_OK)) {
+ set_binding_values (domainname, &dirname, NULL);
+ return (char *) dirname;
+ } else {
+ char *locale_dirname, *installdir = strdup (dirname), *s;
+ if ((s = strrchr (installdir, '/'))) *s = '\0';
+ if ((s = strrchr (installdir, '/'))) *s = '\0';
+ locale_dirname = relocatex (installdir, dirname);
+ set_binding_values (domainname, (const char **) &locale_dirname, NULL);
+ if (installdir)
+ free (installdir);
+ return (char *) locale_dirname;
+ }
}
/* Specify the character encoding in which the messages from the
diff --git a/intl/canonicalize.c b/intl/canonicalize.c
new file mode 100644
index 0000000..5217f30
--- /dev/null
+++ b/intl/canonicalize.c
@@ -0,0 +1,343 @@
+/* Return the canonical absolute name of a given file.
+ Copyright (C) 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <limits.h>
+#include <sys/param.h>
+#include <sys/stat.h>
+#include <errno.h>
+#include <stddef.h>
+#include <malloc.h>
+#ifdef __WIN32__
+# include <stdio.h>
+# include <windows.h>
+//# include <gw32.h>
+#endif /* __WIN32__ */
+#include "canonicalize.h"
+
+#ifndef MAXSYMLINKS
+# define MAXSYMLINKS 20
+#endif
+
+#ifndef __set_errno
+# define __set_errno(Val) errno = (Val)
+#endif
+
+# ifdef VMS
+ /* We want the directory in Unix syntax, not in VMS syntax. */
+# define __getcwd(buf, max) getcwd (buf, max, 0)
+# else
+# define __getcwd getcwd
+# endif
+
+#define weak_alias(local, symbol)
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, Cygwin, OS/2, DOS */
+# define ISDIRSEP(C) ((C) == '/' || (C) == '\\')
+#else
+ /* Unix */
+# define ISDIRSEP(C) ((C) == '/')
+#endif
+
+#ifdef __WIN32__
+char *win2unixpath (char *FileName)
+{
+ char *s = FileName;
+ while (*s) {
+ if (*s == '\\')
+ *s = '/';
+ *s++;
+ }
+ return FileName;
+}
+#endif
+
+/* Return the canonical absolute name of file NAME. A canonical name
+ does not contain any `.', `..' components nor any repeated path
+ separators ('/') or symlinks. All path components must exist. If
+ RESOLVED is null, the result is malloc'd; otherwise, if the
+ canonical name is PATH_MAX chars or more, returns null with `errno'
+ set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars,
+ returns the name in RESOLVED. If the name cannot be resolved and
+ RESOLVED is non-NULL, it contains the path of the first component
+ that cannot be resolved. If the path can be resolved, RESOLVED
+ holds the same value as the value returned.
+ RESOLVED must be at least PATH_MAX long */
+
+static char *
+canonicalize (const char *name, char *resolved)
+{
+ char *rpath, *dest, *extra_buf = NULL;
+ const char *start, *end, *rpath_limit;
+ long int path_max;
+ int num_links = 0, old_errno;
+
+ if (name == NULL)
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ either parameter is a null pointer. We extend this to allow
+ the RESOLVED parameter to be NULL in case the we are expected to
+ allocate the room for the return value. */
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ if (name[0] == '\0')
+ {
+ /* As per Single Unix Specification V2 we must return an error if
+ the name argument points to an empty string. */
+ __set_errno (ENOENT);
+ return NULL;
+ }
+#ifdef __WIN32__
+ {
+ char *lpFilePart;
+ int len;
+// fprintf(stderr, "name: %s\n", name);
+ rpath = resolved ? __builtin_alloca (MAX_PATH) : malloc (MAX_PATH);
+// unix2winpath (name);
+// fprintf(stderr, "name: %s\n", name);
+len = GetFullPathName(name, MAX_PATH, rpath, &lpFilePart);
+/* GetFullPathName returns bogus paths for *nix-style paths, like
+ * /foo/bar - it just prepends current drive to them. Keep them
+ * intact (they need to be for relocation to work!).
+ */
+if (name[0] == '/') {
+ strncpy (rpath, name, MAX_PATH - 1);
+ rpath[MAX_PATH - 1] = '\0';
+ len = strlen (rpath);
+}
+// fprintf(stderr, "rpath: %s\n", rpath);
+ if (len == 0) {
+ //set_werrno;
+ return NULL;
+ }
+ if (len > MAX_PATH) {
+ if (resolved)
+ __set_errno(ENAMETOOLONG);
+ else {
+ rpath = realloc(rpath, len + 2);
+ GetFullPathName(name, len, rpath, &lpFilePart);
+// fprintf(stderr, "rpath: %s\n", rpath);
+ }
+ }
+// if ( ISDIRSEP(name[strlen(name)]) && !ISDIRSEP(rpath[len]) ) {
+// rpath[len] = '\\';
+// rpath[len + 1] = 0;
+// }
+ old_errno = errno;
+ //if (!access (rpath, D_OK) && !ISDIRSEP(rpath[len - 1]) ){
+ if (!access (rpath, R_OK) && !ISDIRSEP(rpath[len - 1]) ){
+ rpath[len] = '\\';
+ rpath[len + 1] = 0;
+ }
+ errno = old_errno;
+ win2unixpath (rpath);
+// fprintf(stderr, "rpath: %s\n", rpath);
+ return resolved ? strcpy(resolved, rpath) : rpath ;
+ }
+#else /* __WIN32__ */
+
+#ifdef PATH_MAX
+ path_max = PATH_MAX;
+#else
+ path_max = pathconf (name, _PC_PATH_MAX);
+ if (path_max <= 0)
+ path_max = 1024;
+#endif
+
+ rpath = resolved ? __builtin_alloca (path_max) : malloc (path_max);
+ rpath_limit = rpath + path_max;
+
+ if (name[0] != '/')
+ {
+ if (!__getcwd (rpath, path_max))
+ {
+ rpath[0] = '\0';
+ goto error;
+ }
+ dest = strchr (rpath, '\0');
+ }
+ else
+ {
+ rpath[0] = '/';
+ dest = rpath + 1;
+ }
+
+ for (start = end = name; *start; start = end)
+ {
+#ifdef _LIBC
+ struct stat64 st;
+#else
+ struct stat st;
+#endif
+ int n;
+
+ /* Skip sequence of multiple path-separators. */
+ while (*start == '/')
+ ++start;
+
+ /* Find end of path component. */
+ for (end = start; *end && *end != '/'; ++end)
+ /* Nothing. */;
+
+ if (end - start == 0)
+ break;
+ else if (end - start == 1 && start[0] == '.')
+ /* nothing */;
+ else if (end - start == 2 && start[0] == '.' && start[1] == '.')
+ {
+ /* Back up to previous component, ignore if at root already. */
+ if (dest > rpath + 1)
+ while ((--dest)[-1] != '/');
+ }
+ else
+ {
+ size_t new_size;
+
+ if (dest[-1] != '/')
+ *dest++ = '/';
+
+ if (dest + (end - start) >= rpath_limit)
+ {
+ ptrdiff_t dest_offset = dest - rpath;
+
+ if (resolved)
+ {
+ __set_errno (ENAMETOOLONG);
+ if (dest > rpath + 1)
+ dest--;
+ *dest = '\0';
+ goto error;
+ }
+ new_size = rpath_limit - rpath;
+ if (end - start + 1 > path_max)
+ new_size += end - start + 1;
+ else
+ new_size += path_max;
+ rpath = realloc (rpath, new_size);
+ rpath_limit = rpath + new_size;
+ if (rpath == NULL)
+ return NULL;
+
+ dest = rpath + dest_offset;
+ }
+
+#ifdef _LIBC
+ dest = __mempcpy (dest, start, end - start);
+#else
+ memcpy (dest, start, end - start);
+ dest += end - start;
+#endif
+ *dest = '\0';
+
+#ifdef _LIBC
+ if (__lxstat64 (_STAT_VER, rpath, &st) < 0)
+#else
+ if (lstat (rpath, &st) < 0)
+#endif
+ goto error;
+
+#if HAVE_READLINK
+ if (S_ISLNK (st.st_mode))
+ {
+ char *buf = __builtin_alloca (path_max);
+ size_t len;
+
+ if (++num_links > MAXSYMLINKS)
+ {
+ __set_errno (ELOOP);
+ goto error;
+ }
+
+ n = __readlink (rpath, buf, path_max);
+ if (n < 0)
+ goto error;
+ buf[n] = '\0';
+
+ if (!extra_buf)
+ extra_buf = __builtin_alloca (path_max);
+
+ len = strlen (end);
+ if ((long int) (n + len) >= path_max)
+ {
+ __set_errno (ENAMETOOLONG);
+ goto error;
+ }
+
+ /* Careful here, end may be a pointer into extra_buf... */
+ memmove (&extra_buf[n], end, len + 1);
+ name = end = memcpy (extra_buf, buf, n);
+
+ if (buf[0] == '/')
+ dest = rpath + 1; /* It's an absolute symlink */
+ else
+ /* Back up to previous component, ignore if at root already: */
+ if (dest > rpath + 1)
+ while ((--dest)[-1] != '/');
+ }
+#endif
+ }
+ }
+ if (dest > rpath + 1 && dest[-1] == '/')
+ --dest;
+ *dest = '\0';
+
+ return resolved ? memcpy (resolved, rpath, dest - rpath + 1) : rpath;
+
+error:
+ if (resolved)
+ strcpy (resolved, rpath);
+ else
+ free (rpath);
+ return NULL;
+
+#endif /* __WIN32__ */
+}
+
+
+char *
+__realpath (const char *name, char *resolved)
+{
+ if (resolved == NULL)
+ {
+ __set_errno (EINVAL);
+ return NULL;
+ }
+
+ return canonicalize (name, resolved);
+}
+weak_alias (__realpath, realpath)
+
+
+char *
+__canonicalize_file_name (const char *name)
+{
+ return canonicalize (name, NULL);
+}
+weak_alias (__canonicalize_file_name, canonicalize_file_name)
+
+char *
+canonicalize_file_name (const char *name)
+{
+ return canonicalize (name, NULL);
+}
diff --git a/intl/canonicalize.h b/intl/canonicalize.h
new file mode 100644
index 0000000..ea707bf
--- /dev/null
+++ b/intl/canonicalize.h
@@ -0,0 +1,18 @@
+#ifndef __CANONICALIZE_H__
+#define __CANONICALIZE_H__ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char *canonicalize_file_name (const char *name);
+
+#ifdef __WIN32__
+char *win2unixpath (char *path);
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __CANONICALIZE_H__ */
diff --git a/intl/relocatex.c b/intl/relocatex.c
new file mode 100644
index 0000000..a2b7438
--- /dev/null
+++ b/intl/relocatex.c
@@ -0,0 +1,284 @@
+/* Provide relocatable packages.
+ Copyright (C) 2003 Free Software Foundation, Inc.
+ Written by Bruno Haible <bruno@clisp.org>, 2003.
+
+ This program is free software; you can redistribute it and/or modify it
+ under the terms of the GNU Library General Public License as published
+ by the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Library General Public License for more details.
+
+ You should have received a copy of the GNU Library General Public
+ License along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+ USA. */
+
+
+/* Specification. */
+#include <errno.h>
+#define _GNU_SOURCE
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <unistd.h>
+/* #include <path.h> */
+#include "relocatex.h"
+#include "canonicalize.h"
+/* #include <gw32.h> */
+
+
+#if defined _WIN32 || defined __WIN32__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+//# define __GW32__
+//# include <winx/errnox.h>
+#endif
+#define set_werrno
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+ /* Win32, Cygwin, OS/2, DOS */
+# define ISDIRSEP(C) ((C) == '/' || (C) == '\\')
+#else
+ /* Unix */
+# define ISDIRSEP(C) ((C) == '/')
+#endif
+
+/* Original installation prefix. */
+static char *orig_prefix = NULL;
+static size_t orig_prefix_len = 0;
+/* Current installation prefix. */
+static char *curr_prefix = NULL;
+static size_t curr_prefix_len = 0;
+/* These prefixes do not end in a slash. Anything that will be concatenated
+ to them must start with a slash. */
+
+
+int win2posixpath (const char *winpath, char *posixpath)
+{
+ strcpy (posixpath, winpath);
+ win2unixpath (posixpath);
+ return 0;
+}
+
+
+/* Sets the original and the current installation prefix of this module.
+ Relocation simply replaces a pathname starting with the original prefix
+ by the corresponding pathname with the current prefix instead. Both
+ prefixes should be directory names without trailing slash (i.e. use ""
+ instead of "/"). */
+static char *
+set_orig_prefix (const char *orig_prefix_arg)
+{
+ char *memory;
+// printf ("orig_prefix_arg: %s\n", orig_prefix_arg);
+ if (!orig_prefix_arg) {
+ orig_prefix = NULL;
+ orig_prefix_len = 0;
+ return NULL;
+ }
+ if (orig_prefix)
+ free (orig_prefix);
+
+ memory = canonicalize_file_name (orig_prefix_arg);
+// printf ("memory: %s\n", memory);
+// memory = (char *) malloc (orig_prefix_len + 1);
+ if (!memory) {
+ set_werrno;
+ orig_prefix = NULL;
+ orig_prefix_len = 0;
+ return NULL;
+ }
+ win2unixpath (memory);
+// win2posixpath (orig_prefix_arg, memory);
+ orig_prefix = memory;
+ orig_prefix_len = strlen (orig_prefix);
+// printf ("orig_prefix: %s\n", orig_prefix);
+ if (ISDIRSEP (orig_prefix[orig_prefix_len-1])) {
+ orig_prefix[orig_prefix_len-1] = '\0';
+ orig_prefix_len--;
+ }
+// printf ("orig_prefix: %s\n", orig_prefix);
+// printf ("orig_prefix_len: %d\n", orig_prefix_len);
+ return orig_prefix;
+}
+
+#if defined __WIN32__
+static char *
+set_current_prefix (const char *ModuleName)
+{
+ LPTSTR curr_prefix_arg, q, lpFilePart;
+ DWORD len;
+ int nDIRSEP = 0;
+
+ if (curr_prefix)
+ free (curr_prefix);
+ curr_prefix_arg = malloc (MAX_PATH * sizeof (TCHAR));
+ if (!curr_prefix_arg) {
+ set_werrno;
+ curr_prefix = NULL;
+ curr_prefix_len = 0;
+ return NULL;
+ }
+ if (ModuleName) {
+// printf ("ModuleName: %s\n", ModuleName);
+ len = SearchPath (NULL, ModuleName, ".DLL", MAX_PATH, curr_prefix_arg, &lpFilePart);
+ if (len) {
+// printf ("ModulePath: %s\n", curr_prefix_arg);
+// printf ("FilePart: %s\n", lpFilePart);
+ }
+ }
+ if (!ModuleName || !len) {
+ len = GetModuleFileName (NULL, curr_prefix_arg, MAX_PATH);
+ if (!len) {
+ set_werrno;
+ curr_prefix = NULL;
+ curr_prefix_len = 0;
+ return NULL;
+ }
+ }
+// strncpy (curr_prefix_arg, ModuleName, MAX_PATH);
+// printf ("curr_prefix_arg: %s\n", curr_prefix_arg);
+ win2posixpath (curr_prefix_arg, curr_prefix_arg);
+ curr_prefix = curr_prefix_arg;
+ q = curr_prefix_arg + len - 1;
+ /* strip name of executable and its directory */
+ while (!ISDIRSEP (*q) && (q > curr_prefix_arg) && nDIRSEP < 2) {
+ q--;
+ if (ISDIRSEP (*q)) {
+ *q = '\0';
+ nDIRSEP++;
+ }
+ }
+ curr_prefix_len = q - curr_prefix_arg;
+// printf ("curr_prefix: %s\n", curr_prefix);
+// printf ("curr_prefix_len: %d\n", curr_prefix_len);
+ return curr_prefix;
+}
+
+char *getshortpath (const char *longpath)
+{
+ char *shortpath = NULL;
+ DWORD len, res;
+
+// printf ("longpath: %s\n", longpath);
+ len = GetShortPathName(longpath, shortpath, 0);
+// printf ("len: %ld\n", len);
+ if (!len) {
+// WinErr ("getshortpath: len = 0");
+ set_werrno;
+ return (char *) longpath;
+ }
+ shortpath = (char *) malloc (len + 1);
+ if (!shortpath) {
+// WinErr ("getshortpath: malloc");
+ set_werrno;
+ return (char *) longpath;
+ }
+ res = GetShortPathName(longpath, shortpath, len);
+// printf ("res: %ld\n", res);
+ if (!res) {
+// WinErr ("getshortpath: res = 0");
+ free (shortpath);
+ set_werrno;
+ return (char *) longpath;
+ }
+// printf ("shortpath: %s\n", shortpath);
+ return shortpath;
+}
+
+char *relocaten (const char *ModuleName, const char *path)
+{
+ char *relative_path, *relocated_path, *relocated_short_path;
+ int relative_path_len;
+
+ if (!curr_prefix)
+ set_current_prefix (ModuleName);
+// printf ("path: %s\n", path);
+// printf ("orig_prefix: %s\n", orig_prefix);
+// printf ("curr_prefix: %s\n", curr_prefix);
+// if (strncmp (orig_prefix, path, orig_prefix_len))
+// if (strcmp (orig_prefix, path))
+// return (char *) path;
+ relative_path = (char *) path + orig_prefix_len;
+// printf ("relative_path: %s\n", relative_path);
+ relative_path_len = strlen (relative_path);
+ relocated_path = malloc (curr_prefix_len + relative_path_len + 1);
+ strcpy (relocated_path, curr_prefix);
+ strcat (relocated_path, relative_path);
+// printf ("relocated_path: %s\n", relocated_path);
+ relocated_short_path = getshortpath (relocated_path);
+// printf ("relocated_short_path: %s\n", relocated_short_path);
+ if (relocated_short_path) {
+ if (relocated_short_path != relocated_path)
+ free (relocated_path);
+ return relocated_short_path;
+ } else
+ return relocated_path;
+}
+
+#else // __WIN32__
+char *relocaten (const char *ModuleName, const char *path)
+{
+ // dummy function for Unix/Linux
+ return (char *)path;
+}
+#endif
+
+char *relocaten2 (const char *ModuleName, const char *installdir, const char *path)
+{
+ set_orig_prefix (installdir);
+ return relocaten (ModuleName, path);
+}
+
+char *relocatenx (const char *ModuleName, const char *installdir, const char *path)
+{
+ char *p;
+
+ set_orig_prefix (installdir);
+ if (access (path, R_OK))
+ p = relocaten (ModuleName, path);
+ else
+ p = (char *) path;
+// printf ("relocatenx: %s\n", p);
+ return p;
+}
+
+char *relocate2 (const char *installdir, const char *path)
+{
+ return relocaten2 (NULL, installdir, path);
+}
+
+char *relocatex (const char *installdir, const char *path)
+{
+ return relocatenx (NULL, installdir, path);
+}
+
+char *relocatepx (const char *cprefix, const char *installdir, const char *path)
+{
+ if (curr_prefix)
+ free (curr_prefix);
+ curr_prefix = strdup (cprefix);
+ return relocatex (installdir, path);
+}
+
+static char *get_orig_prefix (void)
+{
+ return orig_prefix;
+}
+
+static char *get_curr_prefix (void)
+{
+ return curr_prefix;
+}
+
+static char *set_curr_prefix (const char *ModuleName)
+{
+ if (curr_prefix)
+ free (curr_prefix);
+ set_current_prefix (ModuleName);
+ return curr_prefix;
+}
diff --git a/intl/relocatex.h b/intl/relocatex.h
new file mode 100644
index 0000000..5cc7c51
--- /dev/null
+++ b/intl/relocatex.h
@@ -0,0 +1,41 @@
+/*
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GnuWin C Library.
+
+ The GnuWin C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GnuWin C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GnuWin32 C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#ifndef __RELOCATE_H__
+#define __RELOCATE_H__ 1
+
+/* #include <libc-dll.h> */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+char *relocaten (const char *ModuleName, const char *path);
+char *relocaten2 (const char *ModuleName, const char *installdir, const char *path);
+char *relocatenx (const char *ModuleName, const char *installdir, const char *path);
+char *relocate2 (const char *installdir, const char *path);
+char *relocatex (const char *installdir, const char *path);
+
+#ifdef __cplusplus
+}
+#endif
+
+//#endif /* __GW32__ */
+
+#endif /* __RELOCATE_H__ */
--
2.7.1

View File

@@ -1,130 +0,0 @@
From b69c4aa211f39ef6ffb11bb0f4956904d424eeda Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Wed, 5 Aug 2015 23:36:07 +0100
Subject: [PATCH 02/19] Windows: Follow Posix dir-exists semantics more closely
Make Windows behave the same as Posix in the consideration
of whether folder "/doesnt-exist/.." is a valid
path. In Posix, it isn't.
A concrete instance of when this matters is when cross
compiling GNU/Linux glibc on Windows.
---
libcpp/files.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 87 insertions(+)
diff --git a/libcpp/files.c b/libcpp/files.c
index 5aa8d1a..df95f6d 100644
--- a/libcpp/files.c
+++ b/libcpp/files.c
@@ -30,6 +30,13 @@ along with this program; see the file COPYING3. If not see
#include "md5.h"
#include <dirent.h>
+/* Needed for stat_st_mode_symlink below */
+#if defined(_WIN32)
+# include <windows.h>
+# define S_IFLNK 0xF000
+# define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#endif
+
/* Variable length record files on VMS will have a stat size that includes
record control characters that won't be included in the read size. */
#ifdef VMS
@@ -198,6 +205,49 @@ static int pchf_save_compare (const void *e1, const void *e2);
static int pchf_compare (const void *d_p, const void *e_p);
static bool check_file_against_entries (cpp_reader *, _cpp_file *, bool);
+#if defined(_WIN32)
+
+static int stat_st_mode_symlink (char const* path, struct stat* buf)
+{
+ WIN32_FILE_ATTRIBUTE_DATA attr;
+ memset(buf,0,sizeof(*buf));
+ int err = GetFileAttributesExA (path, GetFileExInfoStandard, &attr) ? 0 : 1;
+ if (!err)
+ {
+ WIN32_FIND_DATAA finddata;
+ HANDLE h = FindFirstFileA (path, &finddata);
+ if (h != INVALID_HANDLE_VALUE)
+ {
+ FindClose (h);
+ if ((finddata.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) &&
+ (finddata.dwReserved0 == IO_REPARSE_TAG_SYMLINK))
+ buf->st_mode = S_IFLNK;
+ else if (finddata.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
+ buf->st_mode = S_IFDIR;
+ else if (finddata.dwFileAttributes & FILE_ATTRIBUTE_ARCHIVE)
+ buf->st_mode = S_IFDIR;
+ else
+ buf->st_mode = S_IFREG;
+ buf->st_mode |= S_IREAD;
+ if (!(finddata.dwFileAttributes & FILE_ATTRIBUTE_READONLY))
+ buf->st_mode |= S_IWRITE;
+ }
+ else
+ {
+ buf->st_mode = S_IFDIR;
+ }
+ return 0;
+ }
+ return -1;
+}
+
+#else
+
+#define stat_st_mode_symlink (_name, _buf) stat ((_name), (_buf))
+
+#endif
+
+
/* Given a filename in FILE->PATH, with the empty string interpreted
as <stdin>, open it.
@@ -227,6 +277,43 @@ open_file (_cpp_file *file)
}
else
file->fd = open (file->path, O_RDONLY | O_NOCTTY | O_BINARY, 0666);
+#if defined(_WIN32) || defined(__CYGWIN__)
+ /* Windows and Posix differ in the face of paths of the form:
+ nonexistantdir/.. in that Posix will return ENOENT whereas
+ Windows won't care that we stepped into a non-existant dir
+ Only do these slow checks if ".." appears in file->path.
+ Cygwin also suffers from the same problem (but doesn't need
+ a new stat function):
+ http://cygwin.com/ml/cygwin/2013-05/msg00222.html
+ */
+ if (file->fd > 0)
+ {
+ char filepath[MAX_PATH];
+ strncpy (filepath, file->path, sizeof(filepath) - 1);
+ char* dirsep = &filepath[0];
+ while ( (dirsep = strchr (dirsep, '\\')) != NULL)
+ *dirsep = '/';
+ if (strstr(file->path, "/../"))
+ {
+ dirsep = &filepath[0];
+ char dirsepc;
+ /* Check each directory in the chain. */
+ while ( (dirsep = strpbrk (dirsep, "\\/")) != NULL)
+ {
+ dirsepc = *(++dirsep);
+ *dirsep = '\0';
+ if (stat_st_mode_symlink (filepath, &file->st) == -1)
+ {
+ *dirsep = dirsepc;
+ close (file->fd);
+ file->fd = -1;
+ return false;
+ }
+ *dirsep++ = dirsepc;
+ }
+ }
+ }
+#endif
if (file->fd != -1)
{
--
2.7.1

View File

@@ -1,60 +0,0 @@
From f75fd3266f9690ea5b7d543600382afcf9be5502 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Wed, 5 Aug 2015 23:36:09 +0100
Subject: [PATCH 03/19] Windows: Use '/' not '\' in progpath and leave case
as-is
Windows can handle both '/' and '\' dirseps. GCC will
have been built using Cygwin, MSYS* or cross-compiled
from a system where dirsep is '/' so it is cleaner to
force the dirseps to be '/' and keep the case as-is.
This way, the value will be consistent with the build
system and string operations, be they internal to GCC
or external to it (e.g. processing map files with sed)
have a better chance of working as expected.
A concrete instance of when this matters is when cross
compiling GNU/Linux glibc on Windows.
---
libiberty/lrealpath.c | 19 +++++++++++++++----
1 file changed, 15 insertions(+), 4 deletions(-)
diff --git a/libiberty/lrealpath.c b/libiberty/lrealpath.c
index b27c8de..8165984 100644
--- a/libiberty/lrealpath.c
+++ b/libiberty/lrealpath.c
@@ -138,15 +138,26 @@ lrealpath (const char *filename)
{
char buf[MAX_PATH];
char* basename;
+ char* slash;
DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename);
if (len == 0 || len > MAX_PATH - 1)
return strdup (filename);
else
{
- /* The file system is case-preserving but case-insensitive,
- Canonicalize to lowercase, using the codepage associated
- with the process locale. */
- CharLowerBuff (buf, len);
+ /* Turn all back slashes back into forward slashes
+ and don't make it lowercase.
+ Rationale:
+ Windows is as happy with / as it is with \. This will
+ have been built using Cygwin, MSYS* or cross-compiled
+ from a system where dirsep is / so it is cleaner just
+ to keep the dirseps as / (and the case un-modified).
+ This way, the value will be consistent with the build
+ system and string operations (be they internal to this
+ software or external to it, e.g. processing map files
+ with sed) work as expected. */
+ slash = buf;
+ while ((slash = strchr(slash,'\\')) != NULL)
+ *slash = '/';
return strdup (buf);
}
}
--
2.7.1

View File

@@ -1,28 +0,0 @@
From 7b4d8cb135724fe4d72048a19f46a29dac4b323e Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Wed, 5 Aug 2015 23:36:11 +0100
Subject: [PATCH 04/19] Windows: Don't ignore native system header dir
---
gcc/config.gcc | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/gcc/config.gcc b/gcc/config.gcc
index e26742e..e44cac7 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1736,7 +1736,10 @@ i[34567]86-*-mingw* | x86_64-*-mingw*)
tmake_file="${tmake_file} i386/t-mingw-w32"
;;
esac
- native_system_header_dir=/mingw/include
+ # Don't ignore values passed in to configure via --native-system-header-dir
+ if test x$native_system_header_dir = x ; then
+ native_system_header_dir=/mingw/include
+ fi
target_gtfiles="\$(srcdir)/config/i386/winnt.c"
extra_options="${extra_options} i386/cygming.opt i386/mingw.opt"
case ${target} in
--
2.7.1

View File

@@ -1,43 +0,0 @@
From 502fd7b40e4f8b5eb8010a568b5ad45427d4e945 Mon Sep 17 00:00:00 2001
From: Alexey Pavlov <alexey.pawlow@gmail.com>
Date: Wed, 5 Aug 2015 23:36:17 +0100
Subject: [PATCH 06/19] Build EXTRA_GNATTOOLS for Ada
---
gnattools/Makefile.in | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/gnattools/Makefile.in b/gnattools/Makefile.in
index 0c889ee..fe3b4b0 100644
--- a/gnattools/Makefile.in
+++ b/gnattools/Makefile.in
@@ -197,7 +197,7 @@ gnattools-native: $(GCC_DIR)/stamp-tools $(GCC_DIR)/stamp-gnatlib-rts
../../gnatmake$(exeext) ../../gnatlink$(exeext)
# gnattools2
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
- $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
+ $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools $(EXTRA_GNATTOOLS)
# gnatmake/link can be built with recent gnatmake/link if they are available.
# This is especially convenient for building cross tools or for rebuilding
@@ -209,7 +209,7 @@ regnattools: $(GCC_DIR)/stamp-gnatlib-rts
gnatmake-re gnatlink-re
# gnattools2
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
- $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools
+ $(TOOLS_FLAGS_TO_PASS_NATIVE) common-tools $(EXTRA_GNATTOOLS)
gnattools-cross: $(GCC_DIR)/stamp-tools
# gnattools1-re
@@ -218,7 +218,7 @@ gnattools-cross: $(GCC_DIR)/stamp-tools
gnatmake-re gnatlink-re
# gnattools2
$(MAKE) -C $(GCC_DIR)/ada/tools -f ../Makefile \
- $(TOOLS_FLAGS_TO_PASS_CROSS) common-tools
+ $(TOOLS_FLAGS_TO_PASS_CROSS) common-tools $(EXTRA_GNATTOOLS)
# Rename cross tools to where the GCC makefile wants them when
# installing. FIXME: installation should be done elsewhere.
if [ -f $(GCC_DIR)/gnatbind$(exeext) ] ; then \
--
2.7.1

View File

@@ -1,7 +1,8 @@
From 9a5802335d195c8b1bf577bbc00e7905c2ed8226 Mon Sep 17 00:00:00 2001
From 73c46f52872c95daed5e8bdca52c4b3e0d633c01 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Wed, 5 Aug 2015 23:36:13 +0100
Subject: [PATCH 07/21] gcc-5-branch Windows: New feature to allow overriding -lmsvcrt
Subject: [PATCH 06/15] gcc-5-branch Windows: New feature to allow overriding
-lmsvcrt
Added in support of the MinGW-w64 WIP feature "agile mscvrt dll" where
a process' loaded msvc runtime is used by a newly loaded DLL rather than
@@ -39,5 +40,5 @@ index f139761..0950304 100644
#undef STARTFILE_SPEC
#define STARTFILE_SPEC "%{shared|mdll:dllcrt2%O%s} \
--
2.5.0
2.8.1

View File

@@ -1,41 +0,0 @@
From 7e545106faa4b13de2ef56b2c47c0f11f3c77b2a Mon Sep 17 00:00:00 2001
From: Alexey Pavlov <alexey.pawlow@gmail.com>
Date: Wed, 5 Aug 2015 23:36:19 +0100
Subject: [PATCH 07/19] Prettify linking -no-undefined
It might be better to put this change in a
conditional block for Windows only?
---
libgfortran/Makefile.am | 2 +-
libgfortran/Makefile.in | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/libgfortran/Makefile.am b/libgfortran/Makefile.am
index 39d3e11..1425988 100644
--- a/libgfortran/Makefile.am
+++ b/libgfortran/Makefile.am
@@ -45,7 +45,7 @@ libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP)
cafexeclib_LTLIBRARIES = libcaf_single.la
cafexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)
libcaf_single_la_SOURCES = caf/single.c
-libcaf_single_la_LDFLAGS = -static
+libcaf_single_la_LDFLAGS = -static -no-undefined
libcaf_single_la_DEPENDENCIES = caf/libcaf.h
libcaf_single_la_LINK = $(LINK) $(libcaf_single_la_LDFLAGS)
diff --git a/libgfortran/Makefile.in b/libgfortran/Makefile.in
index 7ed080c..67f81d7 100644
--- a/libgfortran/Makefile.in
+++ b/libgfortran/Makefile.in
@@ -606,7 +606,7 @@ libgfortran_la_DEPENDENCIES = $(version_dep) libgfortran.spec $(LIBQUADLIB_DEP)
cafexeclib_LTLIBRARIES = libcaf_single.la
cafexeclibdir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)
libcaf_single_la_SOURCES = caf/single.c
-libcaf_single_la_LDFLAGS = -static
+libcaf_single_la_LDFLAGS = -static -no-undefined
libcaf_single_la_DEPENDENCIES = caf/libcaf.h
libcaf_single_la_LINK = $(LINK) $(libcaf_single_la_LDFLAGS)
@IEEE_SUPPORT_TRUE@fincludedir = $(libdir)/gcc/$(target_alias)/$(gcc_version)$(MULTISUBDIR)/finclude
--
2.7.1

View File

@@ -1,41 +0,0 @@
From 382271305afe34e79980393960565a39f6c55a99 Mon Sep 17 00:00:00 2001
From: Erik van Pienbroek <epienbro@fedoraproject.org>
Date: Wed, 5 Aug 2015 23:36:21 +0100
Subject: [PATCH 08/19] gcc: make xmmintrin header cplusplus compatible
[deprecated]
Deprecated as-per:
http://marc.info/?l=fedora-extras-commits&m=138946782004553&w=2
---
gcc/config/i386/xmmintrin.h | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/gcc/config/i386/xmmintrin.h b/gcc/config/i386/xmmintrin.h
index ffe5771..a95d66a 100644
--- a/gcc/config/i386/xmmintrin.h
+++ b/gcc/config/i386/xmmintrin.h
@@ -64,6 +64,10 @@ _mm_prefetch (const void *__P, enum _mm_hint __I)
#define __DISABLE_SSE__
#endif /* __SSE__ */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
/* The Intel API is flexible enough that we must allow aliasing with other
vector types, and their scalar components. */
typedef float __m128 __attribute__ ((__vector_size__ (16), __may_alias__));
@@ -1245,6 +1249,10 @@ do { \
(row3) = __builtin_ia32_movhlps (__t3, __t2); \
} while (0)
+#ifdef __cplusplus
+}
+#endif
+
/* For backward source compatibility. */
# include <emmintrin.h>
--
2.7.1

View File

@@ -1,154 +0,0 @@
From 040d65b7bd7e54c44350479b4318e85fd870fb71 Mon Sep 17 00:00:00 2001
From: Martin Richter <xricht17@stud.fit.vutbr.cz>
Date: Wed, 5 Aug 2015 23:36:25 +0100
Subject: [PATCH 10/19] Fix using large PCH
The following patch fixes segfault when gt_pch_use_address
fails (returns -1). fatal_error now correctly shows an error
message and terminates the program.
I have basicly only reordered reads, and placed them after
the file mapping itself. Global pointers are changed only
after gt_pch_use_address succeeds, so in case of failure
they still contain valid addresses.
This patch is meant for the master branch. However, it
should not be hard to modify it for others.
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=14940
https://sourceforge.net/p/mingw-w64/bugs/382/
---
gcc/config/i386/host-mingw32.c | 10 ++-------
gcc/ggc-common.c | 51 +++++++++++++++++++++++++++++++++---------
2 files changed, 42 insertions(+), 19 deletions(-)
diff --git a/gcc/config/i386/host-mingw32.c b/gcc/config/i386/host-mingw32.c
index f51219a..903c027 100644
--- a/gcc/config/i386/host-mingw32.c
+++ b/gcc/config/i386/host-mingw32.c
@@ -42,9 +42,6 @@ static size_t mingw32_gt_pch_alloc_granularity (void);
static inline void w32_error(const char*, const char*, int, const char*);
-/* FIXME: Is this big enough? */
-static const size_t pch_VA_max_size = 128 * 1024 * 1024;
-
/* Granularity for reserving address space. */
static size_t va_granularity = 0x10000;
@@ -86,9 +83,6 @@ static void *
mingw32_gt_pch_get_address (size_t size, int)
{
void* res;
- size = (size + va_granularity - 1) & ~(va_granularity - 1);
- if (size > pch_VA_max_size)
- return NULL;
/* FIXME: We let system determine base by setting first arg to NULL.
Allocating at top of available address space avoids unnecessary
@@ -98,7 +92,7 @@ mingw32_gt_pch_get_address (size_t size, int)
If we allocate at bottom we need to reserve the address as early
as possible and at the same point in each invocation. */
- res = VirtualAlloc (NULL, pch_VA_max_size,
+ res = VirtualAlloc (NULL, size,
MEM_RESERVE | MEM_TOP_DOWN,
PAGE_NOACCESS);
if (!res)
@@ -148,7 +142,7 @@ mingw32_gt_pch_use_address (void *addr, size_t size, int fd,
/* Offset must be also be a multiple of allocation granularity for
this to work. We can't change the offset. */
- if ((offset & (va_granularity - 1)) != 0 || size > pch_VA_max_size)
+ if ((offset & (va_granularity - 1)) != 0)
return -1;
diff --git a/gcc/ggc-common.c b/gcc/ggc-common.c
index 9b291aa..1861c95 100644
--- a/gcc/ggc-common.c
+++ b/gcc/ggc-common.c
@@ -598,7 +598,9 @@ gt_pch_restore (FILE *f)
size_t i;
struct mmap_info mmi;
int result;
-
+ long pch_tabs_off;
+ long pch_data_off;
+
/* Delete any deletable objects. This makes ggc_pch_read much
faster, as it can be sure that no GCable objects remain other
than the ones just read in. */
@@ -606,20 +608,24 @@ gt_pch_restore (FILE *f)
for (rti = *rt; rti->base != NULL; rti++)
memset (rti->base, 0, rti->stride);
- /* Read in all the scalar variables. */
+ /* We need to read tables after mapping, or fatal_error will
+ segfault when gt_pch_use_address returns -1. Skip them for now. */
+ pch_tabs_off = ftell(f);
+
+ /* Skip all the scalar variables. */
for (rt = gt_pch_scalar_rtab; *rt; rt++)
for (rti = *rt; rti->base != NULL; rti++)
- if (fread (rti->base, rti->stride, 1, f) != 1)
- fatal_error (input_location, "can%'t read PCH file: %m");
+ if (fseek (f, rti->stride, SEEK_CUR) != 0)
+ fatal_error (input_location, "can%'t read PCH file: %m");
- /* Read in all the global pointers, in 6 easy loops. */
+ /* Skip all the global pointers. */
for (rt = gt_ggc_rtab; *rt; rt++)
for (rti = *rt; rti->base != NULL; rti++)
for (i = 0; i < rti->nelt; i++)
- if (fread ((char *)rti->base + rti->stride * i,
- sizeof (void *), 1, f) != 1)
- fatal_error (input_location, "can%'t read PCH file: %m");
-
+ if (fseek (f, sizeof (void *), SEEK_CUR) != 0)
+ fatal_error (input_location, "can%'t read PCH file: %m");
+
+ /* mmi still has to be read now. */
if (fread (&mmi, sizeof (mmi), 1, f) != 1)
fatal_error (input_location, "can%'t read PCH file: %m");
@@ -630,12 +636,35 @@ gt_pch_restore (FILE *f)
if (result == 0)
{
if (fseek (f, mmi.offset, SEEK_SET) != 0
- || fread (mmi.preferred_base, mmi.size, 1, f) != 1)
- fatal_error (input_location, "can%'t read PCH file: %m");
+ || fread (mmi.preferred_base, mmi.size, 1, f) != 1)
+ fatal_error (input_location, "can%'t read PCH file: %m");
}
else if (fseek (f, mmi.offset + mmi.size, SEEK_SET) != 0)
fatal_error (input_location, "can%'t read PCH file: %m");
+
+ /* File mapping done, read tables now. */
+ pch_data_off = ftell(f);
+
+ if (fseek (f, pch_tabs_off, SEEK_SET) != 0)
+ fatal_error (input_location, "can%'t read PCH file: %m");
+ /* Read in all the scalar variables. */
+ for (rt = gt_pch_scalar_rtab; *rt; rt++)
+ for (rti = *rt; rti->base != NULL; rti++)
+ if (fread (rti->base, rti->stride, 1, f) != 1)
+ fatal_error (input_location, "can%'t read PCH file: %m");
+
+ /* Read in all the global pointers, in 6 easy loops. */
+ for (rt = gt_ggc_rtab; *rt; rt++)
+ for (rti = *rt; rti->base != NULL; rti++)
+ for (i = 0; i < rti->nelt; i++)
+ if (fread ((char *)rti->base + rti->stride * i,
+ sizeof (void *), 1, f) != 1)
+ fatal_error (input_location, "can%'t read PCH file: %m");
+
+ if (fseek (f, pch_data_off, SEEK_SET) != 0)
+ fatal_error (input_location, "can%'t read PCH file: %m");
+
ggc_pch_read (f, mmi.preferred_base);
gt_pch_restore_stringpool ();
--
2.7.1

View File

@@ -1,39 +0,0 @@
From f1dcb04c0ff28f11325ef3e16d4b6e8f3eafcfed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?J=C3=BCrgen=20Pfeifer?= <juergen@familiepfeifer.de>
Date: Wed, 5 Aug 2015 23:36:27 +0100
Subject: [PATCH 11/19] Enable shared gnat implib
Provide GNAT runtime import libraries to
allow to link against shared runtime
Original commit:
https://github.com/Alexpux/MINGW-packages/commit/51b4eb3b702fdb38df0460180c2f8209a686aaec
---
gcc/ada/gcc-interface/Makefile.in | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/gcc/ada/gcc-interface/Makefile.in b/gcc/ada/gcc-interface/Makefile.in
index 8d91b66..aabe555 100644
--- a/gcc/ada/gcc-interface/Makefile.in
+++ b/gcc/ada/gcc-interface/Makefile.in
@@ -2887,13 +2887,16 @@ gnatlib-shared-win32:
$(PICFLAG_FOR_TARGET) \
-o libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
$(GNATRTL_NONTASKING_OBJS) $(LIBGNAT_OBJS) \
- $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) $(MISCLIB)
+ $(SO_OPTS)libgnat$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ -Wl,-out-implib,libgnat$(hyphen)$(LIBRARY_VERSION).dll.a \
+ $(MISCLIB)
cd $(RTSDIR); `echo "$(GCC_FOR_TARGET)" \
| sed -e 's,\./xgcc,../../xgcc,' -e 's,-B\./,-B../../,'` -shared -shared-libgcc \
$(PICFLAG_FOR_TARGET) \
-o libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
$(GNATRTL_TASKING_OBJS) \
$(SO_OPTS)libgnarl$(hyphen)$(LIBRARY_VERSION)$(soext) \
+ -Wl,-out-implib,libgnarl$(hyphen)$(LIBRARY_VERSION).dll.a \
$(THREADSLIB) -Wl,libgnat$(hyphen)$(LIBRARY_VERSION)$(soext)
gnatlib-shared-darwin:
--
2.7.1

View File

@@ -1,112 +0,0 @@
From 38c9b4f3e8b774f11b018e74aa578954576d3a0c Mon Sep 17 00:00:00 2001
From: LRN <lrn1986@gmail.com>
Date: Wed, 5 Aug 2015 23:36:29 +0100
Subject: [PATCH 12/19] MinGW-w64: Enable libitm
---
libitm/Makefile.am | 2 +-
libitm/Makefile.in | 3 ++-
libitm/configure | 17 +++++++++++++++++
libitm/configure.ac | 1 +
libitm/configure.tgt | 4 ++++
5 files changed, 25 insertions(+), 2 deletions(-)
diff --git a/libitm/Makefile.am b/libitm/Makefile.am
index 1dce82d..0ea39f2 100644
--- a/libitm/Makefile.am
+++ b/libitm/Makefile.am
@@ -54,7 +54,7 @@ libitm_version_info = -version-info $(libtool_VERSION)
# want or need libstdc++.
libitm_la_DEPENDENCIES = $(libitm_version_dep)
libitm_la_LINK = $(LINK) $(libitm_la_LDFLAGS)
-libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script)
+libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script) $(lt_host_flags)
libitm_la_SOURCES = \
aatree.cc alloc.cc alloc_c.cc alloc_cpp.cc barrier.cc beginend.cc \
diff --git a/libitm/Makefile.in b/libitm/Makefile.in
index 138eeb1..a25c6d2 100644
--- a/libitm/Makefile.in
+++ b/libitm/Makefile.in
@@ -307,6 +307,7 @@ libtool_VERSION = @libtool_VERSION@
link_itm = @link_itm@
localedir = @localedir@
localstatedir = @localstatedir@
+lt_host_flags = @lt_host_flags@
mandir = @mandir@
mkdir_p = @mkdir_p@
multi_basedir = @multi_basedir@
@@ -357,7 +358,7 @@ libitm_version_info = -version-info $(libtool_VERSION)
# want or need libstdc++.
libitm_la_DEPENDENCIES = $(libitm_version_dep)
libitm_la_LINK = $(LINK) $(libitm_la_LDFLAGS)
-libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script)
+libitm_la_LDFLAGS = $(libitm_version_info) $(libitm_version_script) $(lt_host_flags)
libitm_la_SOURCES = aatree.cc alloc.cc alloc_c.cc alloc_cpp.cc \
barrier.cc beginend.cc clone.cc eh_cpp.cc local.cc query.cc \
retry.cc rwlock.cc useraction.cc util.cc sjlj.S tls.cc \
diff --git a/libitm/configure b/libitm/configure
index 55332bb..8f19e0a 100644
--- a/libitm/configure
+++ b/libitm/configure
@@ -630,6 +630,7 @@ MAINTAINER_MODE_FALSE
MAINTAINER_MODE_TRUE
enable_static
enable_shared
+lt_host_flags
CXXCPP
CPP
OTOOL64
@@ -15149,6 +15150,22 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
# Only expand once:
+case $host in
+ *-cygwin* | *-mingw*)
+ # 'host' will be top-level target in the case of a target lib,
+ # we must compare to with_cross_host to decide if this is a native
+ # or cross-compiler and select where to install dlls appropriately.
+ if test -n "$with_cross_host" &&
+ test x"$with_cross_host" != x"no"; then
+ lt_host_flags='-no-undefined -bindir "$(toolexeclibdir)"';
+ else
+ lt_host_flags='-no-undefined -bindir "$(bindir)"';
+ fi
+ ;;
+ *)
+ lt_host_flags=
+ ;;
+esac
diff --git a/libitm/configure.ac b/libitm/configure.ac
index 3875aa0..574afb9 100644
--- a/libitm/configure.ac
+++ b/libitm/configure.ac
@@ -147,6 +147,7 @@ AM_CONDITIONAL(BUILD_INFO, test $gcc_cv_prog_makeinfo_modern = "yes")
# Configure libtool
AM_PROG_LIBTOOL
+ACX_LT_HOST_FLAGS
AC_SUBST(enable_shared)
AC_SUBST(enable_static)
diff --git a/libitm/configure.tgt b/libitm/configure.tgt
index e84382f..adea588 100644
--- a/libitm/configure.tgt
+++ b/libitm/configure.tgt
@@ -145,6 +145,10 @@ case "${target}" in
# POSIX system. The OS is supported.
;;
+ *-*-mingw*)
+ # POSIX system. The OS is supported.
+ ;;
+
*) # Non-POSIX, or embedded system
UNSUPPORTED=1
;;
--
2.7.1

View File

@@ -1,25 +0,0 @@
From a883299ce617d3e12fc708baded51e8b15277da0 Mon Sep 17 00:00:00 2001
From: LRN <lrn1986@gmail.com>
Date: Wed, 5 Aug 2015 23:36:31 +0100
Subject: [PATCH 13/19] MinGW-w64: Enable libsanitizer
---
libsanitizer/configure.tgt | 2 ++
1 file changed, 2 insertions(+)
diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt
index 05ead76..1bfd064 100644
--- a/libsanitizer/configure.tgt
+++ b/libsanitizer/configure.tgt
@@ -41,6 +41,8 @@ case "${target}" in
TSAN_TARGET_DEPENDENT_OBJECTS=tsan_rtl_aarch64.lo
fi
;;
+ *-*-mingw*)
+ ;;
x86_64-*-darwin[1]* | i?86-*-darwin[1]*)
TSAN_SUPPORTED=no
;;
--
2.7.1

View File

@@ -1,39 +0,0 @@
From 7831e17377252b93fc9e146e766436cb81016da1 Mon Sep 17 00:00:00 2001
From: LRN <lrn1986@gmail.com>
Date: Wed, 5 Aug 2015 23:36:33 +0100
Subject: [PATCH 14/19] MinGW-w64: Enable shared gnat
---
libada/configure | 2 +-
libada/configure.ac | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/libada/configure b/libada/configure
index 2296096..ba488e7 100755
--- a/libada/configure
+++ b/libada/configure
@@ -2956,7 +2956,7 @@ fi
# Determine what to build for 'gnatlib'
-if test $build = $target \
+if test $host = $target \
&& test ${enable_shared} = yes ; then
# Note that build=target is almost certainly the wrong test; FIXME
default_gnatlib_target="gnatlib-shared"
diff --git a/libada/configure.ac b/libada/configure.ac
index 04e06fe..51b5fb2 100644
--- a/libada/configure.ac
+++ b/libada/configure.ac
@@ -127,7 +127,7 @@ AC_PROG_AWK
AC_PROG_LN_S
# Determine what to build for 'gnatlib'
-if test $build = $target \
+if test $host = $target \
&& test ${enable_shared} = yes ; then
# Note that build=target is almost certainly the wrong test; FIXME
default_gnatlib_target="gnatlib-shared"
--
2.7.1

View File

@@ -1,179 +0,0 @@
From f5c55e9e15576c20994c41ed123875a3b5680ab9 Mon Sep 17 00:00:00 2001
From: LRN <lrn1986@gmail.com>
Date: Wed, 5 Aug 2015 23:36:35 +0100
Subject: [PATCH 15/19] MinGW-w64: No -fpic in sanitizer
---
libsanitizer/asan/Makefile.am | 2 +-
libsanitizer/asan/Makefile.in | 2 +-
libsanitizer/interception/Makefile.am | 2 +-
libsanitizer/interception/Makefile.in | 2 +-
libsanitizer/lsan/Makefile.am | 2 +-
libsanitizer/lsan/Makefile.in | 2 +-
libsanitizer/sanitizer_common/Makefile.am | 2 +-
libsanitizer/sanitizer_common/Makefile.in | 2 +-
libsanitizer/tsan/Makefile.am | 2 +-
libsanitizer/tsan/Makefile.in | 2 +-
libsanitizer/ubsan/Makefile.am | 2 +-
libsanitizer/ubsan/Makefile.in | 2 +-
12 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/libsanitizer/asan/Makefile.am b/libsanitizer/asan/Makefile.am
index 4500e21..03dad11 100644
--- a/libsanitizer/asan/Makefile.am
+++ b/libsanitizer/asan/Makefile.am
@@ -7,7 +7,7 @@ DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D
if USING_MAC_INTERPOSE
DEFS += -DMAC_INTERPOSE_FUNCTIONS -DMISSING_BLOCKS_SUPPORT
endif
-AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros -fno-ipa-icf
+AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros -fno-ipa-icf
AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
AM_CXXFLAGS += -std=gnu++11
ACLOCAL_AMFLAGS = -I $(top_srcdir) -I $(top_srcdir)/config
diff --git a/libsanitizer/asan/Makefile.in b/libsanitizer/asan/Makefile.in
index 881d1d3..1b2375c 100644
--- a/libsanitizer/asan/Makefile.in
+++ b/libsanitizer/asan/Makefile.in
@@ -298,7 +298,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include -I $(top_srcdir)
# May be used by toolexeclibdir.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \
- -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti \
+ -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti \
-fomit-frame-pointer -funwind-tables -fvisibility=hidden \
-Wno-variadic-macros -fno-ipa-icf \
$(LIBSTDCXX_RAW_CXX_CXXFLAGS) -std=gnu++11
diff --git a/libsanitizer/interception/Makefile.am b/libsanitizer/interception/Makefile.am
index 4fb69a9..6df9645 100644
--- a/libsanitizer/interception/Makefile.am
+++ b/libsanitizer/interception/Makefile.am
@@ -4,7 +4,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include -I $(top_srcdir)
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
+AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
AM_CXXFLAGS += -std=gnu++11
ACLOCAL_AMFLAGS = -I m4
diff --git a/libsanitizer/interception/Makefile.in b/libsanitizer/interception/Makefile.in
index c7ccb51..681e7e2 100644
--- a/libsanitizer/interception/Makefile.in
+++ b/libsanitizer/interception/Makefile.in
@@ -248,7 +248,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include -I $(top_srcdir)
# May be used by toolexeclibdir.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \
- -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti \
+ -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti \
-fomit-frame-pointer -funwind-tables -fvisibility=hidden \
-Wno-variadic-macros $(LIBSTDCXX_RAW_CXX_CXXFLAGS) \
-std=gnu++11
diff --git a/libsanitizer/lsan/Makefile.am b/libsanitizer/lsan/Makefile.am
index 03ec4fe..55a1d33 100644
--- a/libsanitizer/lsan/Makefile.am
+++ b/libsanitizer/lsan/Makefile.am
@@ -4,7 +4,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include -I $(top_srcdir)
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS
-AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
+AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
AM_CXXFLAGS += -std=gnu++11
ACLOCAL_AMFLAGS = -I m4
diff --git a/libsanitizer/lsan/Makefile.in b/libsanitizer/lsan/Makefile.in
index 4802ed4..18d2f32 100644
--- a/libsanitizer/lsan/Makefile.in
+++ b/libsanitizer/lsan/Makefile.in
@@ -289,7 +289,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include -I $(top_srcdir)
# May be used by toolexeclibdir.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \
- -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti \
+ -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti \
-fomit-frame-pointer -funwind-tables -fvisibility=hidden \
-Wno-variadic-macros $(LIBSTDCXX_RAW_CXX_CXXFLAGS) \
-std=gnu++11
diff --git a/libsanitizer/sanitizer_common/Makefile.am b/libsanitizer/sanitizer_common/Makefile.am
index ee7a3f1..22240ee 100644
--- a/libsanitizer/sanitizer_common/Makefile.am
+++ b/libsanitizer/sanitizer_common/Makefile.am
@@ -4,7 +4,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include -isystem $(top_srcdir)/include/system
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS @RPC_DEFS@
-AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
+AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
AM_CXXFLAGS += -std=gnu++11
if LIBBACKTRACE_SUPPORTED
diff --git a/libsanitizer/sanitizer_common/Makefile.in b/libsanitizer/sanitizer_common/Makefile.in
index 765efd1..4d5c16b 100644
--- a/libsanitizer/sanitizer_common/Makefile.in
+++ b/libsanitizer/sanitizer_common/Makefile.in
@@ -277,7 +277,7 @@ AM_CPPFLAGS = -I $(top_srcdir)/include -isystem $(top_srcdir)/include/system
# May be used by toolexeclibdir.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \
- -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti \
+ -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti \
-fomit-frame-pointer -funwind-tables -fvisibility=hidden \
-Wno-variadic-macros $(LIBSTDCXX_RAW_CXX_CXXFLAGS) \
-std=gnu++11 $(am__append_1)
diff --git a/libsanitizer/tsan/Makefile.am b/libsanitizer/tsan/Makefile.am
index 6776923..af69f47 100644
--- a/libsanitizer/tsan/Makefile.am
+++ b/libsanitizer/tsan/Makefile.am
@@ -4,7 +4,7 @@ AM_CPPFLAGS = -I $(top_srcdir) -I $(top_srcdir)/include
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DCAN_SANITIZE_UB=0 @OBSTACK_DEFS@
-AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
+AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
AM_CXXFLAGS += -std=gnu++11
ACLOCAL_AMFLAGS = -I m4
diff --git a/libsanitizer/tsan/Makefile.in b/libsanitizer/tsan/Makefile.in
index 14a4202..7382c9d 100644
--- a/libsanitizer/tsan/Makefile.in
+++ b/libsanitizer/tsan/Makefile.in
@@ -304,7 +304,7 @@ AM_CPPFLAGS = -I $(top_srcdir) -I $(top_srcdir)/include
# May be used by toolexeclibdir.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \
- -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti \
+ -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti \
-fomit-frame-pointer -funwind-tables -fvisibility=hidden \
-Wno-variadic-macros $(LIBSTDCXX_RAW_CXX_CXXFLAGS) \
-std=gnu++11
diff --git a/libsanitizer/ubsan/Makefile.am b/libsanitizer/ubsan/Makefile.am
index 9e70b12..8998edb 100644
--- a/libsanitizer/ubsan/Makefile.am
+++ b/libsanitizer/ubsan/Makefile.am
@@ -4,7 +4,7 @@ AM_CPPFLAGS = -I $(top_srcdir) -I $(top_srcdir)/include
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DPIC -DCAN_SANITIZE_UB=1
-AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
+AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros
AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS)
AM_CXXFLAGS += -std=gnu++11
ACLOCAL_AMFLAGS = -I m4
diff --git a/libsanitizer/ubsan/Makefile.in b/libsanitizer/ubsan/Makefile.in
index f5b06d0..59fe4af 100644
--- a/libsanitizer/ubsan/Makefile.in
+++ b/libsanitizer/ubsan/Makefile.in
@@ -287,7 +287,7 @@ AM_CPPFLAGS = -I $(top_srcdir) -I $(top_srcdir)/include
# May be used by toolexeclibdir.
gcc_version := $(shell cat $(top_srcdir)/../gcc/BASE-VER)
AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic \
- -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti \
+ -Wno-long-long -fno-builtin -fno-exceptions -fno-rtti \
-fomit-frame-pointer -funwind-tables -fvisibility=hidden \
-Wno-variadic-macros $(LIBSTDCXX_RAW_CXX_CXXFLAGS) \
-std=gnu++11
--
2.7.1

View File

@@ -1,120 +0,0 @@
From 1f0993231ce1318bf73ba6bb76062752bffb13b3 Mon Sep 17 00:00:00 2001
From: LRN <lrn1986@gmail.com>
Date: Wed, 5 Aug 2015 23:36:35 +0100
Subject: [PATCH 16/19] MinGW-w64: Port sanitizer
---
libsanitizer/asan/asan_win.cc | 3 ---
libsanitizer/configure | 30 ++++++++++++++++++++++++++++--
libsanitizer/configure.ac | 5 +++--
3 files changed, 31 insertions(+), 7 deletions(-)
diff --git a/libsanitizer/asan/asan_win.cc b/libsanitizer/asan/asan_win.cc
index 6c12523..faf3779 100644
--- a/libsanitizer/asan/asan_win.cc
+++ b/libsanitizer/asan/asan_win.cc
@@ -182,9 +182,6 @@ void MaybeReexec() {
}
void *AsanDoesNotSupportStaticLinkage() {
-#if defined(_DEBUG)
-#error Please build the runtime with a non-debug CRT: /MD or /MT
-#endif
return 0;
}
diff --git a/libsanitizer/configure b/libsanitizer/configure
index 040ded0..efe2f45 100755
--- a/libsanitizer/configure
+++ b/libsanitizer/configure
@@ -629,6 +629,7 @@ TSAN_SUPPORTED_FALSE
TSAN_SUPPORTED_TRUE
enable_static
enable_shared
+lt_host_flags
CXXCPP
OTOOL64
OTOOL
@@ -15388,6 +15389,31 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+case $host in
+ *-cygwin* | *-mingw*)
+ # 'host' will be top-level target in the case of a target lib,
+ # we must compare to with_cross_host to decide if this is a native
+ # or cross-compiler and select where to install dlls appropriately.
+ if test -n "$with_cross_host" &&
+ test x"$with_cross_host" != x"no"; then
+ lt_host_flags='-no-undefined -bindir "$(toolexeclibdir)"';
+ else
+ lt_host_flags='-no-undefined -bindir "$(bindir)"';
+ fi
+ ;;
+ *)
+ lt_host_flags=
+ ;;
+esac
+
+
+
+
+
+
+
for ac_prog in gawk mawk nawk awk
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
@@ -15515,7 +15541,7 @@ done
# Common libraries that we need to link against for all sanitizer libs.
-link_sanitizer_common='-lpthread -lm'
+link_sanitizer_common="-lpthread -lm $lt_host_flags"
# At least for glibc, shm_open is in librt. But don't pull that
# in if it still doesn't give us the function we want. This
@@ -15604,7 +15630,7 @@ fi
# Set up the set of additional libraries that we need to link against for libasan.
-link_libasan=$link_sanitizer_common
+link_libasan="$link_sanitizer_common -ldbghelp"
# Set up the set of additional libraries that we need to link against for libtsan.
diff --git a/libsanitizer/configure.ac b/libsanitizer/configure.ac
index 063b1d6..9265e70 100644
--- a/libsanitizer/configure.ac
+++ b/libsanitizer/configure.ac
@@ -74,6 +74,7 @@ case "$AWK" in
"") AC_MSG_ERROR([can't build without awk]) ;;
esac
+ACX_LT_HOST_FLAGS
AC_SUBST(enable_shared)
AC_SUBST(enable_static)
@@ -96,7 +97,7 @@ AM_CONDITIONAL(LSAN_SUPPORTED, [test "x$LSAN_SUPPORTED" = "xyes"])
AC_CHECK_FUNCS(clock_getres clock_gettime clock_settime)
# Common libraries that we need to link against for all sanitizer libs.
-link_sanitizer_common='-lpthread -lm'
+link_sanitizer_common="-lpthread -lm $lt_host_flags"
# At least for glibc, shm_open is in librt. But don't pull that
# in if it still doesn't give us the function we want. This
@@ -109,7 +110,7 @@ AC_CHECK_LIB(dl, dlsym,
[link_sanitizer_common="-ldl $link_sanitizer_common"])
# Set up the set of additional libraries that we need to link against for libasan.
-link_libasan=$link_sanitizer_common
+link_libasan="$link_sanitizer_common -ldbghelp"
AC_SUBST(link_libasan)
# Set up the set of additional libraries that we need to link against for libtsan.
--
2.7.1

View File

@@ -1,84 +0,0 @@
From 0265871a6dc3b3c57f008ba5d97356bbbecad176 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Wed, 5 Aug 2015 23:36:39 +0100
Subject: [PATCH 17/19] Force linking to libgcc_s_dw2-1.dll [deprecated]
.. by adding to specs:
*libgcc
--undefined=___deregister_frame_info
--undefined=___register_frame_info
These flags get added twice to the ld command line
because of %G appearing twice in:
*link_gcc_c_sequence
%G %L %G
so this should be tidied up really.
20150805 update:
Looking at this again, it seems that the
SHARED_LIBGCC_UNDEFS_SPEC stuff added in commit 7d804f
does the same thing, so my hack may not be needed. It
would appear that for some time, DWARF2_UNWIND_INFO
was not defined, but it's OK now. Latest specs have:
*shared_libgcc_undefs:
%{shared-libgcc: -u ___register_frame_info -u ___deregister_frame_info}
---
gcc/config/i386/cygwin.h | 6 +++++-
gcc/config/i386/mingw32.h | 8 ++++++--
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/gcc/config/i386/cygwin.h b/gcc/config/i386/cygwin.h
index 182e4d6..8814bf0 100644
--- a/gcc/config/i386/cygwin.h
+++ b/gcc/config/i386/cygwin.h
@@ -56,6 +56,10 @@ along with GCC; see the file COPYING3. If not see
fvtable-verify=std:vtv_end.o%s} \
crtend.o%s"
+/* There is a bug when building i686 dw-2 exceptions
+ where gcc_s gets stripped which this works around */
+#define PREVENT_STRIP_REG_FRAME_INFO "--undefined=___deregister_frame_info --undefined=___register_frame_info"
+
/* Normally, -lgcc is not needed since everything in it is in the DLL, but we
want to allow things to be added to it when installing new versions of
GCC without making a new CYGWIN.DLL, so we leave it. Profiling is handled
@@ -66,7 +70,7 @@ along with GCC; see the file COPYING3. If not see
%{static|static-libgcc:-lgcc -lgcc_eh} \
%{!static: \
%{!static-libgcc: \
- -lgcc_s -lgcc \
+ -lgcc_s " PREVENT_STRIP_REG_FRAME_INFO " -lgcc \
} \
} "
#else
diff --git a/gcc/config/i386/mingw32.h b/gcc/config/i386/mingw32.h
index f875e7b..d284d89 100644
--- a/gcc/config/i386/mingw32.h
+++ b/gcc/config/i386/mingw32.h
@@ -120,6 +120,10 @@ along with GCC; see the file COPYING3. If not see
%{shared|mdll: " SUB_LINK_ENTRY " --enable-auto-image-base} \
%(shared_libgcc_undefs)"
+/* There is a bug when building i686 dw-2 exceptions
+ where gcc_s gets stripped which this works around */
+#define PREVENT_STRIP_REG_FRAME_INFO "--undefined=___deregister_frame_info --undefined=___register_frame_info"
+
/* Include in the mingw32 libraries with libgcc */
#ifdef ENABLE_SHARED_LIBGCC
#define SHARED_LIBGCC_SPEC " \
@@ -128,9 +132,9 @@ along with GCC; see the file COPYING3. If not see
%{!static-libgcc: \
%{!shared: \
%{!shared-libgcc:-lgcc -lgcc_eh} \
- %{shared-libgcc:-lgcc_s -lgcc} \
+ %{shared-libgcc:-lgcc_s " PREVENT_STRIP_REG_FRAME_INFO " -lgcc} \
} \
- %{shared:-lgcc_s -lgcc} \
+ %{shared:-lgcc_s " PREVENT_STRIP_REG_FRAME_INFO " -lgcc} \
} \
} "
#else
--
2.7.1

View File

@@ -1,30 +0,0 @@
From 65d3ecb538446adac3a9780224c4cd0e285e5216 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Sat, 8 Aug 2015 16:46:03 +0100
Subject: [PATCH 18/19] MinGW-w64: Disable libsanitizer
[20150808] Causes a build failure on gcc-5-branch
---
libsanitizer/configure.tgt | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/libsanitizer/configure.tgt b/libsanitizer/configure.tgt
index 1bfd064..924464f 100644
--- a/libsanitizer/configure.tgt
+++ b/libsanitizer/configure.tgt
@@ -41,8 +41,10 @@ case "${target}" in
TSAN_TARGET_DEPENDENT_OBJECTS=tsan_rtl_aarch64.lo
fi
;;
- *-*-mingw*)
- ;;
+# [20150808] :: Causes a build failure on gcc-5-branch:
+# mingw-w64-gcc-git\src\build-i686-w64-mingw32\i686-w64-mingw32\libsanitizer\asan/../../../../gcc/libsanitizer/asan/asan_interceptors.cc:722: undefined reference to `_except_handler4_common'
+# *-*-mingw*)
+# ;;
x86_64-*-darwin[1]* | i?86-*-darwin[1]*)
TSAN_SUPPORTED=no
;;
--
2.7.1

View File

@@ -1,112 +0,0 @@
From 9fffbbf00e6ce9e91372e544b1e55dc1e6beb3a2 Mon Sep 17 00:00:00 2001
From: Ray Donnelly <mingw.android@gmail.com>
Date: Mon, 17 Aug 2015 22:57:46 +0100
Subject: [PATCH 19/19] clone_function_name_1: Retain any stdcall suffix
Previously, clone_function_name_1 would add a suffix after
any existing stdcall suffix, for example ipa-split.c would
clone test@4 as test@4.part.0.
Later, i386_pe_strip_name_encoding_full would come along
and strip off everything from the last @ onwards which had
the effect of generating incorrect section names which
would then fall over with errors such as:
error: void test() causes a section type conflict with \
void test@4.part.0()
The following testcase, reduced from Firefox can be used
to reproduce this.
test.ii:
class ClassA {
public:
virtual int __attribute__((__stdcall__)) Dispatch() = 0;
};
class ClassB {
public:
ClassA* __attribute__((__stdcall__)) operator->();
};
class ClassC : ClassA {
int *some_int_ptr_variable;
int __attribute__((__stdcall__)) Dispatch() {
return some_int_ptr_variable
? 42
: m_ClassInstanceB->Dispatch();
}
ClassB m_ClassInstanceB;
};
ClassC ClassInstanceC;
Compile for i686-w64-mingw32 with:
cc1plus -O -fpartial-inlining -fdevirtualize \
-fdevirtualize-speculatively test.ii
Outputs:
test.ii: In member function 'virtual int ClassC::Dispatch()':
test.ii:11:36: error: virtual int ClassC::Dispatch() causes \
a section type conflict with int ClassC::_ZN6ClassC8DispatchEv@4.part.0()
int __attribute__((CALLTYPE)) Dispatch() {
^
test.ii:11:36: note: \
'int ClassC::_ZN6ClassC8DispatchEv@4.part.0()' was declared here
---
gcc/cgraphclones.c | 13 ++++++++++++-
gcc/defaults.h | 2 +-
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/gcc/cgraphclones.c b/gcc/cgraphclones.c
index 354655e..bdb0056 100644
--- a/gcc/cgraphclones.c
+++ b/gcc/cgraphclones.c
@@ -501,15 +501,24 @@ cgraph_node::create_clone (tree new_decl, gcov_type gcov_count, int freq,
static GTY(()) unsigned int clone_fn_id_num;
/* Return a new assembler name for a clone with SUFFIX of a decl named
- NAME. */
+ NAME. Final stdcall @N suffixes are maintained. */
tree
clone_function_name_1 (const char *name, const char *suffix)
{
size_t len = strlen (name);
char *tmp_name, *prefix;
+ char *at_suffix = NULL;
prefix = XALLOCAVEC (char, len + strlen (suffix) + 2);
+ /* name + 1 to skip fastcall which begins with '@' */
+ at_suffix = strchr (name + 1, '@');
+ size_t at_suffix_len = 0;
+ if (at_suffix)
+ {
+ at_suffix_len = strlen (at_suffix);
+ len -= at_suffix_len;
+ }
memcpy (prefix, name, len);
strcpy (prefix + len + 1, suffix);
#ifndef NO_DOT_IN_LABEL
@@ -520,6 +529,8 @@ clone_function_name_1 (const char *name, const char *suffix)
prefix[len] = '_';
#endif
ASM_FORMAT_PRIVATE_NAME (tmp_name, prefix, clone_fn_id_num++);
+ if (at_suffix)
+ strcat (tmp_name, at_suffix);
return get_identifier (tmp_name);
}
diff --git a/gcc/defaults.h b/gcc/defaults.h
index 3e18338..45d7192 100644
--- a/gcc/defaults.h
+++ b/gcc/defaults.h
@@ -51,7 +51,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
# define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO) \
do { const char *const name_ = (NAME); \
char *const output_ = (OUTPUT) = \
- (char *) alloca (strlen (name_) + 32); \
+ (char *) alloca (strlen (name_) + 35); \
sprintf (output_, ASM_PN_FORMAT, name_, (unsigned long)(LABELNO)); \
} while (0)
#endif
--
2.7.1

View File

@@ -11,7 +11,7 @@ pkgname=("${MINGW_PACKAGE_PREFIX}-${_realname}-git"
"${MINGW_PACKAGE_PREFIX}-${_realname}-fortran-git"
"${MINGW_PACKAGE_PREFIX}-${_realname}-ada-git"
"${MINGW_PACKAGE_PREFIX}-${_realname}-objc-git")
pkgver=r138945.d346ffc
pkgver=r139182.f1da5ef
pkgrel=1
pkgdesc="GCC for the MinGW-w64"
arch=('any')
@@ -42,46 +42,41 @@ if [ "${_branch}" = "master" ]; then
else
_realpkgver=5.3.1
fi
source=("git://gcc.gnu.org/git/gcc.git#branch=${_branch}"
"0001-Relocate-libintl.patch"
"0002-Windows-Follow-Posix-dir-exists-semantics-more-close.patch"
"0003-Windows-Use-not-in-progpath-and-leave-case-as-is.patch"
"0004-Windows-Don-t-ignore-native-system-header-dir.patch"
"0005-gcc-5-branch-Windows-New-feature-to-allow-overriding-lmsvcrt.patch"
"0005-master-Windows-New-feature-to-allow-overriding-lmsvcrt.patch"
"0006-Build-EXTRA_GNATTOOLS-for-Ada.patch"
"0007-Prettify-linking-no-undefined.patch"
"0008-gcc-make-xmmintrin-header-cplusplus-compatible-depre.patch"
"0001-gcc-5-branch-gfortran-incorrect-reading-of-values-fr.patch"
"0002-Relocate-libintl.patch"
"0003-Windows-Follow-Posix-dir-exists-semantics-more-close.patch"
"0004-Windows-Use-not-in-progpath-and-leave-case-as-is.patch"
"0005-Windows-Don-t-ignore-native-system-header-dir.patch"
"0006-gcc-5-branch-Windows-New-feature-to-allow-overriding.patch"
"0006-master-Windows-New-feature-to-allow-overriding-lmsvcrt.patch"
"0007-Build-EXTRA_GNATTOOLS-for-Ada.patch"
"0008-Prettify-linking-no-undefined.patch"
"0009-gcc-make-xmmintrin-header-cplusplus-compatible-depre.patch"
"0010-Fix-using-large-PCH.patch"
"0011-Enable-shared-gnat-implib.patch"
"0012-MinGW-w64-Enable-libitm.patch"
"0013-MinGW-w64-Enable-libsanitizer.patch"
"0014-MinGW-w64-Enable-shared-gnat.patch"
"0015-MinGW-w64-No-fpic-in-sanitizer.patch"
"0016-MinGW-w64-Port-sanitizer.patch"
"0017-Force-linking-to-libgcc_s_dw2-1.dll-deprecated.patch"
"0018-MinGW-w64-Disable-libsanitizer.patch"
"0019-clone_function_name_1-Retain-any-stdcall-suffix.patch")
"0013-MinGW-w64-Enable-shared-gnat.patch"
"0014-clone_function_name_1-Retain-any-stdcall-suffix.patch"
"0015-Force-linking-to-libgcc_s_dw2-1.dll-deprecated.patch")
sha256sums=('SKIP'
'85d571d1d64ffdbf3fdf4fb88c8ecdaa8e53ef2a1251636e6f939538934faebe'
'e18e18f3aed42ad78d3f6d666fefc24809988ce06d766c4d7e99fc63b1eab2ad'
'cf2df2f2efac87aa6393fe3df2e54e5b6d74d2806bcd26375a400aa3cd3e56de'
'eccb5995542b2146b030afa7a8f743fd5e12bef54f41550e90bc28437f9a89e9'
'b4a21a032717e11062a99933f619709f57cd8b821de1e52aaf0b6cacda17df56'
'eedf62646d0e86bf85252f67bb0a483cdba87cffd2c9b4e29648d277b9ce5a70'
'ca1b45843b0403e610139792f849ccfaf4383f770951abf03f9666c92be8f814'
'31e21293227c48f3d4be898755690128e8027544962fd5f3f093a1f67b328677'
'6420969c4dfae063ef919691ad55221682ae8c0d7c124e2162230dec71fe0804'
'f5fdfbfb26922897eca7d05a33cbf86c88008001763faef1c3e20983a54324dc'
'2756200fb73737e2bace3c9b8f37fe7703f0ec8f171a3c303cec5ae7ff669410'
'd1e10cd2ef5594c34acead334bb93af500e00699ba673edc8916da22a572677d'
'2f1c9280a9a379c6a1b91b5b7d7f14db65490bd024b1db4e71834cea73582316'
'd08cfe014f879cd396eb8af29356d5bedf73495aafd5f0153ad7ddc0dda9059e'
'eecb90bf47894b886463dbd5e0634fc9003b32686f3a1f498b75b675c3f6c0fc'
'f9ef7a16105abca37dd6b8bbf5f2318d4f809bb5a8f83a2281c4fcdc2e0d28e4'
'25fec6456b6e97833acd3bafc68013da2f673ced246f7d52fca38057d4a73961'
'63061c3e1d68951659b427df2e1642d5da8ca1da028c793704e265f51042ce62'
'd9873d516ee813301aebc84d9752f7cecb16385c832c004ccd0fb663e70564b5'
'166c73f6062faa1a3782d2576b9dcb16c2a38d1f5138dc34047800c52f49485e'
'd40a8019ef8412c554ca90b53851902061a8f90ee9f8ba422852ebcf61c63f2a'
'de355f346d1097dddbab00742fe761240f13c8b48e8aef57c361e6a3bfb1a675'
'46a87be685919d1f53e1d60ead5525baa04408583586d8d468a0a80ccbbd75c1'
'73231d53fc72bee16bfbb082fa6f2b8e27ecdde2b4535441540f5a36b9a105e6'
'b478d9de9675b506773f59db5e820b8f72676358d9deaf9324b007ed45de99bf')
'59bad937bd2e4c54f6798ccaad0d19e7022e33ab6178b46877a908c27c5f98b0'
'3e8e2b9c3fd05a6395df29eb5fffed3a4948612ca0d91315afd5f417bb45da28'
'fb584161496a44340e96a3d1b0b2cb06366752e912850252094f824db410ec5d'
'e648e0508c5fccf6f7b1da4acc4f93cc47d914a57aaeee8aefe42656561f9e63'
'10612dfa9ea5c813423c780fa8e350cda21c5cba0e11b8befbf9f954922cb6b0'
'e9919134afd212a8f17349784c71ad821431c70334b24c0103a16a5f419784c6'
'ec3f39fc5499378a9dc058c001f0903c137233293154276b29ade45d4fc4ce5d'
'bdfc75d5f2fd231bb3b3368d2938043f842dc83c4b589f1c31d634886bfbbfd5'
'c3680b070fe917bf6eb323828058255790151d754d50bfe9917774ff7e06cbad')
_threads="posix"
@@ -92,42 +87,21 @@ pkgver() {
prepare() {
cd ${srcdir}/${_realname}
git am "${srcdir}"/0001-Relocate-libintl.patch
git am "${srcdir}"/0002-Windows-Follow-Posix-dir-exists-semantics-more-close.patch
git am "${srcdir}"/0003-Windows-Use-not-in-progpath-and-leave-case-as-is.patch
git am "${srcdir}"/0004-Windows-Don-t-ignore-native-system-header-dir.patch
git am "${srcdir}"/0005-${_branch}-Windows-New-feature-to-allow-overriding-lmsvcrt.patch
git am "${srcdir}"/0006-Build-EXTRA_GNATTOOLS-for-Ada.patch
git am "${srcdir}"/0007-Prettify-linking-no-undefined.patch
git am "${srcdir}"/0008-gcc-make-xmmintrin-header-cplusplus-compatible-depre.patch
git am "${srcdir}"/0001-${_branch}-gfortran-incorrect-reading-of-values-fr.patch || true
git am "${srcdir}"/0002-Relocate-libintl.patch
git am "${srcdir}"/0003-Windows-Follow-Posix-dir-exists-semantics-more-close.patch
git am "${srcdir}"/0004-Windows-Use-not-in-progpath-and-leave-case-as-is.patch
git am "${srcdir}"/0005-Windows-Don-t-ignore-native-system-header-dir.patch
git am "${srcdir}"/0006-${_branch}-Windows-New-feature-to-allow-overriding.patch
git am "${srcdir}"/0007-Build-EXTRA_GNATTOOLS-for-Ada.patch
git am "${srcdir}"/0008-Prettify-linking-no-undefined.patch
git am "${srcdir}"/0009-gcc-make-xmmintrin-header-cplusplus-compatible-depre.patch
git am "${srcdir}"/0010-Fix-using-large-PCH.patch
git am "${srcdir}"/0011-Enable-shared-gnat-implib.patch
git am "${srcdir}"/0012-MinGW-w64-Enable-libitm.patch
# TODO :: Move all the sanitizer patches beside each other, and actually, consider
# just dropping them. Reasoning: LRN seems to have stopped updating sbuild,
# these patches were very much WIP, I never even tried to use them once and
# they only apply to the master branch now (since porting them is a burden).
# If things don't improve, next time I work on this package, they're gone.
if [[ "${_branch}" != "gcc-5-branch" ]]; then
git am "${srcdir}"/0013-MinGW-w64-Enable-libsanitizer.patch
fi
git am "${srcdir}"/0014-MinGW-w64-Enable-shared-gnat.patch
if [[ "${_branch}" != "gcc-5-branch" ]]; then
git am "${srcdir}"/0015-MinGW-w64-No-fpic-in-sanitizer.patch
git am "${srcdir}"/0016-MinGW-w64-Port-sanitizer.patch
fi
git am "${srcdir}"/0017-Force-linking-to-libgcc_s_dw2-1.dll-deprecated.patch
if [[ "${_branch}" != "gcc-5-branch" ]]; then
git am "${srcdir}"/0018-MinGW-w64-Disable-libsanitizer.patch
fi
git am "${srcdir}"/0019-clone_function_name_1-Retain-any-stdcall-suffix.patch
git am "${srcdir}"/0013-MinGW-w64-Enable-shared-gnat.patch
git am "${srcdir}"/0014-clone_function_name_1-Retain-any-stdcall-suffix.patch
git am "${srcdir}"/0015-Force-linking-to-libgcc_s_dw2-1.dll-deprecated.patch
# do not expect $prefix/mingw symlink - this should be superceded by
# 0004-Windows-Don-t-ignore-native-system-header-dir.patch .. but isn't!
@@ -213,7 +187,9 @@ build() {
package_mingw-w64-gcc-libs-git() {
pkgdesc="GNU Compiler Collection (libraries) for MinGW-w64"
depends=("${MINGW_PACKAGE_PREFIX}-gmp" "${MINGW_PACKAGE_PREFIX}-libwinpthread")
depends=("${MINGW_PACKAGE_PREFIX}-gmp"
"${MINGW_PACKAGE_PREFIX}-libwinpthread"
"${MINGW_PACKAGE_PREFIX}-${_realname}-libgfortran-git")
provides=("${MINGW_PACKAGE_PREFIX}-${_realname}-libs")
conflicts=("${MINGW_PACKAGE_PREFIX}-${_realname}-libs")