LTTNG-UST-DL(3)

πŸŽ€ LTTNG-UST-DL(3) πŸŽ€

okay so you found the LTTNG-UST-DL(3) page, and yes bestie it's from the LTTng Manual β€” but don't stress, this one's actually kind of iconic once you get it. it's the dynamic linker tracing helper, and it's about to make dlopen/dlclose your whole personality πŸ’…


🌸 NAME 🌸

lttng-ust-dl β€” dynamic linker tracing (an LTTng-UST helper, iykyk)


✨ SYNOPSIS ✨

so like, you just preload liblttng-ust-dl.so when you launch your app. that's it. that's the whole move:

$ LD_PRELOAD=liblttng-ust-dl.so my-app

πŸ’– DESCRIPTION πŸ’–

when liblttng-ust-dl.so gets preloaded before a given application even starts, it makes every single call to dlopen(3) and dlclose(3) inside that application get traced with LTTng-UST (peep lttng-ust(3) for the deets).

and if you wanna learn more about how to control LTTng tracing sessions, go look at lttng(1). it's giving documentation, it's giving control panel 🫢

⚠️ Important β€” pls read this one, fr fr this LTTng-UST helper can also emit shared library load/unload events (see "Shared library load/unload tracking" in lttng-ust(3)). you should NOT use the event records generated by this helper (they're prefixed with lttng_ust_dl:) to track the loading and unloading of shared libraries, especially in situations where a dynamically loaded library loads its own dependencies. instead: do preload liblttng-ust-dl.so, yes, but use the shared library load/unload event records β€” those are way more reliable β€” for your tracking analysis. trust. πŸ”₯

πŸ¦‹ the LTTng-UST events you get πŸ¦‹

here's everything available when you use this library. no gatekeeping πŸ’œ

lttng_ust_dl:dlopen

emitted when dlopen(3) is called. main character event honestly.

fields:

  • baddr β€” base address of loaded library.
  • memsz β€” size of loaded library in memory.
  • flags β€” flags passed to dlopen(3).
  • path β€” path to loaded library file.
  • has_build_id β€” whether or not the loaded library has a build ID. if this field is 1, you can expect that an lttng_ust_dl:build_id event record follows this one (not necessarily immediately after).
  • has_debug_link β€” whether or not the loaded library has debug link information. if this field is 1, you can expect that an lttng_ust_dl:debug_link event record follows this one (not necessarily immediately after).

lttng_ust_dl:dlmopen

emitted when dlmopen(3) is called. namespace edition ✨

fields:

  • baddr β€” base address of loaded library.
  • memsz β€” size of loaded library in memory.
  • nsid β€” ID of the namespace in which the library is loaded (as passed to dlmopen(3)).
  • flags β€” flags passed to dlmopen(3).
  • path β€” path to loaded library file.
  • has_build_id β€” whether or not the loaded library has a build ID. if this field is 1, you can expect that an lttng_ust_dl:build_id event record follows this one (not necessarily immediately after).
  • has_debug_link β€” whether or not the loaded library has debug link information. if this field is 1, you can expect that an lttng_ust_dl:debug_link event record follows this one (not necessarily immediately after).

lttng_ust_dl:dlclose

emitted when dlclose(3) is called. the goodbye event 😭

fields:

  • baddr β€” base address of loaded library.

emitted when debug link information is found when loading a library with dlopen(3). if you want the lore, see Debugging Information in Separate Files at https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html β€” it explains debug links way better than I ever could 🧚

fields:

  • baddr β€” base address of loaded library.
  • filename β€” debug link file name.
  • crc β€” debug link file's CRC.

lttng_ust_dl:build_id

emitted when a build ID is found when loading a library with dlopen(3). same deal β€” see Debugging Information in Separate Files at https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html for more about build IDs πŸŽ€

fields:

  • baddr β€” base address of loaded library.
  • build_id β€” build ID.

πŸ’€ BUGS πŸ’€

if you run into any issue or usability problem, pls report it on the LTTng bug tracker: https://bugs.lttng.org/projects/lttng-ust β€” they genuinely wanna know, no cap πŸ™ˆ


🌈 RESOURCES 🌈


πŸ‘‘ COPYRIGHTS πŸ‘‘

this library is part of the LTTng-UST project. 🫢

it's distributed under the GNU Lesser General Public License, version 2.1 β€” http://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html. see the COPYING file at https://github.com/lttng/lttng-ust/blob/v2.16/COPYING for more details.


⭐ THANKS ⭐

thanks to Ericsson for funding this work, providing real-life use cases, and testing β€” absolute legends, periodt πŸ’–

special thanks to Michel Dagenais and the DORSAL laboratory at Γ‰cole Polytechnique de MontrΓ©al (http://www.dorsal.polymtl.ca/) for the LTTng journey 🌸

πŸ’– AUTHORS πŸ’–

Okay bestie, gather round, because this is the origin story and it ate.

LTTng-UST was originally written by Mathieu Desnoyers, with additional contributions from various other people. Iconic behavior, honestly β€” one main character and a whole supporting cast showing up to help. 🫢

It is currently maintained by Mathieu Desnoyers <mathieu.desnoyers@efficios.com>. That's the person to hit up, no cap. πŸ’…


🌈 SEE ALSO 🌈

Go read these next, bestie, they're literally the rest of the lore:

  • lttng-ust(3) β€” the big one, the parent page, the moment ✨
  • dlopen(3) β€” for when you wanna understand the dynamic-loader side of things πŸ¦‹
  • lttng(1) β€” the command-line tool itself, the actual vibe πŸ‘‘
fr fr, if you're still confused after this page, those three will have your back. iykyk πŸ’€

Okay that's the whole page, we made it to the end together, I'm so proud of you πŸ₯ΉπŸ’œ

This beauty is from LTTng 2.16.0, dated 08/27/2026 β€” screenshot it, frame it, put it on your wall, it's giving heirloom. πŸŽ€β­

πŸ“¦ where this page comes from
  • arch rolling: lttng-ust 2.16.0-1 Β· LGPL-2.1-only AND MIT AND GPL-2.0-only AND BSD-3-Clause AND BSD-2-Clause AND GPL-3.0-or-later
  • πŸ’– girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms