You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
gentoo-overlay/sys-devel/gcc-apple/files/gcc-apple-4.2.1_p5666-darwi...

149 lines
4.8 KiB

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;