summaryrefslogtreecommitdiff
path: root/sys-devel/gcc-apple/files/gcc-apple-4.2.1_p5666-darwin14.patch
diff options
context:
space:
mode:
authorV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
committerV3n3RiX <venerix@redcorelinux.org>2017-10-09 18:53:29 +0100
commit4f2d7949f03e1c198bc888f2d05f421d35c57e21 (patch)
treeba5f07bf3f9d22d82e54a462313f5d244036c768 /sys-devel/gcc-apple/files/gcc-apple-4.2.1_p5666-darwin14.patch
reinit the tree, so we can have metadata
Diffstat (limited to 'sys-devel/gcc-apple/files/gcc-apple-4.2.1_p5666-darwin14.patch')
-rw-r--r--sys-devel/gcc-apple/files/gcc-apple-4.2.1_p5666-darwin14.patch148
1 files changed, 148 insertions, 0 deletions
diff --git a/sys-devel/gcc-apple/files/gcc-apple-4.2.1_p5666-darwin14.patch b/sys-devel/gcc-apple/files/gcc-apple-4.2.1_p5666-darwin14.patch
new file mode 100644
index 000000000000..fb785b0ad9c4
--- /dev/null
+++ b/sys-devel/gcc-apple/files/gcc-apple-4.2.1_p5666-darwin14.patch
@@ -0,0 +1,148 @@
+https://537826.bugs.gentoo.org/attachment.cgi?id=394896
+https://bugs.gentoo.org/show_bug.cgi?id=537826
+Michael Weiser
+
+Backport of https://gcc.gnu.org/viewcvs/gcc?view=revision&revision=218873 (as
+per https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61407) to correctly encode Mac
+OS X versions >10.9 into __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__.
+Extended to also encode patch level the way clang and Apple GCC 4.2.1 do.
+
+https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63810 has a much more generic
+patch. But it's not yet in-tree pending legal paperwork. Once that's done, we
+can backport that.
+
+--- gcc/libgcov.c
++++ gcc/libgcov.c
+@@ -34,6 +34,14 @@
+ #include "coretypes.h"
+ #include "tm.h"
+
++/* to deal with XBC headers from 10.10 */
++#ifndef __has_extension
++#define __has_extension(x) 0
++#endif
++#ifndef __has_feature
++#define __has_feature(x) 0
++#endif
++
+ /* APPLE LOCAL begin instant off 6414141 */
+ #if defined(__APPLE__) && !defined(__STATIC__) && !defined(__ppc__) && !defined(__ppc64__) && !defined(__arm__)
+ #include <vproc.h>
+--- gcc/config/darwin-driver.c.orig 2010-10-14 22:27:53.000000000 +0200
++++ gcc/config/darwin-driver.c 2015-01-25 21:15:09.000000000 +0100
+@@ -174,8 +174,6 @@
+ version_p = osversion + 1;
+ if (ISDIGIT (*version_p))
+ major_vers = major_vers * 10 + (*version_p++ - '0');
+- if (major_vers > 4 + 9)
+- goto parse_failed;
+ if (*version_p++ != '.')
+ goto parse_failed;
+ version_pend = strchr(version_p, '.');
+--- gcc/config/darwin-c.c.orig 2015-01-25 19:44:40.000000000 +0100
++++ gcc/config/darwin-c.c 2015-01-25 21:05:47.000000000 +0100
+@@ -930,31 +930,91 @@
+
+ /* Return the value of darwin_macosx_version_min suitable for the
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ macro,
+- so '10.4.2' becomes 1042.
++ so '10.4.2' becomes 1042 and '10.10.2' becomes 101002.
++ Cap patch level to 9 in the old format.
+ Print a warning if the version number is not known. */
+ static const char *
+ /* APPLE LOCAL ARM 5683689 */
+ macosx_version_as_macro (void)
+ {
+- static char result[] = "1000";
++ static char result[7] = "1000";
++ int inputindex = 3, outputindex = 2;
+
++ /* make sure version starts with "10." - makes sure we can safely start
++ * parsing at inputindex == 3 */
+ if (strncmp (darwin_macosx_version_min, "10.", 3) != 0)
+ goto fail;
++
++ /* first character of minor version needs to be digit */
+ if (! ISDIGIT (darwin_macosx_version_min[3]))
+ goto fail;
+- result[2] = darwin_macosx_version_min[3];
+- if (darwin_macosx_version_min[4] != '\0')
++
++ result[outputindex++] = darwin_macosx_version_min[inputindex++];
++
++ if (ISDIGIT (darwin_macosx_version_min[inputindex])) {
++ /* Starting with OS X 10.10, the macro ends '00' rather than '0',
++ i.e. 10.10.x becomes 101000 rather than 10100. */
++ result[outputindex++] = darwin_macosx_version_min[inputindex++];
++ result[4] = '0';
++ result[5] = '0';
++ result[6] = '\0';
++ }
++
++ /* if we're out of input, leave patch level at 0 or 00 and finish */
++ if (darwin_macosx_version_min[inputindex] == '\0')
++ return result;
++
++ /* a dot *must* follow now */
++ if (darwin_macosx_version_min[inputindex++] != '.')
++ goto fail;
++
++ /* a digit must follow after the dot */
++ if (! ISDIGIT (darwin_macosx_version_min[inputindex]))
++ goto fail;
++
++ /* old-style macro */
++ if (outputindex == 3)
++ {
++ /* one-digit patch level */
++ if (darwin_macosx_version_min[inputindex + 1] == '\0')
+ {
+- if (darwin_macosx_version_min[4] != '.')
+- goto fail;
+- if (! ISDIGIT (darwin_macosx_version_min[5]))
+- goto fail;
+- if (darwin_macosx_version_min[6] != '\0')
+- goto fail;
+- result[3] = darwin_macosx_version_min[5];
++ result[outputindex] = darwin_macosx_version_min[inputindex];
++ return result;
+ }
+- else
+- result[3] = '0';
++
++ inputindex++;
++ if (! ISDIGIT (darwin_macosx_version_min[inputindex++]))
++ goto fail;
++
++ /* three digits? */
++ if (darwin_macosx_version_min[inputindex] != '\0')
++ goto fail;
++
++ /* no room for another digit. Traditional Apple GCC 4.2.1 doesn't accept
++ * it but current clang caps it to 9. We choose to be in line with clang. */
++ result[outputindex] = '9';
++ return result;
++ }
++
++ /* new-style macro */
++
++ /* leave a leading zero if only one digit is following */
++ if (darwin_macosx_version_min[inputindex + 1] == '\0') {
++ result[outputindex + 1] = darwin_macosx_version_min[inputindex];
++ return result;
++ }
++
++ result[outputindex++] = darwin_macosx_version_min[inputindex++];
++
++ /* a digit must follow now */
++ if (! ISDIGIT (darwin_macosx_version_min[inputindex]))
++ goto fail;
++
++ result[outputindex] = darwin_macosx_version_min[inputindex++];
++
++ /* no more input allowed */
++ if (darwin_macosx_version_min[inputindex] != '\0')
++ goto fail;
+
+ return result;
+