--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/components/gcc5/patches/009-r234365.patch Wed Sep 07 18:09:38 2016 -0500
@@ -0,0 +1,93 @@
+#
+# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38239
+# This will be fixed in 5.4.
+#
+# Index: libgcc/ChangeLog
+# ===================================================================
+# --- a/libgcc/ChangeLog (revision 234364)
+# +++ b/libgcc/ChangeLog (revision 234365)
+# @@ -1,3 +1,13 @@
+# +2016-03-21 Rainer Orth <[email protected]>
+# +
+# + Backport from mainline
+# + 2016-03-16 Rainer Orth <[email protected]>
+# +
+# + PR target/38239
+# + * config/sol2/gmon.c [__i386__] (_mcount): Save and restore
+# + call-clobbered registers.
+# + (internal_mcount): Remove __i386__ handling.
+# +
+# 2016-02-10 Ian Lance Taylor <[email protected]>
+#
+# PR go/68562
+Index: libgcc/config/sol2/gmon.c
+===================================================================
+--- a/libgcc/config/sol2/gmon.c (revision 234364)
++++ b/libgcc/config/sol2/gmon.c (revision 234365)
+@@ -44,11 +44,7 @@
+
+ extern void monstartup (char *, char *);
+ extern void _mcleanup (void);
+-#ifdef __i386__
+-static void internal_mcount (void) __attribute__ ((used));
+-#else
+ static void internal_mcount (char *, unsigned short *) __attribute__ ((used));
+-#endif
+ static void moncontrol (int);
+
+ struct phdr {
+@@ -223,8 +219,19 @@
+ /* Solaris 2 libraries use _mcount. */
+ #if defined __i386__
+ asm(".globl _mcount\n"
++ " .type _mcount, @function\n"
+ "_mcount:\n"
+- " jmp internal_mcount\n");
++ /* Save and restore the call-clobbered registers. */
++ " pushl %eax\n"
++ " pushl %ecx\n"
++ " pushl %edx\n"
++ " movl 12(%esp), %edx\n"
++ " movl 4(%ebp), %eax\n"
++ " call internal_mcount\n"
++ " popl %edx\n"
++ " popl %ecx\n"
++ " popl %eax\n"
++ " ret\n");
+ #elif defined __x86_64__
+ /* See GLIBC for additional information about this technique. */
+ asm(".globl _mcount\n"
+@@ -299,11 +306,7 @@
+ #endif
+
+ static void
+-#ifdef __i386__
+-internal_mcount (void)
+-#else
+ internal_mcount (char *selfpc, unsigned short *frompcindex)
+-#endif
+ {
+ struct tostruct *top;
+ struct tostruct *prevtop;
+@@ -310,21 +313,6 @@
+ long toindex;
+ static char already_setup;
+
+-#ifdef __i386__
+- char *selfpc;
+- unsigned short *frompcindex;
+-
+- /* Find the return address for mcount and the return address for mcount's
+- caller. */
+-
+- /* selfpc = pc pushed by mcount call.
+- This identifies the function that was just entered. */
+- selfpc = (void *) __builtin_return_address (0);
+- /* frompcindex = pc in preceding frame.
+- This identifies the caller of the function just entered. */
+- frompcindex = (void *) __builtin_return_address (1);
+-#endif
+-
+ /* Only necessary without the Solaris CRTs or a proper gcrt1.o, otherwise
+ crtpg.o or gcrt1.o take care of that.
+