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.18-660-g35e8f7a
- From: ppluzhnikov at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 19 Dec 2013 00:26:26 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.18-660-g35e8f7a
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 35e8f7ab94c910659de9d507aa0f3e1f8973d914 (commit)
from 69a17d9d245dc3551792e95e1823cc2d877592f3 (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=35e8f7ab94c910659de9d507aa0f3e1f8973d914
commit 35e8f7ab94c910659de9d507aa0f3e1f8973d914
Author: Paul Pluzhnikov <ppluzhnikov@google.com>
Date: Wed Dec 18 16:24:19 2013 -0800
Patch 3/4 of the effort to make TLS access async-signal-safe.
Factor out _dl_clear_dtv.
2013-12-18 Andrew Hunter <ahh@google.com>
* elf/Versions (ld): Add _dl_clear_dtv.
* sysdeps/generic/ldsodefs.h (_dl_clear_dtv): New prototype.
* elf/dl-tls.c (_dl_clear_dtv): New function.
* nptl/allocatestack.c (get_cached_stack): Call _dl_clear_dtv.
diff --git a/ChangeLog b/ChangeLog
index 126c92e..fae243e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2013-12-18 Andrew Hunter <ahh@google.com>
+ * elf/Versions (ld): Add _dl_clear_dtv.
+ * sysdeps/generic/ldsodefs.h (_dl_clear_dtv): New prototype.
+ * elf/dl-tls.c (_dl_clear_dtv): New function.
+ * nptl/allocatestack.c (get_cached_stack): Call _dl_clear_dtv.
+
+2013-12-18 Andrew Hunter <ahh@google.com>
+
* sysdeps/generic/ldsodefs.h (_dl_mask_all_signals): New prototype.
(_dl_unmask_signals): Likewise.
* sysdeps/mach/hurd/dl-sysdep.h (_dl_mask_all_signals): New stub.
diff --git a/elf/Versions b/elf/Versions
index 2383992..01b7a59 100644
--- a/elf/Versions
+++ b/elf/Versions
@@ -53,6 +53,7 @@ ld {
_dl_allocate_tls; _dl_allocate_tls_init;
_dl_argv; _dl_find_dso_for_object; _dl_get_tls_static_info;
_dl_deallocate_tls; _dl_make_stack_executable; _dl_out_of_memory;
+ _dl_clear_dtv;
_dl_rtld_di_serinfo; _dl_starting_up; _dl_tls_setup;
_rtld_global; _rtld_global_ro;
diff --git a/elf/dl-tls.c b/elf/dl-tls.c
index 576d9a1..c60a6b7 100644
--- a/elf/dl-tls.c
+++ b/elf/dl-tls.c
@@ -463,6 +463,18 @@ _dl_allocate_tls (void *mem)
}
rtld_hidden_def (_dl_allocate_tls)
+void
+internal_function
+_dl_clear_dtv (dtv_t *dtv)
+{
+ for (size_t cnt = 0; cnt < dtv[-1].counter; ++cnt)
+ if (! dtv[1 + cnt].pointer.is_static
+ && dtv[1 + cnt].pointer.val != TLS_DTV_UNALLOCATED)
+ free (dtv[1 + cnt].pointer.val);
+ memset (dtv, '\0', (dtv[-1].counter + 1) * sizeof (dtv_t));
+}
+
+rtld_hidden_def (_dl_clear_dtv)
#ifndef SHARED
extern dtv_t _dl_static_dtv[];
diff --git a/nptl/allocatestack.c b/nptl/allocatestack.c
index 1e0fe1f..96e3845 100644
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -242,11 +242,7 @@ get_cached_stack (size_t *sizep, void **memp)
/* Clear the DTV. */
dtv_t *dtv = GET_DTV (TLS_TPADJ (result));
- for (size_t cnt = 0; cnt < dtv[-1].counter; ++cnt)
- if (! dtv[1 + cnt].pointer.is_static
- && dtv[1 + cnt].pointer.val != TLS_DTV_UNALLOCATED)
- free (dtv[1 + cnt].pointer.val);
- memset (dtv, '\0', (dtv[-1].counter + 1) * sizeof (dtv_t));
+ _dl_clear_dtv (dtv);
/* Re-initialize the TLS. */
_dl_allocate_tls_init (TLS_TPADJ (result));
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index e919e41..1bda60c 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -989,6 +989,11 @@ extern void *_dl_allocate_tls_storage (void)
extern void *_dl_allocate_tls_init (void *) internal_function;
rtld_hidden_proto (_dl_allocate_tls_init)
+/* Remove all allocated dynamic TLS regions from a DTV
+ for reuse by new thread. */
+extern void _dl_clear_dtv (dtv_t *dtv) internal_function;
+rtld_hidden_proto (_dl_clear_dtv)
+
/* Deallocate memory allocated with _dl_allocate_tls. */
extern void _dl_deallocate_tls (void *tcb, bool dealloc_tcb) internal_function;
rtld_hidden_proto (_dl_deallocate_tls)
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 7 +++++++
elf/Versions | 1 +
elf/dl-tls.c | 12 ++++++++++++
nptl/allocatestack.c | 6 +-----
sysdeps/generic/ldsodefs.h | 5 +++++
5 files changed, 26 insertions(+), 5 deletions(-)
hooks/post-receive
--
GNU C Library master sources