LTTng unfriendly with mixed static/dynamic linking

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



LTTng requires tracepoints to be linked into a program only once.  If
tracepoints are linked in multiple times, the program crashes at
startup with: "LTTng-UST: Error (-17) while registering tracepoint
probe. Duplicate registration of tracepoint probes having the same
name is not allowed."

This is problematic when mixing static and dynamic linking.  If the
tracepoints are in a static library, that library can end up in an
executable multiple times by being linked in directly, as well as
being statically linked into a dynamic library.  Even if the
tracepoints are not linked directly into the executable, they can be
statically linked into multiple dynamic libraries that the executable
loads.

For us, this problem shows up with libcommon, and could show up with
others such as libosd.  (In general, I think anything added to
noinst_LTLIBRARIES is static, and anything added to lib_LTLIBRARIES is
dynamic.)

There are a few ways of solving the issue:
1. Change every library that has tracepoints, like libcommon, from
static to dynamic.  This could be a big change, as at the very least
we'd have to rename the library to something like libceph_common to
avoid conflicts, since now it would be an installed file.  This has
the advantage of keeping code and its tracepoints in the same library.
2. Keep tracepoints in a separate static library.  For example,
libcommon and libcommon_tp.  Unfortunately, every executable (but not
library!) that links in libcommon (directly or indirectly) would have
to manually link in libcommon_tp, and I don't think Automake could
automate that.
3. Keep tracepoints in a separate dynamic library.  In this case, I
think libcommon could depend on libcommon_tp, so executables would not
have to manually link in libcommon_tp.  (I'm not an Automake expert,
so let me know if I'm wrong on that.)  Again, libcommon_tp would be an
installed file, so we'd want to rename it to something like
libceph_common_tp.

I attached a minimal test case of the problem.

Thoughts or suggestions?

Thanks,
Adam Crume

Attachment: lttng-duplicate-tracepoints.tar.gz
Description: GNU Zip compressed data


[Index of Archives]     [CEPH Users]     [Ceph Large]     [Information on CEPH]     [Linux BTRFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux