From: zifeitong@gmail.com (Zifei Tong)
Subject: [lttng-dev] LTTng c++ loglevel not being set
Date: Thu, 25 Jun 2015 13:55:13 +0800 [thread overview]
Message-ID: <CAJ7wx-F5tr_YiJ1z+tyeJP3Kn4Lk+Y9OvFvXSiLsRzchuBMRAg@mail.gmail.com> (raw)
In-Reply-To: <BLU169-W5812986F014E6A9F9F766AABAE0@phx.gbl>
Hi,
I can confirm this issue (w/ lttng master HEAD + gcc 5.1).
In include/lttng/ust-tracepoint-event.h, we have
#define TRACEPOINT_EVENT_INSTANCE(_provider, _template, _name, _args) \
static const int * \
__ref_loglevel___##_provider##___##_name \
__attribute__((weakref ("_loglevel___" #_provider "___" #_name))); \
static const char * \
__ref_model_emf_uri___##_provider##___##_name \
__attribute__((weakref ("_model_emf_uri___" #_provider "___" #_name)));\
I think the weakref attributes used here should use mangled symbol
name when compiling with C++.
A workaround is attached. However, I don't know how to disable symbol
mangling for a static variable, therefore the 'static' attribute is
dropped. I am not sure whether exporting the symbol will cause other
issues.
diff --git a/include/lttng/ust-tracepoint-event.h
b/include/lttng/ust-tracepoint-event.h
index 6632f67..7356451 100644
--- a/include/lttng/ust-tracepoint-event.h
+++ b/include/lttng/ust-tracepoint-event.h
@@ -676,9 +676,14 @@ const char
__tp_event_signature___##_provider##___##_name[] = \
#include <lttng/ust-tracepoint-event-reset.h>
#undef TRACEPOINT_LOGLEVEL
+
+#ifdef __cplusplus
+#define DISABLE_MANGLING extern "C"
+#endif
+
#define TRACEPOINT_LOGLEVEL(__provider, __name, __loglevel) \
static const int _loglevel_value___##__provider##___##__name = __loglevel; \
-static const int *_loglevel___##__provider##___##__name = \
+DISABLE_MANGLING const int *_loglevel___##__provider##___##__name =
\
&_loglevel_value___##__provider##___##__name;
#include TRACEPOINT_INCLUDE
Thanks,
Zifei
On Thu, Jun 25, 2015 at 9:42 AM, Jeffrey Chen <cpthk at hotmail.com> wrote:
>
> I noticed a macro issue with LTTng under C++. The TRACEPOINT_LOGLEVEL would be ignored.
>
> Here are my steps to repro the issue. My .tp file has the TRACEPOINT_LOGLEVEL macro set.
> 1. I generated the hello-tp.c file from the hello-tp.tp file using the lttng-gen-tp tool.
> 2. I renamed the generated .c file into .cpp and compiled with `g++ -c -I. hello-tp.cpp`
> 3. I wrote my c++ code called and call tracepoint macro, saved to hello.cpp, compiled with `g++ -c -I. hello.cpp`
> 4. I compile to an executable with `g++ -o hello hello.o hello-tp.o -llttng-ust -ldl`
> 5. I run the executable, and noticed the loglevel I set in the .tp file is not working. All the traces are still being written as default loglevel TRACE_DEBUG_LINE.
>
> I tried confirming it by using `lttng list --userspace` command and I see "hello_world:my_first_tracepoint (loglevel: TRACE_DEBUG_LINE (13)) (type: tracepoint)"
> You could see the loglevel was not set.
>
> I tried the same steps without renaming to cpp files and build with `gcc` command and it works fine. I also tried without renaming to cpp files but compiled with `g++` command, but it also does not work. It seems to have something to do with c++ name mangling. Anyone noticed this issue? Thanks.
>
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
>
prev parent reply other threads:[~2015-06-25 5:55 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-25 1:42 Jeffrey Chen
2015-06-25 5:55 ` Zifei Tong [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAJ7wx-F5tr_YiJ1z+tyeJP3Kn4Lk+Y9OvFvXSiLsRzchuBMRAg@mail.gmail.com \
--to=zifeitong@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox