Print DBG() message about compiler weak hidden symbol behavior
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 20 May 2016 19:23:06 +0000 (15:23 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Fri, 20 May 2016 19:23:06 +0000 (15:23 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
liblttng-ust/Makefile.am
liblttng-ust/tracepoint-internal.h
liblttng-ust/tracepoint-weak-test.c [new file with mode: 0644]
liblttng-ust/tracepoint.c

index 876e9b5190d525ae722bf21c9f61709d48ba1635..f1801cf59e17f2cedbe9b4a09f65a55e724e9084 100644 (file)
@@ -7,6 +7,7 @@ lib_LTLIBRARIES = liblttng-ust-tracepoint.la liblttng-ust.la
 
 liblttng_ust_tracepoint_la_SOURCES = \
        tracepoint.c \
+       tracepoint-weak-test.c \
        tracepoint-internal.h \
        lttng-tracer-core.h \
        jhash.h \
index 2f18355dd438583eec7cecc50801cc66b7932974..3cc95e566b909fe3b705390af0c14d16018ca4c3 100644 (file)
@@ -51,4 +51,6 @@ static inline void tracepoint_synchronize_unregister(void)
 extern void init_tracepoint(void);
 extern void exit_tracepoint(void);
 
+void *lttng_ust_tp_check_weak_hidden(void);
+
 #endif /* _LTTNG_TRACEPOINT_INTERNAL_H */
diff --git a/liblttng-ust/tracepoint-weak-test.c b/liblttng-ust/tracepoint-weak-test.c
new file mode 100644 (file)
index 0000000..e691fbb
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+ * Copyright (C) 2016 Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation;
+ * version 2.1 of the License.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
+/* Test compiler support for weak symbols with hidden visibility. */
+char __tracepoint_test_symbol[9] __attribute__((weak, visibility("hidden")));
+
+__attribute__((visibility("hidden")))
+void *lttng_ust_tp_check_weak_hidden(void)
+{
+       return __tracepoint_test_symbol;
+}
index 5fd1126aa42d3b03c5709994aaad61c4ddaa11ae..a594d73ddd7bc6a3c893acd3d645635d23bc6c73 100644 (file)
@@ -43,6 +43,9 @@
 #include "jhash.h"
 #include "error.h"
 
+/* Test compiler support for weak symbols with hidden visibility. */
+char __tracepoint_test_symbol[9] __attribute__((weak, visibility("hidden")));
+
 /* Set to 1 to enable tracepoint debug output */
 static const int tracepoint_debug;
 static int initialized;
@@ -803,11 +806,26 @@ int tracepoint_unregister_lib(struct lttng_ust_tracepoint * const *tracepoints_s
        return 0;
 }
 
+/*
+ * Report in debug message whether the compiler correctly supports weak
+ * hidden symbols. This test checks that the address associated with two
+ * weak symbols with hidden visibility is the same when declared within
+ * two compile units part of the same module.
+ */
+static void check_weak_hidden(void)
+{
+       DBG("Your compiler support for weak symbols with hidden visibility is %s",
+               __tracepoint_test_symbol == lttng_ust_tp_check_weak_hidden() ?
+                       "OK" :
+                       "BROKEN. Please upgrade or fix your compiler to use LTTng-UST tracepoints.");
+}
+
 void init_tracepoint(void)
 {
        if (uatomic_xchg(&initialized, 1) == 1)
                return;
        init_usterr();
+       check_weak_hidden();
 }
 
 void exit_tracepoint(void)
This page took 0.027464 seconds and 4 git commands to generate.