Mirror of the lttng-dev mailing list
 help / color / mirror / Atom feed
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
>



      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