---
name: "lttng-ust-dl"
section: "3"
platform: "linux"
package: "lttng-ust"
version: "2.16.0-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/lttng-ust-dl"
---

# lttng-ust-dl(3)

Dynamic linker tracing (LTTng-UST helper)

## NAME

lttng-ust-dl - Dynamic linker tracing (LTTng-UST helper)

## SYNOPSIS

Launch your application by preloading **liblttng-ust-dl.so**:

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

## DESCRIPTION

When the **liblttng-ust-dl.so** library is preloaded before a given application starts, it causes all calls to [**dlopen**(3)](/dlopen/3.md) and [**dlclose**(3)](/dlclose/3.md) in said application to be traced with LTTng-UST (see [**lttng-ust**(3)](/lttng-ust/3.md)).

See [**lttng**(1)](/lttng/1.md) to learn more about how to control LTTng tracing sessions.

**Important**\

This LTTng-UST helper can also emit *shared library load/unload* events (see *Shared library load/unload tracking* in [**lttng-ust**(3)](/lttng-ust/3.md)). You should NOT use the event records generated by this LTTng-UST helper (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**, but use the shared library load/unload event records, which are more reliable, for your tracking analysis.

The following LTTng-UST events are available when using this library.

**lttng\_ust\_dl:dlopen**

Emitted when [**dlopen**(3)](/dlopen/3.md) is called.

Fields:

| | |
| --- | --- |
| **Field name** | **Description** |
| **baddr** | Base address of loaded library. |
| **memsz** | Size of loaded library in memory. |
| **flags** | Flags passed to [**dlopen**(3)](/dlopen/3.md). |
| **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)](/dlmopen/3.md) is called.

Fields:

| | |
| --- | --- |
| **Field name** | **Description** |
| **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)](/dlmopen/3.md)). |
| **flags** | Flags passed to [**dlmopen**(3)](/dlmopen/3.md). |
| **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)](/dlclose/3.md) is called.

Fields:

| | |
| --- | --- |
| **Field name** | **Description** |
| **baddr** | Base address of loaded library. |

**lttng\_ust\_dl:debug\_link**

Emitted when debug link information is found when loading a library with [**dlopen**(3)](/dlopen/3.md). See Debugging Information in Separate Files \<https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html\> for more information about debug links.

Fields:

| | |
| --- | --- |
| **Field name** | **Description** |
| **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)](/dlopen/3.md). See Debugging Information in Separate Files \<https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html\> for more information about build IDs.

Fields:

| | |
| --- | --- |
| **Field name** | **Description** |
| **baddr** | Base address of loaded library. |
| **build\_id** | Build ID. |

## BUGS

If you encounter any issue or usability problem, please report it on the LTTng bug tracker \<https://bugs.lttng.org/projects/lttng-ust\>.

## RESOURCES

• LTTng project website \<http://lttng.org\>

• LTTng documentation \<http://lttng.org/docs\>

• Git repositories \<http://git.lttng.org\>

• GitHub organization \<http://github.com/lttng\>

• Continuous integration \<http://ci.lttng.org/\>

• Mailing list \<http://lists.lttng.org\> for support and development: **lttng-dev@lists.lttng.org**

• IRC channel \<irc://irc.oftc.net/lttng\>: **#lttng** on **irc.oftc.net**

## COPYRIGHTS

This library is part of the LTTng-UST project.

This library is 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** \<https://github.com/lttng/lttng-ust/blob/v2.16/COPYING\> file for more details.

## THANKS

Thanks to Ericsson for funding this work, providing real-life use cases, and testing.

Special thanks to Michel Dagenais and the DORSAL laboratory \<http://www.dorsal.polymtl.ca/\> at École Polytechnique de Montréal for the LTTng journey.

## AUTHORS

LTTng-UST was originally written by Mathieu Desnoyers, with additional contributions from various other people. It is currently maintained by Mathieu Desnoyers \<mailto:mathieu.desnoyers@efficios.com\>.

## SEE ALSO

[**lttng-ust**(3)](/lttng-ust/3.md), [**dlopen**(3)](/dlopen/3.md), [**lttng**(1)](/lttng/1.md)
