From ba42395e4120e703cc2b666b6c035989eb7e940a Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Tue, 22 Apr 2014 00:38:57 +0200 Subject: Also avoid inlining when NOT_IN_libc is defined --- hurd/hurd/fd.h | 2 +- hurd/hurd/port.h | 12 ++++++------ hurd/hurd/signal.h | 6 +++--- hurd/hurd/threadvar.h | 4 ++-- hurd/hurd/userlink.h | 6 +++--- 5 files changed, 15 insertions(+), 15 deletions(-) (limited to 'hurd') diff --git a/hurd/hurd/fd.h b/hurd/hurd/fd.h index cd8edccdc2..eaaa332050 100644 --- a/hurd/hurd/fd.h +++ b/hurd/hurd/fd.h @@ -60,7 +60,7 @@ extern struct mutex _hurd_dtable_lock; /* Locks those two variables. */ struct hurd_fd *_hurd_fd_get (int fd); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_FD_H_EXTERN_INLINE struct hurd_fd * _hurd_fd_get (int fd) { diff --git a/hurd/hurd/port.h b/hurd/hurd/port.h index ce55154364..810bb3171a 100644 --- a/hurd/hurd/port.h +++ b/hurd/hurd/port.h @@ -62,7 +62,7 @@ struct hurd_port void _hurd_port_init (struct hurd_port *port, mach_port_t init); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_PORT_H_EXTERN_INLINE void _hurd_port_init (struct hurd_port *port, mach_port_t init) { @@ -83,7 +83,7 @@ mach_port_t _hurd_port_locked_get (struct hurd_port *port, struct hurd_userlink *link); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_PORT_H_EXTERN_INLINE mach_port_t _hurd_port_locked_get (struct hurd_port *port, struct hurd_userlink *link) @@ -107,7 +107,7 @@ mach_port_t _hurd_port_get (struct hurd_port *port, struct hurd_userlink *link); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_PORT_H_EXTERN_INLINE mach_port_t _hurd_port_get (struct hurd_port *port, struct hurd_userlink *link) @@ -129,7 +129,7 @@ _hurd_port_free (struct hurd_port *port, struct hurd_userlink *link, mach_port_t used_port); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_PORT_H_EXTERN_INLINE void _hurd_port_free (struct hurd_port *port, struct hurd_userlink *link, @@ -157,7 +157,7 @@ _hurd_port_free (struct hurd_port *port, void _hurd_port_locked_set (struct hurd_port *port, mach_port_t newport); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_PORT_H_EXTERN_INLINE void _hurd_port_locked_set (struct hurd_port *port, mach_port_t newport) { @@ -174,7 +174,7 @@ _hurd_port_locked_set (struct hurd_port *port, mach_port_t newport) void _hurd_port_set (struct hurd_port *port, mach_port_t newport); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_PORT_H_EXTERN_INLINE void _hurd_port_set (struct hurd_port *port, mach_port_t newport) { diff --git a/hurd/hurd/signal.h b/hurd/hurd/signal.h index ae581f68b2..e3e2790a98 100644 --- a/hurd/hurd/signal.h +++ b/hurd/hurd/signal.h @@ -129,7 +129,7 @@ extern struct hurd_sigstate *_hurd_self_sigstate (void) #define _HURD_SIGNAL_H_EXTERN_INLINE __extern_inline #endif -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate * _hurd_self_sigstate (void) { @@ -168,7 +168,7 @@ extern int _hurd_core_limit; void *_hurd_critical_section_lock (void); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_SIGNAL_H_EXTERN_INLINE void * _hurd_critical_section_lock (void) { @@ -198,7 +198,7 @@ _hurd_critical_section_lock (void) void _hurd_critical_section_unlock (void *our_lock); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_SIGNAL_H_EXTERN_INLINE void _hurd_critical_section_unlock (void *our_lock) { diff --git a/hurd/hurd/threadvar.h b/hurd/hurd/threadvar.h index e8013ce03f..93e91ecbb5 100644 --- a/hurd/hurd/threadvar.h +++ b/hurd/hurd/threadvar.h @@ -82,7 +82,7 @@ enum __hurd_threadvar_index extern unsigned long int *__hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index, void *__sp); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * __hurd_threadvar_location_from_sp (enum __hurd_threadvar_index __index, void *__sp) @@ -108,7 +108,7 @@ __hurd_threadvar_location (enum __hurd_threadvar_index __index) __THROW the same stack frame by different threads. */ __attribute__ ((__const__)); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_THREADVAR_H_EXTERN_INLINE unsigned long int * __hurd_threadvar_location (enum __hurd_threadvar_index __index) { diff --git a/hurd/hurd/userlink.h b/hurd/hurd/userlink.h index 4962f0cb65..bd0a8c2569 100644 --- a/hurd/hurd/userlink.h +++ b/hurd/hurd/userlink.h @@ -80,7 +80,7 @@ void _hurd_userlink_link (struct hurd_userlink **chainp, struct hurd_userlink *link); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_USERLINK_H_EXTERN_INLINE void _hurd_userlink_link (struct hurd_userlink **chainp, struct hurd_userlink *link) @@ -109,7 +109,7 @@ _hurd_userlink_link (struct hurd_userlink **chainp, int _hurd_userlink_unlink (struct hurd_userlink *link); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_USERLINK_H_EXTERN_INLINE int _hurd_userlink_unlink (struct hurd_userlink *link) { @@ -143,7 +143,7 @@ _hurd_userlink_unlink (struct hurd_userlink *link) int _hurd_userlink_clear (struct hurd_userlink **chainp); -#if defined __USE_EXTERN_INLINES && defined _LIBC +#if defined __USE_EXTERN_INLINES && defined _LIBC && !defined NOT_IN_libc _HURD_USERLINK_H_EXTERN_INLINE int _hurd_userlink_clear (struct hurd_userlink **chainp) { -- cgit v1.2.3 From 1cefd2a2f2ebdd72f2e12f14a98e07f0da25dde3 Mon Sep 17 00:00:00 2001 From: Samuel Thibault Date: Tue, 22 Apr 2014 00:43:09 +0200 Subject: Rather keep _hurd_sigstate in tcbhead_t it avoids involving all the TLS stuff while handling signals... --- .topmsg | 2 +- hurd/hurd/signal.h | 11 +++++------ hurd/hurdsig.c | 3 --- sysdeps/mach/hurd/Versions | 2 -- sysdeps/mach/hurd/tls.h | 1 + 5 files changed, 7 insertions(+), 12 deletions(-) (limited to 'hurd') diff --git a/.topmsg b/.topmsg index 5bb20d2704..cdf5ad38b5 100644 --- a/.topmsg +++ b/.topmsg @@ -4,4 +4,4 @@ Subject: [PATCH] tls-threadvar replace the custom threadvar mechanism with generic TLS. That will fix sigaltstack. -Note: the added reply_port field should be kept last. +Note: the added reply_port and _hurd_sigstate fields should be kept last. diff --git a/hurd/hurd/signal.h b/hurd/hurd/signal.h index e633debe7c..dcb7f2162b 100644 --- a/hurd/hurd/signal.h +++ b/hurd/hurd/signal.h @@ -128,14 +128,13 @@ extern struct hurd_sigstate *_hurd_self_sigstate (void) #define _HURD_SIGNAL_H_EXTERN_INLINE __extern_inline #endif -extern __thread struct hurd_sigstate *_hurd_sigstate; #if defined __USE_EXTERN_INLINES && defined _LIBC _HURD_SIGNAL_H_EXTERN_INLINE struct hurd_sigstate * _hurd_self_sigstate (void) { - if (_hurd_sigstate == NULL) - _hurd_sigstate = _hurd_thread_sigstate (__mach_thread_self ()); - return _hurd_sigstate; + if (THREAD_SELF->_hurd_sigstate == NULL) + THREAD_SELF->_hurd_sigstate = _hurd_thread_sigstate (__mach_thread_self ()); + return THREAD_SELF->_hurd_sigstate; } #endif @@ -178,14 +177,14 @@ _hurd_critical_section_lock (void) return NULL; #endif - ss = _hurd_sigstate; + ss = THREAD_SELF->_hurd_sigstate; if (ss == NULL) { /* The thread variable is unset; this must be the first time we've asked for it. In this case, the critical section flag cannot possible already be set. Look up our sigstate structure the slow way; this locks the sigstate lock. */ - ss = _hurd_sigstate = _hurd_thread_sigstate (__mach_thread_self ()); + ss = THREAD_SELF->_hurd_sigstate = _hurd_thread_sigstate (__mach_thread_self ()); __spin_unlock (&ss->lock); } diff --git a/hurd/hurdsig.c b/hurd/hurdsig.c index 1d87e2e973..80eac9f998 100644 --- a/hurd/hurdsig.c +++ b/hurd/hurdsig.c @@ -50,9 +50,6 @@ thread_t _hurd_sigthread; unsigned long int __hurd_sigthread_stack_base; unsigned long int __hurd_sigthread_stack_end; -/* Per-thread signal state. */ -__thread struct hurd_sigstate *_hurd_sigstate; - /* Linked-list of per-thread signal state. */ struct hurd_sigstate *_hurd_sigstates; diff --git a/sysdeps/mach/hurd/Versions b/sysdeps/mach/hurd/Versions index 9ecdbaf90e..62ee990ac1 100644 --- a/sysdeps/mach/hurd/Versions +++ b/sysdeps/mach/hurd/Versions @@ -7,7 +7,6 @@ libc { # Functions shared with the dynamic linker __libc_read; __libc_write; __libc_lseek64; __libc_lock_self0; __libc_lock_self; - _hurd_sigstate; _dl_init_first; } @@ -34,6 +33,5 @@ ld { # functions that must be shared with libc __libc_read; __libc_write; __libc_lseek64; __libc_lock_self0; __libc_lock_self; - _hurd_sigstate; } } diff --git a/sysdeps/mach/hurd/tls.h b/sysdeps/mach/hurd/tls.h index a6ac16b6ba..73f495a8a1 100644 --- a/sysdeps/mach/hurd/tls.h +++ b/sysdeps/mach/hurd/tls.h @@ -50,6 +50,7 @@ typedef struct /* Keep this field last */ mach_port_t reply_port; /* This thread's reply port. */ + struct hurd_sigstate *_hurd_sigstate; } tcbhead_t; -- cgit v1.2.3