This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch google/grte/v5-2.27/master updated. glibc-2.27-150-g91f441a
- From: shebs at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 25 Sep 2018 14:49:10 -0000
- Subject: GNU C Library master sources branch google/grte/v5-2.27/master updated. glibc-2.27-150-g91f441a
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, google/grte/v5-2.27/master has been updated
via 91f441abb64ef8b51f6d99a227ded8ed3d1a1880 (commit)
via 0bcfc18228942c42f1781eed90a16741876a90ca (commit)
from 2248ae2b24dedfcc6c549deea21af581bddef42e (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=91f441abb64ef8b51f6d99a227ded8ed3d1a1880
commit 91f441abb64ef8b51f6d99a227ded8ed3d1a1880
Author: Stan Shebs <stanshebs@google.com>
Date: Tue Sep 25 07:48:20 2018 -0700
Work around a ppc clang inlining bug
diff --git a/sysdeps/pthread/aio_misc.c b/sysdeps/pthread/aio_misc.c
index fb13d62..8d4a258 100644
--- a/sysdeps/pthread/aio_misc.c
+++ b/sysdeps/pthread/aio_misc.c
@@ -27,6 +27,9 @@
#include <sys/param.h>
#include <sys/stat.h>
#include <sys/time.h>
+#if defined __clang__ && defined __powerpc64__
+#define UGLY_INLINE_HACK
+#endif
#include <aio_misc.h>
#ifndef aio_create_helper_thread
diff --git a/sysdeps/unix/sysv/linux/aio_misc.h b/sysdeps/unix/sysv/linux/aio_misc.h
index 0d8aa45..f463c8f 100644
--- a/sysdeps/unix/sysv/linux/aio_misc.h
+++ b/sysdeps/unix/sysv/linux/aio_misc.h
@@ -35,7 +35,13 @@ __aio_start_notify_thread (void)
INTERNAL_SYSCALL (rt_sigprocmask, err, 4, SIG_SETMASK, &ss, NULL, _NSIG / 8);
}
-extern inline int
+extern
+/* clang fails to inline properly in one case, and then linking fails
+ because the function was discarded, so ensure it's kept. */
+#ifndef UGLY_INLINE_HACK
+inline
+#endif
+int
__aio_create_helper_thread (pthread_t *threadp, void *(*tf) (void *),
void *arg)
{
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=0bcfc18228942c42f1781eed90a16741876a90ca
commit 0bcfc18228942c42f1781eed90a16741876a90ca
Author: Stan Shebs <stanshebs@google.com>
Date: Tue Sep 25 07:20:18 2018 -0700
Add workaround for segfaults in __longjmp when compiled with ppc clang
diff --git a/elf/dl-error-skeleton.c b/elf/dl-error-skeleton.c
index d5f418a..01870c5 100644
--- a/elf/dl-error-skeleton.c
+++ b/elf/dl-error-skeleton.c
@@ -85,6 +85,21 @@ fatal_error (int errcode, const char *objname, const char *occasion,
: ""));
}
+/* Due to a complicated set of interactions with different symbol
+ versions, presumably including a VMX-specific __vmx__longjmp, PPC
+ clang ends calling __longjump with ld.so through the global entry
+ point (+0x0) instead of via the local entry point (+0x8) which
+ results in ld.so exceptions crashing because the TOC is not set up.
+ The hack here simply calls the function through a pointer, which
+ guarantees that the global entry point has the TOC set up. (This
+ may or may not be a clang bug, the symbol aliasing is tricky and
+ literally affects only __longjmp out of all the symbols in
+ libc.) */
+#if defined __clang__ && defined __powerpc64__
+volatile void (*longjmpptr) (struct __jmp_buf_tag __env[1], int __val)
+__attribute__ ((__nothrow__)) __attribute__ ((__noreturn__)) = __longjmp;
+#endif
+
void
_dl_signal_exception (int errcode, struct dl_exception *exception,
const char *occasion)
@@ -96,7 +111,11 @@ _dl_signal_exception (int errcode, struct dl_exception *exception,
*lcatch->errcode = errcode;
/* We do not restore the signal mask because none was saved. */
+#if defined __clang__ && defined __powerpc64__
+ (*longjmpptr) (lcatch->env[0].__jmpbuf, 1);
+#else
__longjmp (lcatch->env[0].__jmpbuf, 1);
+#endif
}
else
fatal_error (errcode, exception->objname, occasion, exception->errstring);
@@ -118,7 +137,11 @@ _dl_signal_error (int errcode, const char *objname, const char *occation,
*lcatch->errcode = errcode;
/* We do not restore the signal mask because none was saved. */
+#if defined __clang__ && defined __powerpc64__
+ (*longjmpptr) (lcatch->env[0].__jmpbuf, 1);
+#else
__longjmp (lcatch->env[0].__jmpbuf, 1);
+#endif
}
else
fatal_error (errcode, objname, occation, errstring);
-----------------------------------------------------------------------
Summary of changes:
elf/dl-error-skeleton.c | 23 +++++++++++++++++++++++
sysdeps/pthread/aio_misc.c | 3 +++
sysdeps/unix/sysv/linux/aio_misc.h | 8 +++++++-
3 files changed, 33 insertions(+), 1 deletions(-)
hooks/post-receive
--
GNU C Library master sources