This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]