[lttng-dev] [PATCH lttng-ust 0/2] Shared object base address tracing
Mathieu Desnoyers
mathieu.desnoyers at efficios.com
Wed Nov 13 08:19:15 EST 2013
----- Original Message -----
> From: "Paul Woegerer" <Paul_Woegerer at mentor.com>
> To: "Alexandre Montplaisir" <alexmonthy at voxpopuli.im>, "mathieu desnoyers" <mathieu.desnoyers at efficios.com>, "Matthew
> Khouzam" <matthew.khouzam at ericsson.com>
> Cc: lttng-dev at lists.lttng.org
> Sent: Wednesday, November 13, 2013 5:00:24 AM
> Subject: Re: [lttng-dev] [PATCH lttng-ust 0/2] Shared object base address tracing
>
> On 11/12/2013 08:59 PM, Alexandre Montplaisir wrote:
> > Hi Paul,
> >
> > I tried your patches. It seems to work quite well!
>
> Glad to hear that :)
>
> > - The events are called "ust_baddr:push" and "ust_baddr:pop". To be
> > consistent with the other wrapper libraries in UST, perhaps they should
> > be called "ust_dl:dlopen" and "ust_dl:dlclose" or similar?
>
> I leave this up to Mathieu.
> I don't mind changing the names to whatever makes most sense for LTTng.
Since we're really talking about base addresses here, and that when we have multiple dlopen of the same library, I think it really makes sense to talk of "push/pop" of base address rather than to explicitly tie this to dlopen/dlclose.
>
> > - Why does the "statedump" event seem to give many more libs than the
> > "push" events? Could we be missing some dlopen's? For example, I traced
> > glxgears by preloading liblttng-ust-dl.so: http://pastebin.com/HKVa9a4T
>
> Since ust_baddr:push/pop is based on LD_PRELOAD'ing dlopen/dlclose it
> can only tell you what shared libraries were opened/closed during the
> time you are actually tracing the application. Whatever is
> dlopen'ed/dlclose'ed before the tracing infrastructure that is part of
> the userspace application (lttng-ust) is becoming fully functional
> therefore cannot be captured as ust_baddr:push/pop events.
>
> For that reason we have the statedump mechanism (*) that complements
> shared object tracing by telling us what was happening (in respect to
> shared library loading) *before* we started (or before we were able) to
> trace calls to dlopen/dlclose. Only the two complementary approaches
> combined together give you the full picture of shared library loading.
>
> (*) The statedump mechanism iterates the currently open shared objects
> with dl_iterate_phdr (see: http://linux.die.net/man/3/dl_iterate_phdr).
>
> BTW, I get a slight different result when I trace glxgears (see attached
> glxgears_baddr.txt). I wonder what the reason is.
>
> > - As Matthew suggested, we could also hijack dlsym(), and with its
> > parameters we could match a symbol name to an address. This becomes
> > immensely useful when coupled with the ust-cyg-profile instrumentation,
> > so we can get information about about function names directly in the
> > trace! (but ironically, only for the dlopened libraries, and not the
> > main binary). What do you think of this approach?
>
> IMHO, hijacking dlsym() is not helping. The only thing you would know is
> that somewhere in your code for some reason the address for some symbol
> was requested via dlsym(). This will not help you to get symbol
> resolution for ust-cyg-profile instrumentation.
Agreed. AFAIK, instrumenting dlsym() is useless.
Thanks,
Mathieu
>
> In fact, the solution I present already contains all the information
> needed to provide full symbol resolution for any address during the
> whole lifetime of the traced application. To prove that I have attached
> a dump of our trace viewer that shows all the symbols resolved for a
> small forking web server example (traced with ust-cyg-profile and custom
> tracepoints + ip context enabled) . See attached server_sample.csv and
> server_sample_resolved.csv.
>
> > In any case, it's quite interesting!
>
> Thanks!
>
> --
> Paul
>
> >
> > Cheers,
> > Alexandre
> >
> >
> >
> > On 13-11-11 10:28 AM, Paul Woegerer wrote:
> >> The following two patches implement https://bugs.lttng.org/issues/474
> >>
> >> The first patch provides tracing of dlopen/dlclose calls with the use of
> >> an
> >> LD_PRELOAD library (liblttng-ust-dl.so) using the following events:
> >>
> >> ust_baddr:push(void *baddr, const char*sopath, int64_t size, int64_t
> >> mtime)
> >> ust_baddr:pop(void *baddr)
> >>
> >> The second patch adds support for tracing the whole state of currently
> >> loaded
> >> shared objects at session-enable time. The corresponding events are only
> >> emitted into the session that got enabled. The following event is used:
> >>
> >> ust_baddr_statedump (same args as ust_baddr:push)
> >>
> >>
> >> Paul Woegerer (2):
> >> Base-address tracing for dlopen and dlclose
> >> Implement base-address-state tracing
> >>
> >> Makefile.am | 2 +
> >> configure.ac | 2 +
> >> include/Makefile.am | 1 +
> >> include/lttng/tracepoint.h | 12 +--
> >> include/lttng/ust-dl.h | 54 ++++++++++++
> >> include/lttng/ust-tracepoint-event.h | 14 +++
> >> liblttng-ust-baddr/Makefile.am | 20 +++++
> >> liblttng-ust-baddr/lttng-ust-baddr.c | 111 ++++++++++++++++++++++++
> >> liblttng-ust-baddr/ust_baddr.c | 20 +++++
> >> liblttng-ust-baddr/ust_baddr.h | 66 ++++++++++++++
> >> liblttng-ust-baddr/ust_baddr_statedump.c | 21 +++++
> >> liblttng-ust-baddr/ust_baddr_statedump.h | 60 +++++++++++++
> >> liblttng-ust-dl/Makefile.am | 17 ++++
> >> liblttng-ust-dl/ustdl.c | 144
> >> +++++++++++++++++++++++++++++++
> >> liblttng-ust/lttng-events.c | 10 +++
> >> liblttng-ust/lttng-tracer-core.h | 2 +
> >> liblttng-ust/lttng-ust-comm.c | 52 +++++++++++
> >> 17 files changed, 603 insertions(+), 5 deletions(-)
> >> create mode 100644 include/lttng/ust-dl.h
> >> create mode 100644 liblttng-ust-baddr/Makefile.am
> >> create mode 100644 liblttng-ust-baddr/lttng-ust-baddr.c
> >> create mode 100644 liblttng-ust-baddr/ust_baddr.c
> >> create mode 100644 liblttng-ust-baddr/ust_baddr.h
> >> create mode 100644 liblttng-ust-baddr/ust_baddr_statedump.c
> >> create mode 100644 liblttng-ust-baddr/ust_baddr_statedump.h
> >> create mode 100644 liblttng-ust-dl/Makefile.am
> >> create mode 100644 liblttng-ust-dl/ustdl.c
> >>
>
>
> --
> Paul Woegerer, SW Development Engineer
> Sourcery Analyzer <http://go.mentor.com/sourceryanalyzer>
> Mentor Graphics, Embedded Software Division
>
>
--
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com
More information about the lttng-dev
mailing list