Re: [lttng-dev] Using lttng-ust 2.13.6 from Yocto Kirkstone and getting weird segfault saying strlen_asimd.S can't be found.
Kienan Stewart via lttng-dev <[email protected]> Tue, 30 Jul 2024 11:58:37 -0400
| Newsgroups | org.lttng.lists.lttng-dev |
|---|---|
| Message-ID | <[email protected]> |
Hi Brian, On 7/30/24 11:54 AM, Brian Hutchinson wrote: > Hi Kienan, > > I noticed looking thru the 38k line LTTNG_UST_DEBUG session this line: > > " 810: /usr/lib/liblttng-ust.so.1: error: symbol lookup > error: undefined symbol: ltt_probe_register (fatal)" > > ... and it jogged my memory that I did see some abi conflict messages > in lttng-ust "make check" that I don't know if they are "good" or > "bad" but could be related??? > This is how lttng-ust.so.1 checks for lttng-ust.so.0 in the same process. It's normal. C.f. https://github.com/lttng/lttng-ust/blob/5db855839d4526cb2b80c45096884b7f6136da9f/src/lib/lttng-ust/lttng-ust-comm.c#L2221 > Anyway, attaching a tar of lttng-ust and lttng-tools "make check" for > your enjoyment. > > Regards, > > Brian > > > > > On Tue, Jul 30, 2024 at 8:40 AM Brian Hutchinson <[email protected]> wrote: >> >> On Mon, Jul 29, 2024 at 3:03 PM Kienan Stewart <[email protected]> wrote: >>> >>> Hi Brian, >>> >>> On 7/25/24 3:54 PM, Brian Hutchinson wrote: >>>> Hi Kienan, >>>> >>>> I'll answer your questions below, but I've got questions on what I saw >>>> building and installing lttng-tools (2.13.13) and lttng-ust (2.13.8). >>>> >>>> Based on the struggles I've had trying to get lttng to work with my >>>> app over various Yocto versions (Dunfell & Kirkstone) and lttng >>>> version, I think the problems I'm facing are mostly around C++ and >>>> weak and hidden symbols in Yocto toolchain. >>>> >>>> When I started my app with the options you mentioned previously a >>>> while back, Id see things like: >>>> >>>> # LTTNG_UST_DEBUG=1 LTTNG_UST_REGISTER_TIMEOUT=-1 /opt/tc/TrafficController >>>> liblttng_ust_tracepoint[4012/4012]: Your compiler treats weak symbols >>>> with hidden visibility for integer objects as SAME address between >>>> compile units part of the same module. (in check_weak_hidden() at >>>> tracepoint.c:1012) >>>> liblttng_ust_tracepoint[4012/4012]: Your compiler treats weak symbols >>>> with hidden visibility for pointer objects as SAME address between >>>> compile units part of the same module. (in check_weak_hidden() at >>>> tracepoint.c:1016) >>>> liblttng_ust_tracepoint[4012/4012]: Your compiler treats weak symbols >>>> with hidden visibility for 24-byte structure objects as SAME address >>>> between compile units part of the same module. (in check_weak_hidden() >>>> at tracepoint.c:1020) >>>> >>> >>> These messages are extra information for debugging and not indicative of >>> a problem in of itself. C.f. >>> https://github.com/lttng/lttng-ust/blob/24f7193c9b918bf714a40e9fc908eeb4978ada1c/src/lib/lttng-ust-tracepoint/tracepoint.c#L1010 >>> >>> There is a unit test related to this: >>> https://github.com/lttng/lttng-ust/blob/24f7193c9b918bf714a40e9fc908eeb4978ada1c/tests/unit/gcc-weak-hidden/main.c#L76 >>> >>> >>>> I further researched this whole 'weak symbol' and 'hidden visibility' >>>> topic in the lttng-dev archives and it smells a lot like what I've >>>> been seeing. You should be able to mix both tracef and tracepoint >>>> calls in souce code ... but I could not. I could get a tracef call to >>>> work but if I put a tracepoint call in the same code then nothing >>>> would work. This was with Dunfell 3.1.7 and earlier versions of >>>> lttng. >>>> >>>> At one point I could get a tracepoint call to work but I'd have to let >>>> our cmake build system build and link the tpp.c file and then turn >>>> around and use gcc to recompile it and copy it to where all the >>>> objects were to create the huge .a library the app was built against. >>>> That's when I first learned there are issues with C++. I think g++ is >>>> used to build even .c files that aren't c++. >>>> >>>> Then if I tried to put a tracepoint in another sub project, none of >>>> the tracepoints would work and I'd get empty traces. This is a >>>> symptom of the 'weak symbols with hidden visibility' issue ... and I >>>> finally found others that were having same issue in the archives. I >>>> don't fully understand the issues here, although I do understand some >>>> of what's going on ... I just don't know what to do about it. >>>> >>> >>> You said initially said that you're using `lttng_ust_tracepoint` exactly >>> as the hello world from the documentation; however, you have just >>> described several attempts at doing different things. Which case are we >>> trying to understand here? >> >> lttng_ust_tracepoint. I only mentioned prior tests for context to >> similar struggles from a year or more ago. >> >> >>> >>>> At this point I was being encouraged to keep upgrading to newer >>>> versions of lttng. Our app never changed, gcc & lttng etc., kept >>>> changing. Now with newer versions nothing runs, all I get is an >>>> immediate segfault. Again, I'm building just like I did before a year >>>> or so ago with older versions of Yocto and lttng. I say all of that >>>> to give perspective and history of what I've seen and experienced. >>>> Now this TLS thing has entered the picture too and so far I've only >>>> changed lttng, I don't know if I should be applying patches to my gcc >>>> for that issue. Like I said, I'm currently using Yocto Kirkstone >>>> 4.0.18 and 6.1.38 kernel. >>>> >>>> Now I'll move into the area of things I've seen building/installing >>>> lttng-tools and lttng-ust natively on the target environment I've >>>> setup where I can run 'make check' etc. These are in the category of >>>> "hey, is this ok, should I be worried about this": >>>> >>>> While building lttng-tools I see things like: >>>> >>>> *** Warning: Linking the executable userspace-probe-elf-binary against >>>> the loadable module >>>> *** libfoo.so is not portable! >>>> >>> >>> The library is for a test program. My understanding is that the library >>> is compiled that way to force a stripped shared object to be produced in >>> order to validate that symbol lookups in libraries with no symtab >>> function as expected by using the dynsym table. >>> >>> C.f. >>> https://github.com/lttng/lttng-tools/commit/ef3dfe5d31c88fb548189a6441aaf8b2afc0bd4b >>> >>>> In file included from ../../../src/common/macros.h:15, >>>> from ../../../include/lttng/health-internal.h:19, >>>> from lttng-ctl-health.c:19: >>>> In function 'lttng_strnlen', >>>> inlined from 'lttng_strncpy' at ../../../src/common/macros.h:128:6, >>>> inlined from 'set_health_socket_path' at lttng-ctl-health.c:146:9, >>>> inlined from 'lttng_health_query' at lttng-ctl-health.c:264:8: >>>> ../../../src/common/compat/string.h:19:16: warning: 'strnlen' >>>> specified bound 4096 may exceed source size 37 [-Wstringop-overread] >>>> 19 | return strnlen(str, max); >>>> | ^~~~~~~~~~~~~~~~~ >>>> lttng-ctl-health.c: At top level: >>>> cc1: note: unrecognized command-line option >>>> '-Wno-incomplete-setjmp-declaration' may have been intended to silence >>>> earlier diagnostics >>> >>> This warning is addressed in >>> https://github.com/lttng/lttng-tools/commit/b25a59916106e5055be516f61f183a48f459b0b3 >>> >>>> ** Warning: Linking the shared library libbar.la against the loadable module >>>> *** libzzz.so is not portable! >>>> >>>> *** Warning: Linking the shared library libfoo.la against the loadable module >>>> *** libbar.so is not portable! >>>> >>>> While installing lttng-tools I see things like this: >>>> >>>> make[4]: Entering directory '/opt/lttng/lttng-tools-2.13.13/src/lib/lttng-ctl' >>>> CC lttng-ctl.lo >>>> CC snapshot.lo >>>> CC lttng-ctl-health.lo >>>> In file included from ../../../src/common/macros.h:15, >>>> from ../../../include/lttng/health-internal.h:19, >>>> from lttng-ctl-health.c:19: >>>> In function 'lttng_strnlen', >>>> inlined from 'lttng_strncpy' at ../../../src/common/macros.h:128:6, >>>> inlined from 'set_health_socket_path' at lttng-ctl-health.c:146:9, >>>> inlined from 'lttng_health_query' at lttng-ctl-health.c:264:8: >>>> ../../../src/common/compat/string.h:19:16: warning: 'strnlen' >>>> specified bound 4096 may exceed source size 37 [-Wstringop-overread] >>>> 19 | return strnlen(str, max); >>>> | ^~~~~~~~~~~~~~~~~ >>>> lttng-ctl-health.c: At top level: >>>> cc1: note: unrecognized command-line option >>>> '-Wno-incomplete-setjmp-declaration' may have been intended to silence >>>> earlier diagnostics >>>> >>>> Making install in trigger-condition-event-matches >>>> make[2]: Entering directory >>>> '/opt/lttng/lttng-tools-2.13.13/doc/examples/trigger-condition-event-matches' >>>> CC instrumented-app.o >>>> CC tracepoint-trigger-example.o >>>> AR libtracepoint-trigger-example.a >>>> ar: `u' modifier ignored since `D' is the default (see `U') >>>> >>>> While building lttng-ust I see things like: >>>> >>>> Making all in utils >>>> make[2]: Entering directory >>>> '/home/iadmin/lttng-ust/lttng-ust-2.13.8/tests/utils' >>>> CC tap.o >>>> AR libtap.a >>>> ar: `u' modifier ignored since `D' is the default (see `U') >>>> >>> >>> While libtool now uses `cr` by default, automake still defines the >>> default to `cru` which is what ends up getting used in the example. >>> Since many distros have changed the configuration of ar such that 'D' is >>> the default rather than the previous behaviour 'U', 'u' is redundant. >>> >>> The behaviour in automake has been changed in automake 1.16.90+. >>> >>> C.f. >>> https://github.com/autotools-mirror/libtool/commit/418129bc63afc312701e84cb8afa5ca413df1ab5 >>> >>> C.f. >>> http://git.savannah.gnu.org/cgit/automake.git/commit/?id=8cdbdda5aec652c356fe6dbba96810202176ae75 >>> >>>> *** Warning: Linking the shared library libzero.la against the >>>> loadable module >>>> *** libfakeust0.so is not portable! >>>> CCLD app_noust_indirect_abi0 >>>> >>>> *** Warning: Linking the executable app_noust_indirect_abi0 against >>>> the loadable module >>>> *** libzero.so is not portable! >>>> CC app_noust_indirect_abi0_abi1-app_noust.o >>>> CC libone.lo >>>> CCLD libone.la >>>> CCLD app_noust_indirect_abi0_abi1 >>>> >>>> *** Warning: Linking the executable app_noust_indirect_abi0_abi1 >>>> against the loadable module >>>> *** libzero.so is not portable! >>>> >>>> *** Warning: Linking the executable app_noust_indirect_abi0_abi1 >>>> against the loadable module >>>> *** libone.so is not portable! >>>> CC app_noust_indirect_abi1-app_noust.o >>>> CCLD app_noust_indirect_abi1 >>>> >>>> *** Warning: Linking the executable app_noust_indirect_abi0_abi1 >>>> against the loadable module >>>> *** libone.so is not portable! >>>> CC app_noust_indirect_abi1-app_noust.o >>>> CCLD app_noust_indirect_abi1 >>>> >>>> *** Warning: Linking the executable app_noust_indirect_abi1 against >>>> the loadable module >>>> *** libone.so is not portable! >>>> CC app_ust.o >>>> CC tp.o >>>> CCLD app_ust >>>> CC app_ust_dlopen.o >>>> CCLD app_ust_dlopen >>>> CC app_ust_indirect_abi0-app_ust.o >>>> CC app_ust_indirect_abi0-tp.o >>>> CCLD app_ust_indirect_abi0 >>>> >>>> *** Warning: Linking the executable app_ust_indirect_abi0 against the >>>> loadable module >>>> *** libzero.so is not portable! >>>> CC app_ust_indirect_abi0_abi1-app_ust.o >>>> CC app_ust_indirect_abi0_abi1-tp.o >>>> CCLD app_ust_indirect_abi0_abi1 >>>> >>>> *** Warning: Linking the executable app_ust_indirect_abi0_abi1 against >>>> the loadable module >>>> *** libzero.so is not portable! >>>> >>>> I don't know if these are ok or if I should be worried about any of that. >>>> >>> >>> These are all for different tests. >>> >>>> ... now on to your questions below. >>>> >>>> >>>> >>>> On Wed, Jul 24, 2024 at 12:04 PM Kienan Stewart <[email protected]> wrote: >>>>> >>>>> Hi Brian, >>>>> >>>>> On 7/22/24 6:00 PM, Brian Hutchinson wrote: >>>>>> Hi Kienan, >>>>>> >>>>>> Took a while to gather your grocery list but I think I have most of it >>>>>> below ;) >>>>> >>>>> thanks for all the extra info. Replies inline below, but I'll cut a lot >>>>> of the long output for readability. >>>>> >>>>> tl;dr the environment continues to be weird, but my present suspicion is >>>>> that something in either compilation, the linking of your app (eg. with >>>>> ld when producing the executable), or some post linking stripping might >>>>> be causing issues. >>>> >>>> I'm not aware of any stripping that's going on. In fact everything is >>>> being built with debug symbols at the moment and I even turned off >>>> optimization ... even used the debug friendly -O flag to see if that >>>> made a difference. >>>> >>>>> >>>>> I will stop digging into further hypotheticals on my side as there is no >>>>> reproducer for both the environment and the application. If you ever end >>>>> up with a minimal reproducer that you can share, I'd be more than happy >>>>> to examine it. >>>> >>>> I'm planning on trying to make a small reproducer I can share but not there yet. >>>> >>> >>> Great! I appreciate that you're taking the time to do so. >>> >>>>> >>>>>> >>>>>> I may have not been clear. Most of the application components are >>>>>> statically linked but I think there are some that are built as shared >>>>>> objects (.so's) so that's what I was referring to. I know that >>>>>> lttng-ust is dynamically linked ... I think the lttng-ust docs say this >>>>>> is only option but also makes reference to the fact static linking was >>>>>> once possible (in some versions of the documentation) but not supported >>>>>> anymore (I probably have the docs memorized by now ha, ha ... I've >>>>>> looked at many, many versions of them). >>>>>> >>>>>> Just for full disclosure my ldd looks like: >>>>>> >>>>>> linux-vdso.so.1 (0x0000ffffab196000) >>>>>> libfcgi.so.0 => /usr/lib/libfcgi.so.0 (0x0000ffffa57f0000) >>>>>> liblttng-ust.so.1 => /usr/lib/liblttng-ust.so.1 >>>>>> (0x0000ffffa5750000) >>>>>> libxml2.so.2 => /usr/lib/libxml2.so.2 (0x0000ffffa55d0000) >>>>>> librt.so.1 => /lib/librt.so.1 (0x0000ffffa55b0000) >>>>>> libm.so.6 => /lib/libm.so.6 (0x0000ffffa5510000) >>>>>> libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x0000ffffa52f0000) >>>>>> libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x0000ffffa52c0000) >>>>>> libc.so.6 => /lib/libc.so.6 (0x0000ffffa5110000) >>>>>> /lib/ld-linux-aarch64.so.1 (0x0000ffffab15d000) >>>>>> liblttng-ust-common.so.1 => >>>>>> /usr/local/lib/liblttng-ust-common.so.1 (0x0000ffffa50e0000) >>>>>> liblttng-ust-tracepoint.so.1 => >>>>>> /usr/local/lib/liblttng-ust-tracepoint.so.1 (0x0000ffffa50a0000) >>>>>> libpthread.so.0 => /lib/libpthread.so.0 (0x0000ffffa5080000) >>>>>> libz.so.1 => /lib/libz.so.1 (0x0000ffffa5050000) >>>>>> >>>>>> >>>>> >>>>> I find it very suspicious that `liblttng-ust.so.1` is in `/usr/lib`, >>>>> while the other lttng-ust libraries are being loaded from `/usr/local/lib`. >>>> >>>> So Yocto puts all of the lttng libs into /usr/lib. When I sent the >>>> previous info I was using lttng-tools and modules built by Yocto/OE >>>> and I setup a native build environment on the target so I could run >>>> 'make check' etc., and that's why there were things in /usr/local/lib >>>> because that's where you guys want stuff to be. So I actually left >>>> the lttng-ust installables in /usr/local/build but also copied them to >>>> /usr/lib to overwrite old Yocto versions there. >>>> >>> >>> It's not so much that it's "where we want it to be". The documentation >>> uses `/usr/local/lib` because `/usr/local` is meant for software >>> installed by the sysadmin administrator, as is the case when building a >>> custom version. `/usr/lib` should be used by packages shipped with the >>> system. >>> >>> C.f. https://refspecs.linuxfoundation.org/FHS_3.0/fhs/ch04s09.html >>> >>> You're free to do as you see fit, but when you start mixing and matching >>> libraries and some are put in /usr/lib by your system packages and some >>> you move there manually I find it more difficult to follow what is going on. >>> >>>>> >>>>> This information also matches the statedump and the LD_DEBUG info from >>>>> later on. >>>>> >>>>> Could you verify some of the following information: >>>>> >>>>> 1. In your build root for lttng-ust, enumerate all the liblttng*so >>>>> files. For each shared object, run `file $libname` and record the value >>>>> of the BuildID hash.R5jow >>>> >>>> Sorry, I'm not following you here. The only buildID hash I can think >>>> of is with 'eu-unstrip -n' but that's on core files, not individual >>>> libs. And looking at the options I have for 'file' on my target, I >>>> don't see anything that looks like what you are asking. >>> >>> Perhaps I wasn't clear, the command to run is really just `file`. As a >>> fuller example: >>> >>> ``` >>> $ file ./src/lib/lttng-ust-fork/.libs/liblttng-ust-fork.so.1.0.0 >>> ./src/lib/lttng-ust-fork/.libs/liblttng-ust-fork.so.1.0.0: ELF 64-bit >>> LSB shared object, x86-64, version 1 (SYSV), dynamically linked, >>> BuildID[sha1]=b2b4a0fc449cf317e32c23e0bb57ea1ad702b702, with debug_info, >>> not stripped >> >> Ok, feel stupid now. When I ran the command before, I used short name >> and didn't do it on the long name and just got back: >> >> # file /usr/lib/liblttng-ust.so >> /usr/lib/liblttng-ust.so: symbolic link to liblttng-ust.so.1.0.0 >> >> ... and immediately looked at man page to try to figure out what >> switch showed BuildID etc., ha, ha. >> >> When I do it on long name here is what I see: >> >> # file /usr/lib/liblttng-ust-common.so.1.0.0 >> /usr/lib/liblttng-ust-common.so.1.0.0: ELF 64-bit LSB shared object, >> ARM aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=a50c9a77163b6b91e1f84e57d167c7b77ae707a3, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-ctl.so.5.0.0 >> /usr/lib/liblttng-ust-ctl.so.5.0.0: ELF 64-bit LSB shared object, ARM >> aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=547cccac08721ed1c9a7f3c7ebf1de84ddba7fba, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-cyg-profile-fast.so.1.0.0 >> /usr/lib/liblttng-ust-cyg-profile-fast.so.1.0.0: ELF 64-bit LSB shared >> object, ARM aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=ad5f71ef5e83ab9a972488976c47db265d3360b9, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-cyg-profile.so.1.0.0 >> /usr/lib/liblttng-ust-cyg-profile.so.1.0.0: ELF 64-bit LSB shared >> object, ARM aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=c2c246c1973bd3241aa4f7229fcbcb27ebe08e82, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-dl.so.1.0.0 >> /usr/lib/liblttng-ust-dl.so.1.0.0: ELF 64-bit LSB shared object, ARM >> aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=6082ee88c9394319bc3adff16b0b3ea9f8d549ec, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-fd.so.1.0.0 >> /usr/lib/liblttng-ust-fd.so.1.0.0: ELF 64-bit LSB shared object, ARM >> aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=a2813245af91abe98615771dfd7d5f19b033a410, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-fork.so.1.0.0 >> /usr/lib/liblttng-ust-fork.so.1.0.0: ELF 64-bit LSB shared object, ARM >> aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=86afa53808502873830c02290f477d4ff8013afb, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-libc-wrapper.so.1.0.0 >> /usr/lib/liblttng-ust-libc-wrapper.so.1.0.0: ELF 64-bit LSB shared >> object, ARM aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=52f391875a378b5f2c46747a58020b86cb7c9a83, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-pthread-wrapper.so.1.0.0 >> /usr/lib/liblttng-ust-pthread-wrapper.so.1.0.0: ELF 64-bit LSB shared >> object, ARM aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=7127223a7e8ed67c6697b95ae1f8ac107df7e47e, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust-tracepoint.so.1.0.0 >> /usr/lib/liblttng-ust-tracepoint.so.1.0.0: ELF 64-bit LSB shared >> object, ARM aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=5971b4d84ec1efe61c6d47c38e92de20569f0f49, with >> debug_info, not stripped >> # file /usr/lib/liblttng-ust.so.1.0.0 >> /usr/lib/liblttng-ust.so.1.0.0: ELF 64-bit LSB shared object, ARM >> aarch64, version 1 (SYSV), dynamically linked, >> BuildID[sha1]=ce7097ae9bbf42a02dccd386fdfbd37e3224858b, with >> debug_info, not stripped >> >> >> cutting some stuff out cause it's getting long again. >> >>> >>> Sounds like `make check` for lttng-tools passed then? >> >> At first no. But I think this is because I built the new lttng-tools >> in my on target native environment and ran make check and forgot to do >> make install first, so it was using the older version of lttng-tools. >> >> So then I ran make install of lttng-tools and even did a make clean >> and rebuild of lttng-ust and re-installed it and ran make check on >> both (and things looked a lot better) ... that's where those warnings >> etc., I asked you about came from. >> >>> >>> My understanding at this point is the unit tests are passing for >>> LTTng-UST on your system, as are the unit and regression tests for >>> LTTng-tools. The example programs shipped with LTTng-UST work on your >>> system, as does the example from the documentation. The statedump >>> tracepoints loaded from LTTng-UST are also working fine, as evinced by >>> the program logs and the LTTng trace you shared. >>> >>> Despite my confusion about how exactly you're using the `hello world` >>> tracepoint in your application (as you've now described several >>> variations), the direction this points to for me are details related to >>> how you're using LTTng-UST and/or how are your building and linking your >>> application. To be clear, I don't mean to say that there is or is not an >>> issue in LTTng-UST, but to point at where to examine next in detail >>> including analysis of the produced object files. >> >> I compared the doc/examples/hello-static-lib to what I picked out of >> the LTTng documentation on the web site "Quick start" section and the >> traceprovider headder file is including stddef.h and mine isn't and >> the doc/examples/hello-static-lib/hello.c code is doing a sighandler >> and mine isn't doing any of that either. I think I've probably posted >> it before but will do it again. Here is what I'm calling my "hello". >> It's from the lttng documentation but I cut it down even further just >> to make sure I didn't fat finger something. Like I said before, the >> full hello example from the documentation works. But when I call >> pretty much the same code from my app it seg faults. >> >> I don't know if the differences I see between my "hello" and the >> "hello-static-lib" matter. >> >> hello-tp.h: >> >> #undef LTTNG_UST_TRACEPOINT_PROVIDER >> #define LTTNG_UST_TRACEPOINT_PROVIDER hello_world >> >> #undef LTTNG_UST_TRACEPOINT_INCLUDE >> #define LTTNG_UST_TRACEPOINT_INCLUDE "./hello-tp.h" >> >> #if !defined(_HELLO_TP_H) || defined(LTTNG_UST_TRACEPOINT_HEADER_MULTI_READ) >> #define _HELLO_TP_H >> >> #include <lttng/tracepoint.h> >> >> LTTNG_UST_TRACEPOINT_EVENT( >> hello_world, >> my_first_tracepoint, >> LTTNG_UST_TP_ARGS( >> int, my_integer_arg >> ), >> LTTNG_UST_TP_FIELDS( >> lttng_ust_field_integer(int, my_integer_field, my_integer_arg) >> ) >> ) >> >> #endif /* _HELLO_TP_H */ >> >> #include <lttng/tracepoint-event.h> >> >> hello-tp.c: >> >> #define LTTNG_UST_TRACEPOINT_CREATE_PROBES >> >> #include "hello-tp.h" >> >> From my_app: >> >> #define LTTNG_UST_TRACEPOINT_DEFINE >> //#define LTTNG_UST_TRACEPOINT_PROBE_DYNAMIC_LINKAGE >> #include "hello-tp.h" >> >> . >> . >> . >> lttng_ust_tracepoint(hello_world, my_first_tracepoint, 23, "hi there!"); >> >> In the above case the tpp is static but I've tried to make it a shared >> object too (thus the commented out DYNAMIC_LINKAGE above) but get the >> same result. >> >> Again, I think the issue is probably g++ and weak/hidden symbol >> related and or TLS but that's based on the totality of what I've >> experienced over the past year or so and seeing the >> experiences/problems of others in the lttng-dev archives. >> >> Regards, >> >> Brian _______________________________________________ lttng-dev mailing list [email protected] https://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev