This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[COMMITTED PATCH] NPTL: Clean up THREAD_SYSINFO macros.
- From: Roland McGrath <roland at hack dot frob dot com>
- To: "GNU C. Library" <libc-alpha at sourceware dot org>
- Date: Fri, 17 Oct 2014 15:03:55 -0700 (PDT)
- Subject: [COMMITTED PATCH] NPTL: Clean up THREAD_SYSINFO macros.
- Authentication-results: sourceware.org; auth=none
This has no material effect on Linux configurations.
Thanks,
Roland
* sysdeps/i386/nptl/tls.h
(THREAD_SELF_SYSINFO, THREAD_SYSINFO): Macros removed.
[NEED_DL_SYSINFO] (SETUP_THREAD_SYSINFO, CHECK_THREAD_SYSINFO):
New macros.
* sysdeps/ia64/nptl/tls.h [NEED_DL_SYSINFO]
(SETUP_THREAD_SYSINFO, CHECK_THREAD_SYSINFO): New macros.
* nptl/allocatestack.c (allocate_stack) [NEED_DL_SYSINFO]:
Call SETUP_THREAD_SYSINFO instead of doing an assignment.
* nptl/createthread.c (create_thread) [NEED_DL_SYSINFO]:
Call CHECK_THREAD_SYSINFO instead of doing an assert.
--- a/nptl/allocatestack.c
+++ b/nptl/allocatestack.c
@@ -430,8 +430,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
#endif
#ifdef NEED_DL_SYSINFO
- /* Copy the sysinfo value from the parent. */
- THREAD_SYSINFO(pd) = THREAD_SELF_SYSINFO;
+ SETUP_THREAD_SYSINFO (pd);
#endif
/* The process ID is also the same as that of the caller. */
@@ -567,8 +566,7 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
#endif
#ifdef NEED_DL_SYSINFO
- /* Copy the sysinfo value from the parent. */
- THREAD_SYSINFO(pd) = THREAD_SELF_SYSINFO;
+ SETUP_THREAD_SYSINFO (pd);
#endif
/* Don't allow setxid until cloned. */
--- a/nptl/createthread.c
+++ b/nptl/createthread.c
@@ -234,7 +234,7 @@ create_thread (struct pthread *pd, const struct pthread_attr *attr,
}
#ifdef NEED_DL_SYSINFO
- assert (THREAD_SELF_SYSINFO == THREAD_SYSINFO (pd));
+ CHECK_THREAD_SYSINFO (pd);
#endif
/* Determine whether the newly created threads has to be started
--- a/nptl/nptl-init.c
+++ b/nptl/nptl-init.c
@@ -304,8 +304,10 @@ __pthread_initialize_minimal_internal (void)
/* Minimal initialization of the thread descriptor. */
struct pthread *pd = THREAD_SELF;
+#ifdef __NR_set_tid_address
INTERNAL_SYSCALL_DECL (err);
pd->pid = pd->tid = INTERNAL_SYSCALL (set_tid_address, err, 1, &pd->tid);
+#endif
THREAD_SETMEM (pd, specific[0], &pd->specific_1stblock[0]);
THREAD_SETMEM (pd, user_stack, true);
if (LLL_LOCK_INITIALIZER != 0)
--- a/sysdeps/i386/nptl/tls.h
+++ b/sysdeps/i386/nptl/tls.h
@@ -141,9 +141,6 @@ union user_desc_init
# define GET_DTV(descr) \
(((tcbhead_t *) (descr))->dtv)
-#define THREAD_SELF_SYSINFO THREAD_GETMEM (THREAD_SELF, header.sysinfo)
-#define THREAD_SYSINFO(pd) ((pd)->header.sysinfo)
-
/* Macros to load from and store into segment registers. */
# ifndef TLS_GET_GS
# define TLS_GET_GS() \
@@ -154,9 +151,13 @@ union user_desc_init
__asm ("movw %w0, %%gs" :: "q" (val))
# endif
-#if defined NEED_DL_SYSINFO
+#ifdef NEED_DL_SYSINFO
# define INIT_SYSINFO \
_head->sysinfo = GLRO(dl_sysinfo)
+# define SETUP_THREAD_SYSINFO(pd) \
+ ((pd)->header.sysinfo = THREAD_GETMEM (THREAD_SELF, header.sysinfo))
+# define CHECK_THREAD_SYSINFO(pd) \
+ assert ((pd)->header.sysinfo == THREAD_GETMEM (THREAD_SELF, header.sysinfo))
#else
# define INIT_SYSINFO
#endif
--- a/sysdeps/ia64/nptl/tls.h
+++ b/sysdeps/ia64/nptl/tls.h
@@ -109,8 +109,12 @@ register struct pthread *__thread_self __asm__("r13");
#define THREAD_SYSINFO(pd) \
(((tcbhead_t *) ((char *) (pd) + TLS_PRE_TCB_SIZE))->__private)
-#if defined NEED_DL_SYSINFO
+#ifdef NEED_DL_SYSINFO
# define INIT_SYSINFO THREAD_SELF_SYSINFO = (void *) GLRO(dl_sysinfo)
+# define SETUP_THREAD_SYSINFO(pd) \
+ (THREAD_SYSINFO (pd) = THREAD_SELF_SYSINFO)
+# define CHECK_THREAD_SYSINFO(pd) \
+ assert (THREAD_SYSINFO (pd) == THREAD_SELF_SYSINFO)
#else
# define INIT_SYSINFO NULL
#endif