From: chid1989@gmail.com (Chidhu R)
Subject: [lttng-dev] Printing bit fields with LTTng
Date: Thu, 11 Jun 2015 11:11:02 -0700 [thread overview]
Message-ID: <CAL1ZhOOjJfTPCwcf-oFE1d+7WD0FVMWbCqFrrpkr+LXfcZjRUg@mail.gmail.com> (raw)
In-Reply-To: <CAFXXi0=kTqTy-V843a3v+6qs0SmOPFsP6-2sVZoE6mi8LB0vhA@mail.gmail.com>
Great. Thanks for sharing your inputs. I too learned something new.
On Wed, Jun 10, 2015 at 3:20 PM, Simon Marchi <simon.marchi at polymtl.ca>
wrote:
> On 10 June 2015 at 17:28, Simon Marchi <simon.marchi at polymtl.ca> wrote:
> > On 10 June 2015 at 17:16, Chidhu R <chid1989 at gmail.com> wrote:
> >> Hello,
> >>
> >> I am getting compilation issues while trying to print bit field values
> with
> >> LTTng.
> >>
> >> Error:
> >>
> >> hello.c: In function ?main?:
> >> hello.c:36:1: error: ?typeof? applied to a bit-field
> >> hello.c:36:1: error: ?typeof? applied to a bit-field
> >> hello.c:36:1: error: ?typeof? applied to a bit-field
> >> hello.c:36:1: error: ?sizeof? applied to a bit-field
> >>
> >> Snippet:
> >>
> >> struct abc{
> >> int a:16;
> >> int b:8;
> >> };
> >>
> >> Line 36: tracepoint(hello_world, my_third_tracepoint, aa.a, "welcome");
> >> Line 37: printf("val = %x\n",aa.a);
> >>
> >> tracepoint line results in compilation error.
> >> printf succeeds.
> >>
> >> Tp definition looks like this.
> >>
> >> TRACEPOINT_EVENT(
> >> hello_world,
> >> my_third_tracepoint,
> >> TP_ARGS(
> >> uint32_t, arg,
> >> const char * , my_string_arg
> >> ),
> >> TP_FIELDS(
> >> ctf_integer_hex(uint32_t, my_arg, arg)
> >> ctf_string(field, my_string_arg)
> >> )
> >> )
> >>
> >> How to print bit field values?
> >>
> >> Thanks
> >> Chid
> >
> > I have no idea what the right fix would be, but an easy workaround
> > could be to add 0 to your value:
> >
> > tracepoint(hello_world, my_third_tracepoint, aa.a + 0, "welcome");
> >
> > I just tried it and it works.
> >
> > Simon
>
> Alright, after a bit more investigation (thanks to Philippe Proulx),
> we found that this is caused by the SystemTap integration. If the
> SystemTap integration is enabled, each LTTng tracepoint also defines a
> SystemTap tracepoint.
>
> SystemTap uses sizeof() on the tracepoint's input arguments to find
> their sizes and typeof() to find their signedness. It encodes this
> info into a special section that then allows tools like gdb to re-use
> the tracepoints and get the argument values. For more information,
> look at the definitions of _SDT_ARGSIZE and _SDT_ARGSIGNED in
> /usr/include/sys/sdt.h.
>
> Pragmatically, I think that the "+ 0" trick is good enough, since it
> pleases SystemTap and is otherwise harmless. You could get the same
> result by casting your value to an integer type. However, you would
> need to carefully choose the size and signedness of the type you cast
> to, or it might alter your value. With + 0, it should work with any
> type.
>
> Thanks for raising this, I learned something new today.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lttng.org/pipermail/lttng-dev/attachments/20150611/a9964e3b/attachment.html>
prev parent reply other threads:[~2015-06-11 18:11 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-10 21:16 Chidhu R
2015-06-10 21:28 ` Simon Marchi
2015-06-10 22:20 ` Simon Marchi
2015-06-11 18:11 ` Chidhu R [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=CAL1ZhOOjJfTPCwcf-oFE1d+7WD0FVMWbCqFrrpkr+LXfcZjRUg@mail.gmail.com \
--to=chid1989@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