This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.27.9000-238-gbcfa607
- From: sthibaul at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 24 Mar 2018 23:52:54 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.27.9000-238-gbcfa607
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, master has been updated
via bcfa607b26c2399d4fda88705d40978d62af8bf3 (commit)
from fa97d2ab5b19de0ca3cd02471d0bbf4f09b5032d (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=bcfa607b26c2399d4fda88705d40978d62af8bf3
commit bcfa607b26c2399d4fda88705d40978d62af8bf3
Author: Samuel Thibault <samuel.thibault@ens-lyon.org>
Date: Sat Mar 17 01:28:41 2018 +0100
hurd: Initialize TLS and libpthread before signal thread start
* sysdeps/generic/libc-start.h [!SHARED] (ARCH_SETUP_TLS): Define to
__libc_setup_tls.
* sysdeps/unix/sysv/linux/powerpc/libc-start.h [!SHARED]
(ARCH_SETUP_TLS): Likewise.
* sysdeps/mach/hurd/libc-start.h: New file copied from
sysdeps/generic/libc-start.h, but define ARCH_SETUP_TLS to empty.
* csu/libc-start.c [!SHARED] (LIBC_START_MAIN): Call ARCH_SETUP_TLS instead
of __libc_setup_tls.
* sysdeps/mach/hurd/i386/init-first.c [!SHARED] (init1): Call
__libc_setup_tls before initializing libpthread and running _hurd_init which
starts the signal thread.
diff --git a/csu/libc-start.c b/csu/libc-start.c
index 605222f..4941323 100644
--- a/csu/libc-start.c
+++ b/csu/libc-start.c
@@ -194,7 +194,7 @@ LIBC_START_MAIN (int (*main) (int, char **, char ** MAIN_AUXVEC_DECL),
ARCH_SETUP_IREL ();
/* The stack guard goes into the TCB, so initialize it early. */
- __libc_setup_tls ();
+ ARCH_SETUP_TLS ();
/* In some architectures, IREL{,A} relocations happen after TLS setup in
order to let IFUNC resolvers benefit from TCB information, e.g. powerpc's
diff --git a/sysdeps/generic/libc-start.h b/sysdeps/generic/libc-start.h
index 6c416a1..e0361f6 100644
--- a/sysdeps/generic/libc-start.h
+++ b/sysdeps/generic/libc-start.h
@@ -24,6 +24,7 @@
initialization, and this means you cannot, without machine
knowledge, access TLS from an IFUNC resolver. */
#define ARCH_SETUP_IREL() apply_irel ()
+#define ARCH_SETUP_TLS() __libc_setup_tls ()
#define ARCH_APPLY_IREL()
#endif /* ! SHARED */
diff --git a/sysdeps/mach/hurd/i386/init-first.c b/sysdeps/mach/hurd/i386/init-first.c
index e272e32..8b6e62b 100644
--- a/sysdeps/mach/hurd/i386/init-first.c
+++ b/sysdeps/mach/hurd/i386/init-first.c
@@ -104,12 +104,12 @@ init1 (int argc, char *arg0, ...)
++envp;
d = (void *) ++envp;
+#ifndef SHARED
/* If we are the bootstrap task started by the kernel,
then after the environment pointers there is no Hurd
data block; the argument strings start there. */
if ((void *) d == argv[0] || d->phdr == 0)
{
-#ifndef SHARED
/* With a new enough linker (binutils-2.23 or better),
the magic __ehdr_start symbol will be available and
__libc_start_main will have done this that way already. */
@@ -124,18 +124,27 @@ init1 (int argc, char *arg0, ...)
_dl_phnum = ehdr->e_phnum;
assert (ehdr->e_phentsize == sizeof (ElfW(Phdr)));
}
-#endif
- return;
}
+ else
+ {
+ __libc_enable_secure = d->flags & EXEC_SECURE;
-#ifndef SHARED
- __libc_enable_secure = d->flags & EXEC_SECURE;
+ _dl_phdr = (ElfW(Phdr) *) d->phdr;
+ _dl_phnum = d->phdrsz / sizeof (ElfW(Phdr));
+ assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0);
+ }
- _dl_phdr = (ElfW(Phdr) *) d->phdr;
- _dl_phnum = d->phdrsz / sizeof (ElfW(Phdr));
- assert (d->phdrsz % sizeof (ElfW(Phdr)) == 0);
+ __libc_setup_tls ();
#endif
+ /* Initialize libpthread if linked in. */
+ if (__pthread_initialize_minimal != NULL)
+ __pthread_initialize_minimal ();
+
+ if ((void *) d == argv[0])
+ /* No Hurd data block to process. */
+ return;
+
_hurd_init_dtable = d->dtable;
_hurd_init_dtablesize = d->dtablesize;
diff --git a/sysdeps/generic/libc-start.h b/sysdeps/mach/hurd/libc-start.h
similarity index 94%
copy from sysdeps/generic/libc-start.h
copy to sysdeps/mach/hurd/libc-start.h
index 6c416a1..f7e3993 100644
--- a/sysdeps/generic/libc-start.h
+++ b/sysdeps/mach/hurd/libc-start.h
@@ -1,4 +1,4 @@
-/* Generic definitions for libc main startup.
+/* Hurd definitions for libc main startup.
Copyright (C) 2017-2018 Free Software Foundation, Inc.
This file is part of the GNU C Library.
@@ -24,6 +24,7 @@
initialization, and this means you cannot, without machine
knowledge, access TLS from an IFUNC resolver. */
#define ARCH_SETUP_IREL() apply_irel ()
+#define ARCH_SETUP_TLS()
#define ARCH_APPLY_IREL()
#endif /* ! SHARED */
diff --git a/sysdeps/unix/sysv/linux/powerpc/libc-start.h b/sysdeps/unix/sysv/linux/powerpc/libc-start.h
index 46b38b0..689abb0 100644
--- a/sysdeps/unix/sysv/linux/powerpc/libc-start.h
+++ b/sysdeps/unix/sysv/linux/powerpc/libc-start.h
@@ -23,6 +23,7 @@
/* IREL{,A} must happen after TCB initialization in order to allow IFUNC
resolvers to read TCB fields, e.g. hwcap and at_platform. */
#define ARCH_SETUP_IREL()
+#define ARCH_SETUP_TLS() __libc_setup_tls ()
#define ARCH_APPLY_IREL() apply_irel ()
#endif /* ! SHARED */
-----------------------------------------------------------------------
Summary of changes:
csu/libc-start.c | 2 +-
sysdeps/generic/libc-start.h | 1 +
sysdeps/mach/hurd/i386/init-first.c | 25 +++++++++++++++++--------
sysdeps/{generic => mach/hurd}/libc-start.h | 3 ++-
sysdeps/unix/sysv/linux/powerpc/libc-start.h | 1 +
5 files changed, 22 insertions(+), 10 deletions(-)
copy sysdeps/{generic => mach/hurd}/libc-start.h (94%)
hooks/post-receive
--
GNU C Library master sources