All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH urcu 2/3] Fix: symbol aliases with TLS compat
       [not found] <20181212200139.19046-1-mjeanson@efficios.com>
@ 2018-12-12 20:01 ` Michael Jeanson
  2018-12-12 20:01 ` [PATCH urcu 3/3] Add missing fall through annotations Michael Jeanson
  2018-12-13  1:51 ` [PATCH urcu 1/3] Port: no symbols aliases on MacOS Mathieu Desnoyers
  2 siblings, 0 replies; 3+ messages in thread
From: Michael Jeanson @ 2018-12-12 20:01 UTC (permalink / raw)
  To: lttng-dev, mathieu.desnoyers

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
---
 src/urcu-bp.c    |  3 +--
 src/urcu-qsbr.c  |  3 +--
 src/urcu-utils.h | 14 ++++++++++++++
 src/urcu.c       |  3 +--
 4 files changed, 17 insertions(+), 6 deletions(-)

diff --git a/src/urcu-bp.c b/src/urcu-bp.c
index 0653f9d..54fda16 100644
--- a/src/urcu-bp.c
+++ b/src/urcu-bp.c
@@ -151,8 +151,7 @@ URCU_ATTR_ALIAS("urcu_bp_gp") extern struct urcu_bp_gp rcu_gp_bp;
  * by both the reader and the writers.
  */
 DEFINE_URCU_TLS(struct urcu_bp_reader *, urcu_bp_reader);
-URCU_ATTR_ALIAS("urcu_bp_reader")
-extern struct urcu_bp_reader *rcu_reader_bp;
+DEFINE_URCU_TLS_ALIAS(struct urcu_bp_reader *, urcu_bp_reader, rcu_reader_bp);
 
 static CDS_LIST_HEAD(registry);
 
diff --git a/src/urcu-qsbr.c b/src/urcu-qsbr.c
index 6ff933a..ab20ebe 100644
--- a/src/urcu-qsbr.c
+++ b/src/urcu-qsbr.c
@@ -81,8 +81,7 @@ URCU_ATTR_ALIAS("urcu_qsbr_gp") extern struct urcu_gp rcu_gp_qsbr;
  * writers.
  */
 DEFINE_URCU_TLS(struct urcu_qsbr_reader, urcu_qsbr_reader);
-URCU_ATTR_ALIAS("urcu_qsbr_reader")
-extern struct urcu_qsbr_reader rcu_reader_qsbr;
+DEFINE_URCU_TLS_ALIAS(struct urcu_qsbr_reader, urcu_qsbr_reader, rcu_reader_qsbr);
 
 static CDS_LIST_HEAD(registry);
 
diff --git a/src/urcu-utils.h b/src/urcu-utils.h
index 3c3c7a1..eab6212 100644
--- a/src/urcu-utils.h
+++ b/src/urcu-utils.h
@@ -33,4 +33,18 @@
 #define URCU_ATTR_ALIAS(x) __attribute__((alias(x)))
 #endif
 
+#ifdef CONFIG_RCU_TLS
+#define DEFINE_URCU_TLS_ALIAS_1(type, name, alias)		\
+	URCU_ATTR_ALIAS(#name)					\
+	extern type alias
+
+#else
+#define DEFINE_URCU_TLS_ALIAS_1(type, name, alias)		\
+	URCU_ATTR_ALIAS("*__tls_access_" #name)			\
+	type *__tls_access_ ## alias()
+#endif
+
+#define DEFINE_URCU_TLS_ALIAS(type, name, alias)		\
+	DEFINE_URCU_TLS_ALIAS_1(type, name, alias)
+
 #endif /* _URCU_UTILS_H */
diff --git a/src/urcu.c b/src/urcu.c
index c4e2dde..2cac0b6 100644
--- a/src/urcu.c
+++ b/src/urcu.c
@@ -138,8 +138,7 @@ extern struct urcu_gp alias_rcu_gp;
  * writers.
  */
 DEFINE_URCU_TLS(struct urcu_reader, rcu_reader);
-URCU_ATTR_ALIAS(urcu_stringify(rcu_reader))
-extern struct urcu_reader alias_rcu_reader;
+DEFINE_URCU_TLS_ALIAS(struct urcu_reader, rcu_reader, alias_rcu_reader);
 
 static CDS_LIST_HEAD(registry);
 
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH urcu 3/3] Add missing fall through annotations
       [not found] <20181212200139.19046-1-mjeanson@efficios.com>
  2018-12-12 20:01 ` [PATCH urcu 2/3] Fix: symbol aliases with TLS compat Michael Jeanson
@ 2018-12-12 20:01 ` Michael Jeanson
  2018-12-13  1:51 ` [PATCH urcu 1/3] Port: no symbols aliases on MacOS Mathieu Desnoyers
  2 siblings, 0 replies; 3+ messages in thread
From: Michael Jeanson @ 2018-12-12 20:01 UTC (permalink / raw)
  To: lttng-dev, mathieu.desnoyers

Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
---
 tests/benchmark/test_urcu_hash.h | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/tests/benchmark/test_urcu_hash.h b/tests/benchmark/test_urcu_hash.h
index 023ae1c..5e84aef 100644
--- a/tests/benchmark/test_urcu_hash.h
+++ b/tests/benchmark/test_urcu_hash.h
@@ -249,10 +249,11 @@ uint32_t hash_u32(
 
 	/*----------------------------------- handle the last 3 uint32_t's */
 	switch (length) {	/* all the case statements fall through */
-	case 3: c += k[2];
-	case 2: b += k[1];
+	case 3: c += k[2]; /* fall through */
+	case 2: b += k[1]; /* fall through */
 	case 1: a += k[0];
 		final(a, b, c);
+		/* fall through */
 	case 0:			/* case 0: nothing left to add */
 		break;
 	}
-- 
2.17.1

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH urcu 1/3] Port: no symbols aliases on MacOS
       [not found] <20181212200139.19046-1-mjeanson@efficios.com>
  2018-12-12 20:01 ` [PATCH urcu 2/3] Fix: symbol aliases with TLS compat Michael Jeanson
  2018-12-12 20:01 ` [PATCH urcu 3/3] Add missing fall through annotations Michael Jeanson
@ 2018-12-13  1:51 ` Mathieu Desnoyers
  2 siblings, 0 replies; 3+ messages in thread
From: Mathieu Desnoyers @ 2018-12-13  1:51 UTC (permalink / raw)
  To: Michael Jeanson; +Cc: lttng-dev

All 3 patches merged, thanks!

Mathieu

----- On Dec 12, 2018, at 3:01 PM, Michael Jeanson mjeanson@efficios.com wrote:

> There is no equivalent to symbols aliases on MacOS, this will
> unfortunatly break the ABI for SONAME(6) and will require a rebuild of
> client applications.
> 
> Signed-off-by: Michael Jeanson <mjeanson@efficios.com>
> ---
> include/urcu/flavor.h    |  4 ++++
> src/urcu-bp.c            | 29 +++++++++++++++--------------
> src/urcu-call-rcu-impl.h | 38 +++++++++++++++++++-------------------
> src/urcu-defer-impl.h    | 12 ++++++------
> src/urcu-qsbr.c          | 25 +++++++++++++------------
> src/urcu-utils.h         |  7 +++++++
> src/urcu.c               | 26 +++++++++++++-------------
> 7 files changed, 77 insertions(+), 64 deletions(-)
> 
> diff --git a/include/urcu/flavor.h b/include/urcu/flavor.h
> index d2d19f6..93da38f 100644
> --- a/include/urcu/flavor.h
> +++ b/include/urcu/flavor.h
> @@ -79,9 +79,13 @@ const struct rcu_flavor_struct x = {			\
> }
> 
> #define DEFINE_RCU_FLAVOR_ALIAS(x, y) _DEFINE_RCU_FLAVOR_ALIAS(x, y)
> +#ifdef __APPLE__
> +#define _DEFINE_RCU_FLAVOR_ALIAS(x, y)
> +#else
> #define _DEFINE_RCU_FLAVOR_ALIAS(x, y)			\
> __attribute__((alias(#x)))				\
> extern const struct rcu_flavor_struct y;
> +#endif
> 
> extern const struct rcu_flavor_struct rcu_flavor;
> 
> diff --git a/src/urcu-bp.c b/src/urcu-bp.c
> index 66c877a..0653f9d 100644
> --- a/src/urcu-bp.c
> +++ b/src/urcu-bp.c
> @@ -44,6 +44,7 @@
> #include <urcu/tls-compat.h>
> 
> #include "urcu-die.h"
> +#include "urcu-utils.h"
> 
> #define URCU_API_MAP
> /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
> @@ -143,14 +144,14 @@ static int initialized;
> static pthread_key_t urcu_bp_key;
> 
> struct urcu_bp_gp urcu_bp_gp = { .ctr = URCU_BP_GP_COUNT };
> -__attribute__((alias("urcu_bp_gp"))) extern struct urcu_bp_gp rcu_gp_bp;
> +URCU_ATTR_ALIAS("urcu_bp_gp") extern struct urcu_bp_gp rcu_gp_bp;
> 
> /*
>  * Pointer to registry elements. Written to only by each individual reader. Read
>  * by both the reader and the writers.
>  */
> DEFINE_URCU_TLS(struct urcu_bp_reader *, urcu_bp_reader);
> -__attribute__((alias("urcu_bp_reader")))
> +URCU_ATTR_ALIAS("urcu_bp_reader")
> extern struct urcu_bp_reader *rcu_reader_bp;
> 
> static CDS_LIST_HEAD(registry);
> @@ -345,7 +346,7 @@ out:
> 	ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
> 	assert(!ret);
> }
> -__attribute__((alias("urcu_bp_synchronize_rcu"))) void synchronize_rcu_bp();
> +URCU_ATTR_ALIAS("urcu_bp_synchronize_rcu") void synchronize_rcu_bp();
> 
> /*
>  * library wrappers to be used by non-LGPL compatible source code.
> @@ -355,19 +356,19 @@ void urcu_bp_read_lock(void)
> {
> 	_urcu_bp_read_lock();
> }
> -__attribute__((alias("urcu_bp_read_lock"))) void rcu_read_lock_bp();
> +URCU_ATTR_ALIAS("urcu_bp_read_lock") void rcu_read_lock_bp();
> 
> void urcu_bp_read_unlock(void)
> {
> 	_urcu_bp_read_unlock();
> }
> -__attribute__((alias("urcu_bp_read_unlock"))) void rcu_read_unlock_bp();
> +URCU_ATTR_ALIAS("urcu_bp_read_unlock") void rcu_read_unlock_bp();
> 
> int urcu_bp_read_ongoing(void)
> {
> 	return _urcu_bp_read_ongoing();
> }
> -__attribute__((alias("urcu_bp_read_ongoing"))) int rcu_read_ongoing_bp();
> +URCU_ATTR_ALIAS("urcu_bp_read_ongoing") int rcu_read_ongoing_bp();
> 
> /*
>  * Only grow for now. If empty, allocate a ARENA_INIT_ALLOC sized chunk.
> @@ -563,7 +564,7 @@ end:
> 	if (ret)
> 		abort();
> }
> -__attribute__((alias("urcu_bp_register"))) void rcu_bp_register();
> +URCU_ATTR_ALIAS("urcu_bp_register") void rcu_bp_register();
> 
> /* Disable signals, take mutex, remove from registry */
> static
> @@ -689,7 +690,7 @@ void urcu_bp_before_fork(void)
> 	mutex_lock(&rcu_registry_lock);
> 	saved_fork_signal_mask = oldmask;
> }
> -__attribute__((alias("urcu_bp_before_fork"))) void rcu_bp_before_fork();
> +URCU_ATTR_ALIAS("urcu_bp_before_fork") void rcu_bp_before_fork();
> 
> void urcu_bp_after_fork_parent(void)
> {
> @@ -702,7 +703,7 @@ void urcu_bp_after_fork_parent(void)
> 	ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
> 	assert(!ret);
> }
> -__attribute__((alias("urcu_bp_after_fork_parent")))
> +URCU_ATTR_ALIAS("urcu_bp_after_fork_parent")
> void rcu_bp_after_fork_parent(void);
> 
> /*
> @@ -740,14 +741,14 @@ void urcu_bp_after_fork_child(void)
> 	ret = pthread_sigmask(SIG_SETMASK, &oldmask, NULL);
> 	assert(!ret);
> }
> -__attribute__((alias("urcu_bp_after_fork_child")))
> +URCU_ATTR_ALIAS("urcu_bp_after_fork_child")
> void rcu_bp_after_fork_child(void);
> 
> void *urcu_bp_dereference_sym(void *p)
> {
> 	return _rcu_dereference(p);
> }
> -__attribute__((alias("urcu_bp_dereference_sym")))
> +URCU_ATTR_ALIAS("urcu_bp_dereference_sym")
> void *rcu_dereference_sym_bp();
> 
> void *urcu_bp_set_pointer_sym(void **p, void *v)
> @@ -756,7 +757,7 @@ void *urcu_bp_set_pointer_sym(void **p, void *v)
> 	uatomic_set(p, v);
> 	return v;
> }
> -__attribute__((alias("urcu_bp_set_pointer_sym")))
> +URCU_ATTR_ALIAS("urcu_bp_set_pointer_sym")
> void *rcu_set_pointer_sym_bp();
> 
> void *urcu_bp_xchg_pointer_sym(void **p, void *v)
> @@ -764,7 +765,7 @@ void *urcu_bp_xchg_pointer_sym(void **p, void *v)
> 	cmm_wmb();
> 	return uatomic_xchg(p, v);
> }
> -__attribute__((alias("urcu_bp_xchg_pointer_sym")))
> +URCU_ATTR_ALIAS("urcu_bp_xchg_pointer_sym")
> void *rcu_xchg_pointer_sym_bp();
> 
> void *urcu_bp_cmpxchg_pointer_sym(void **p, void *old, void *_new)
> @@ -772,7 +773,7 @@ void *urcu_bp_cmpxchg_pointer_sym(void **p, void *old, void
> *_new)
> 	cmm_wmb();
> 	return uatomic_cmpxchg(p, old, _new);
> }
> -__attribute__((alias("urcu_bp_cmpxchg_pointer_sym")))
> +URCU_ATTR_ALIAS("urcu_bp_cmpxchg_pointer_sym")
> void *rcu_cmpxchg_pointer_sym_bp();
> 
> DEFINE_RCU_FLAVOR(rcu_flavor);
> diff --git a/src/urcu-call-rcu-impl.h b/src/urcu-call-rcu-impl.h
> index f7844cc..b6ec6ba 100644
> --- a/src/urcu-call-rcu-impl.h
> +++ b/src/urcu-call-rcu-impl.h
> @@ -465,7 +465,7 @@ struct call_rcu_data *get_cpu_call_rcu_data(int cpu)
> 		return NULL;
> 	return rcu_dereference(pcpu_crdp[cpu]);
> }
> -__attribute__((alias(urcu_stringify(get_cpu_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(get_cpu_call_rcu_data))
> struct call_rcu_data *alias_get_cpu_call_rcu_data();
> 
> /*
> @@ -477,7 +477,7 @@ pthread_t get_call_rcu_thread(struct call_rcu_data *crdp)
> {
> 	return crdp->tid;
> }
> -__attribute__((alias(urcu_stringify(get_call_rcu_thread))))
> +URCU_ATTR_ALIAS(urcu_stringify(get_call_rcu_thread))
> pthread_t alias_get_call_rcu_thread();
> 
> /*
> @@ -493,7 +493,7 @@ static struct call_rcu_data *__create_call_rcu_data(unsigned
> long flags,
> 	return crdp;
> }
> 
> -__attribute__((alias(urcu_stringify(create_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(create_call_rcu_data))
> struct call_rcu_data *alias_create_call_rcu_data();
> struct call_rcu_data *create_call_rcu_data(unsigned long flags,
> 					   int cpu_affinity)
> @@ -551,7 +551,7 @@ int set_cpu_call_rcu_data(int cpu, struct call_rcu_data
> *crdp)
> 	call_rcu_unlock(&call_rcu_mutex);
> 	return 0;
> }
> -__attribute__((alias(urcu_stringify(set_cpu_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(set_cpu_call_rcu_data))
> int alias_set_cpu_call_rcu_data();
> 
> /*
> @@ -573,7 +573,7 @@ struct call_rcu_data *get_default_call_rcu_data(void)
> 	call_rcu_unlock(&call_rcu_mutex);
> 	return default_call_rcu_data;
> }
> -__attribute__((alias(urcu_stringify(get_default_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(get_default_call_rcu_data))
> struct call_rcu_data *alias_get_default_call_rcu_data();
> 
> /*
> @@ -602,7 +602,7 @@ struct call_rcu_data *get_call_rcu_data(void)
> 
> 	return get_default_call_rcu_data();
> }
> -__attribute__((alias(urcu_stringify(get_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(get_call_rcu_data))
> struct call_rcu_data *alias_get_call_rcu_data();
> 
> /*
> @@ -613,7 +613,7 @@ struct call_rcu_data *get_thread_call_rcu_data(void)
> {
> 	return URCU_TLS(thread_call_rcu_data);
> }
> -__attribute__((alias(urcu_stringify(get_thread_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(get_thread_call_rcu_data))
> struct call_rcu_data *alias_get_thread_call_rcu_data();
> 
> /*
> @@ -631,7 +631,7 @@ void set_thread_call_rcu_data(struct call_rcu_data *crdp)
> {
> 	URCU_TLS(thread_call_rcu_data) = crdp;
> }
> -__attribute__((alias(urcu_stringify(set_thread_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(set_thread_call_rcu_data))
> void alias_set_thread_call_rcu_data();
> 
> /*
> @@ -684,7 +684,7 @@ int create_all_cpu_call_rcu_data(unsigned long flags)
> 	}
> 	return 0;
> }
> -__attribute__((alias(urcu_stringify(create_all_cpu_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(create_all_cpu_call_rcu_data))
> int alias_create_all_cpu_call_rcu_data();
> 
> /*
> @@ -733,7 +733,7 @@ void call_rcu(struct rcu_head *head,
> 	_call_rcu(head, func, crdp);
> 	_rcu_read_unlock();
> }
> -__attribute__((alias(urcu_stringify(call_rcu)))) void alias_call_rcu();
> +URCU_ATTR_ALIAS(urcu_stringify(call_rcu)) void alias_call_rcu();
> 
> /*
>  * Free up the specified call_rcu_data structure, terminating the
> @@ -789,7 +789,7 @@ void call_rcu_data_free(struct call_rcu_data *crdp)
> 
> 	free(crdp);
> }
> -__attribute__((alias(urcu_stringify(call_rcu_data_free))))
> +URCU_ATTR_ALIAS(urcu_stringify(call_rcu_data_free))
> void alias_call_rcu_data_free();
> 
> /*
> @@ -834,11 +834,11 @@ void free_all_cpu_call_rcu_data(void)
> #ifdef RCU_QSBR
> /* ABI6 has a non-namespaced free_all_cpu_call_rcu_data for qsbr */
> #undef free_all_cpu_call_rcu_data
> -__attribute__((alias("urcu_qsbr_free_all_cpu_call_rcu_data")))
> +URCU_ATTR_ALIAS("urcu_qsbr_free_all_cpu_call_rcu_data")
> void free_all_cpu_call_rcu_data();
> #define free_all_cpu_call_rcu_data urcu_qsbr_free_all_cpu_call_rcu_data
> #else
> -__attribute__((alias(urcu_stringify(free_all_cpu_call_rcu_data))))
> +URCU_ATTR_ALIAS(urcu_stringify(free_all_cpu_call_rcu_data))
> void alias_free_all_cpu_call_rcu_data();
> #endif
> 
> @@ -932,7 +932,7 @@ online:
> 	if (was_online)
> 		rcu_thread_online();
> }
> -__attribute__((alias(urcu_stringify(rcu_barrier))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_barrier))
> void alias_rcu_barrier();
> 
> /*
> @@ -962,7 +962,7 @@ void call_rcu_before_fork(void)
> 			(void) poll(NULL, 0, 1);
> 	}
> }
> -__attribute__((alias(urcu_stringify(call_rcu_before_fork))))
> +URCU_ATTR_ALIAS(urcu_stringify(call_rcu_before_fork))
> void alias_call_rcu_before_fork();
> 
> /*
> @@ -986,7 +986,7 @@ void call_rcu_after_fork_parent(void)
> 		atfork->after_fork_parent(atfork->priv);
> 	call_rcu_unlock(&call_rcu_mutex);
> }
> -__attribute__((alias(urcu_stringify(call_rcu_after_fork_parent))))
> +URCU_ATTR_ALIAS(urcu_stringify(call_rcu_after_fork_parent))
> void alias_call_rcu_after_fork_parent();
> 
> /*
> @@ -1035,7 +1035,7 @@ void call_rcu_after_fork_child(void)
> 		call_rcu_data_free(crdp);
> 	}
> }
> -__attribute__((alias(urcu_stringify(call_rcu_after_fork_child))))
> +URCU_ATTR_ALIAS(urcu_stringify(call_rcu_after_fork_child))
> void alias_call_rcu_after_fork_child();
> 
> void urcu_register_rculfhash_atfork(struct urcu_atfork *atfork)
> @@ -1047,7 +1047,7 @@ void urcu_register_rculfhash_atfork(struct urcu_atfork
> *atfork)
> end:
> 	call_rcu_unlock(&call_rcu_mutex);
> }
> -__attribute__((alias(urcu_stringify(urcu_register_rculfhash_atfork))))
> +URCU_ATTR_ALIAS(urcu_stringify(urcu_register_rculfhash_atfork))
> void alias_urcu_register_rculfhash_atfork();
> 
> void urcu_unregister_rculfhash_atfork(struct urcu_atfork *atfork)
> @@ -1059,5 +1059,5 @@ void urcu_unregister_rculfhash_atfork(struct urcu_atfork
> *atfork)
> end:
> 	call_rcu_unlock(&call_rcu_mutex);
> }
> -__attribute__((alias(urcu_stringify(urcu_unregister_rculfhash_atfork))))
> +URCU_ATTR_ALIAS(urcu_stringify(urcu_unregister_rculfhash_atfork))
> void alias_urcu_unregister_rculfhash_atfork();
> diff --git a/src/urcu-defer-impl.h b/src/urcu-defer-impl.h
> index 58ca1ab..b34a1a1 100644
> --- a/src/urcu-defer-impl.h
> +++ b/src/urcu-defer-impl.h
> @@ -265,7 +265,7 @@ void rcu_defer_barrier_thread(void)
> 	_rcu_defer_barrier_thread();
> 	mutex_unlock(&rcu_defer_mutex);
> }
> -__attribute__((alias(urcu_stringify(rcu_defer_barrier_thread))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_barrier_thread))
> void alias_rcu_defer_barrier_thread();
> 
> /*
> @@ -307,7 +307,7 @@ void rcu_defer_barrier(void)
> end:
> 	mutex_unlock(&rcu_defer_mutex);
> }
> -__attribute__((alias(urcu_stringify(rcu_defer_barrier))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_barrier))
> void alias_rcu_defer_barrier();
> 
> /*
> @@ -401,7 +401,7 @@ void defer_rcu(void (*fct)(void *p), void *p)
> {
> 	_defer_rcu(fct, p);
> }
> -__attribute__((alias(urcu_stringify(defer_rcu)))) void alias_defer_rcu();
> +URCU_ATTR_ALIAS(urcu_stringify(defer_rcu)) void alias_defer_rcu();
> 
> static void start_defer_thread(void)
> {
> @@ -450,7 +450,7 @@ int rcu_defer_register_thread(void)
> 	mutex_unlock(&defer_thread_mutex);
> 	return 0;
> }
> -__attribute__((alias(urcu_stringify(rcu_defer_register_thread))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_register_thread))
> int alias_rcu_defer_register_thread();
> 
> void rcu_defer_unregister_thread(void)
> @@ -470,14 +470,14 @@ void rcu_defer_unregister_thread(void)
> 		stop_defer_thread();
> 	mutex_unlock(&defer_thread_mutex);
> }
> -__attribute__((alias(urcu_stringify(rcu_defer_unregister_thread))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_unregister_thread))
> void alias_rcu_defer_unregister_thread();
> 
> void rcu_defer_exit(void)
> {
> 	assert(cds_list_empty(&registry_defer));
> }
> -__attribute__((alias(urcu_stringify(rcu_defer_exit))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_defer_exit))
> void alias_rcu_defer_exit();
> 
> #endif /* _URCU_DEFER_IMPL_H */
> diff --git a/src/urcu-qsbr.c b/src/urcu-qsbr.c
> index 346748b..6ff933a 100644
> --- a/src/urcu-qsbr.c
> +++ b/src/urcu-qsbr.c
> @@ -43,6 +43,7 @@
> 
> #include "urcu-die.h"
> #include "urcu-wait.h"
> +#include "urcu-utils.h"
> 
> #define URCU_API_MAP
> /* Do not #define _LGPL_SOURCE to ensure we can emit the wrapper symbols */
> @@ -68,7 +69,7 @@ static pthread_mutex_t rcu_gp_lock =
> PTHREAD_MUTEX_INITIALIZER;
>  */
> static pthread_mutex_t rcu_registry_lock = PTHREAD_MUTEX_INITIALIZER;
> struct urcu_gp urcu_qsbr_gp = { .ctr = URCU_QSBR_GP_ONLINE };
> -__attribute__((alias("urcu_qsbr_gp"))) extern struct urcu_gp rcu_gp_qsbr;
> +URCU_ATTR_ALIAS("urcu_qsbr_gp") extern struct urcu_gp rcu_gp_qsbr;
> 
> /*
>  * Active attempts to check for reader Q.S. before calling futex().
> @@ -80,7 +81,7 @@ __attribute__((alias("urcu_qsbr_gp"))) extern struct urcu_gp
> rcu_gp_qsbr;
>  * writers.
>  */
> DEFINE_URCU_TLS(struct urcu_qsbr_reader, urcu_qsbr_reader);
> -__attribute__((alias("urcu_qsbr_reader")))
> +URCU_ATTR_ALIAS("urcu_qsbr_reader")
> extern struct urcu_qsbr_reader rcu_reader_qsbr;
> 
> static CDS_LIST_HEAD(registry);
> @@ -430,7 +431,7 @@ gp_end:
> 		cmm_smp_mb();
> }
> #endif  /* !(CAA_BITS_PER_LONG < 64) */
> -__attribute__((alias("urcu_qsbr_synchronize_rcu")))
> +URCU_ATTR_ALIAS("urcu_qsbr_synchronize_rcu")
> void synchronize_rcu_qsbr();
> 
> /*
> @@ -441,40 +442,40 @@ void urcu_qsbr_read_lock(void)
> {
> 	_urcu_qsbr_read_lock();
> }
> -__attribute__((alias("urcu_qsbr_read_lock"))) void rcu_read_lock_qsbr();
> +URCU_ATTR_ALIAS("urcu_qsbr_read_lock") void rcu_read_lock_qsbr();
> 
> void urcu_qsbr_read_unlock(void)
> {
> 	_urcu_qsbr_read_unlock();
> }
> -__attribute__((alias("urcu_qsbr_read_unlock"))) void rcu_read_unlock_qsbr();
> +URCU_ATTR_ALIAS("urcu_qsbr_read_unlock") void rcu_read_unlock_qsbr();
> 
> int urcu_qsbr_read_ongoing(void)
> {
> 	return _urcu_qsbr_read_ongoing();
> }
> -__attribute__((alias("urcu_qsbr_read_ongoing")))
> +URCU_ATTR_ALIAS("urcu_qsbr_read_ongoing")
> void rcu_read_ongoing_qsbr();
> 
> void urcu_qsbr_quiescent_state(void)
> {
> 	_urcu_qsbr_quiescent_state();
> }
> -__attribute__((alias("urcu_qsbr_quiescent_state")))
> +URCU_ATTR_ALIAS("urcu_qsbr_quiescent_state")
> void rcu_quiescent_state_qsbr();
> 
> void urcu_qsbr_thread_offline(void)
> {
> 	_urcu_qsbr_thread_offline();
> }
> -__attribute__((alias("urcu_qsbr_thread_offline")))
> +URCU_ATTR_ALIAS("urcu_qsbr_thread_offline")
> void rcu_thread_offline_qsbr();
> 
> void urcu_qsbr_thread_online(void)
> {
> 	_urcu_qsbr_thread_online();
> }
> -__attribute__((alias("urcu_qsbr_thread_online")))
> +URCU_ATTR_ALIAS("urcu_qsbr_thread_online")
> void rcu_thread_online_qsbr();
> 
> void urcu_qsbr_register_thread(void)
> @@ -489,7 +490,7 @@ void urcu_qsbr_register_thread(void)
> 	mutex_unlock(&rcu_registry_lock);
> 	_urcu_qsbr_thread_online();
> }
> -__attribute__((alias("urcu_qsbr_register_thread")))
> +URCU_ATTR_ALIAS("urcu_qsbr_register_thread")
> void rcu_register_thread_qsbr();
> 
> void urcu_qsbr_unregister_thread(void)
> @@ -505,7 +506,7 @@ void urcu_qsbr_unregister_thread(void)
> 	cds_list_del(&URCU_TLS(urcu_qsbr_reader).node);
> 	mutex_unlock(&rcu_registry_lock);
> }
> -__attribute__((alias("urcu_qsbr_unregister_thread")))
> +URCU_ATTR_ALIAS("urcu_qsbr_unregister_thread")
> void rcu_unregister_thread_qsbr();
> 
> void urcu_qsbr_exit(void)
> @@ -516,7 +517,7 @@ void urcu_qsbr_exit(void)
> 	 * assert(cds_list_empty(&registry));
> 	 */
> }
> -__attribute__((alias("urcu_qsbr_exit"))) void rcu_exit_qsbr();
> +URCU_ATTR_ALIAS("urcu_qsbr_exit") void rcu_exit_qsbr();
> 
> DEFINE_RCU_FLAVOR(rcu_flavor);
> DEFINE_RCU_FLAVOR_ALIAS(rcu_flavor, alias_rcu_flavor);
> diff --git a/src/urcu-utils.h b/src/urcu-utils.h
> index 1d91bc9..3c3c7a1 100644
> --- a/src/urcu-utils.h
> +++ b/src/urcu-utils.h
> @@ -26,4 +26,11 @@
> #define urcu_stringify(a) _urcu_stringify(a)
> #define _urcu_stringify(a) #a
> 
> +/* There is no concept of symbol aliases on MacOS */
> +#ifdef __APPLE__
> +#define URCU_ATTR_ALIAS(x)
> +#else
> +#define URCU_ATTR_ALIAS(x) __attribute__((alias(x)))
> +#endif
> +
> #endif /* _URCU_UTILS_H */
> diff --git a/src/urcu.c b/src/urcu.c
> index c36119a..c4e2dde 100644
> --- a/src/urcu.c
> +++ b/src/urcu.c
> @@ -92,7 +92,7 @@ static int urcu_memb_has_sys_membarrier_private_expedited;
>  * uninitialized variable.
>  */
> int urcu_memb_has_sys_membarrier = 0;
> -__attribute__((alias("urcu_memb_has_sys_membarrier")))
> +URCU_ATTR_ALIAS("urcu_memb_has_sys_membarrier")
> extern int rcu_has_sys_membarrier_memb;
> #endif
> 
> @@ -103,7 +103,7 @@ void __attribute__((constructor)) rcu_init(void);
> void rcu_init(void)
> {
> }
> -__attribute__((alias(urcu_stringify(rcu_init))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_init))
> void alias_rcu_init(void);
> #endif
> 
> @@ -130,7 +130,7 @@ static pthread_mutex_t rcu_gp_lock =
> PTHREAD_MUTEX_INITIALIZER;
>  */
> static pthread_mutex_t rcu_registry_lock = PTHREAD_MUTEX_INITIALIZER;
> struct urcu_gp rcu_gp = { .ctr = URCU_GP_COUNT };
> -__attribute__((alias(urcu_stringify(rcu_gp))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_gp))
> extern struct urcu_gp alias_rcu_gp;
> 
> /*
> @@ -138,7 +138,7 @@ extern struct urcu_gp alias_rcu_gp;
>  * writers.
>  */
> DEFINE_URCU_TLS(struct urcu_reader, rcu_reader);
> -__attribute__((alias(urcu_stringify(rcu_reader))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_reader))
> extern struct urcu_reader alias_rcu_reader;
> 
> static CDS_LIST_HEAD(registry);
> @@ -515,7 +515,7 @@ out:
> 	 */
> 	urcu_wake_all_waiters(&waiters);
> }
> -__attribute__((alias(urcu_stringify(synchronize_rcu))))
> +URCU_ATTR_ALIAS(urcu_stringify(synchronize_rcu))
> void alias_synchronize_rcu();
> 
> /*
> @@ -526,21 +526,21 @@ void rcu_read_lock(void)
> {
> 	_rcu_read_lock();
> }
> -__attribute__((alias(urcu_stringify(rcu_read_lock))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_read_lock))
> void alias_rcu_read_lock();
> 
> void rcu_read_unlock(void)
> {
> 	_rcu_read_unlock();
> }
> -__attribute__((alias(urcu_stringify(rcu_read_unlock))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_read_unlock))
> void alias_rcu_read_unlock();
> 
> int rcu_read_ongoing(void)
> {
> 	return _rcu_read_ongoing();
> }
> -__attribute__((alias(urcu_stringify(rcu_read_ongoing))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_read_ongoing))
> void alias_rcu_read_ongoing();
> 
> void rcu_register_thread(void)
> @@ -556,7 +556,7 @@ void rcu_register_thread(void)
> 	cds_list_add(&URCU_TLS(rcu_reader).node, &registry);
> 	mutex_unlock(&rcu_registry_lock);
> }
> -__attribute__((alias(urcu_stringify(rcu_register_thread))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_register_thread))
> void alias_rcu_register_thread();
> 
> void rcu_unregister_thread(void)
> @@ -567,7 +567,7 @@ void rcu_unregister_thread(void)
> 	cds_list_del(&URCU_TLS(rcu_reader).node);
> 	mutex_unlock(&rcu_registry_lock);
> }
> -__attribute__((alias(urcu_stringify(rcu_unregister_thread))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_unregister_thread))
> void alias_rcu_unregister_thread();
> 
> #ifdef RCU_MEMBARRIER
> @@ -616,7 +616,7 @@ void rcu_init(void)
> 	init_done = 1;
> 	rcu_sys_membarrier_init();
> }
> -__attribute__((alias(urcu_stringify(rcu_init))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_init))
> void alias_rcu_init(void);
> #endif
> 
> @@ -657,7 +657,7 @@ void rcu_init(void)
> 	if (ret)
> 		urcu_die(errno);
> }
> -__attribute__((alias(urcu_stringify(rcu_init))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_init))
> void alias_rcu_init(void);
> 
> void rcu_exit(void)
> @@ -671,7 +671,7 @@ void rcu_exit(void)
> 	 * assert(cds_list_empty(&registry));
> 	 */
> }
> -__attribute__((alias(urcu_stringify(rcu_exit))))
> +URCU_ATTR_ALIAS(urcu_stringify(rcu_exit))
> void alias_rcu_exit(void);
> 
> #endif /* #ifdef RCU_SIGNAL */
> --
> 2.17.1

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-12-13  1:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <20181212200139.19046-1-mjeanson@efficios.com>
2018-12-12 20:01 ` [PATCH urcu 2/3] Fix: symbol aliases with TLS compat Michael Jeanson
2018-12-12 20:01 ` [PATCH urcu 3/3] Add missing fall through annotations Michael Jeanson
2018-12-13  1:51 ` [PATCH urcu 1/3] Port: no symbols aliases on MacOS Mathieu Desnoyers

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.