[DTrace-devel] [PATCH 0/4] ELF note-based USDT support

Alan Maguire alan.maguire at oracle.com
Wed Jan 29 14:56:56 UTC 2025


apologies - changes that should have been in patch 1 were included in
patch 4; I've fixed this and sent a v2 [1]. Thanks!

Alan

[1]
https://lore.kernel.org/dtrace/20250129145522.512341-1-alan.maguire@oracle.com/

On 29/01/2025 14:43, Alan Maguire wrote:
> This series adds support (patch 1) for ELF-note defined USDT
> probes in binaries and libraries; patches 2-4 add tests.
> 
> Basic pid-specific USDT support is added; i.e. it is necessary
> to specify the target pid in the provider name such as
> "example1234" ; future work could add pid wildcarding.
> 
> ELF note defined probes are defined by including sys/sdt.h
> from the systemtap-sdt-devel package, and are defined in
> C programs via
> 
> DTRACE_PROBEn(provider, probe, [args...])
> 
> See the tests for concrete examples.
> 
> For python, go, etc, USDT probes can be added via libstapsdt [1]
> and associated language-specific bindings.  This allows users
> of those languages to add USDT probes too.  For example, the
> following example program adds a "pythonapp" probe "firstProbe"
> using the python-specific libstapsdt binding:
> 
> #!/usr/bin/python3
> from time import sleep
> import stapsdt
> provider = stapsdt.Provider("pythonapp")
> probe = provider.add_probe(
> "firstProbe", stapsdt.ArgTypes.uint64, stapsdt.ArgTypes.int32)
> provider.load()
> while True:
>     print("Firing probe...")
>     if probe.fire("My little probe", 42):
>         print("Probe fired!")
>     sleep(1)
> 
> We can then trace this via dtrace:
> 
> # dtrace -n 'pythonapp503211:::* { printf("args %s, %d\n", copyinstr(arg0), arg1); }' 
> 
> dtrace: description 'pythonapp503211:::* ' matched 1 probe
> CPU     ID                    FUNCTION:NAME
>   6 286628                      :firstProbe args My little probe, 42
> 
> [1] https://github.com/linux-usdt/libstapsdt
> 
> Alan Maguire (4):
>   USDT: support ELF-note-defined probes
>   selftests/usdt: add test for USDT note-defined probe firing, args
>   selftests/usdt: add test for USDT notes in shared library
>   selftests/usdt: add test covering different forms of USDT note args
> 
>  include/dtrace/pid.h                      |  29 ++
>  libdtrace/dt_cg.c                         |  47 ++
>  libdtrace/dt_cg.h                         |   1 +
>  libdtrace/dt_pid.c                        | 466 ++++++++++++++++++++
>  libdtrace/dt_prov_uprobe.c                |  19 +-
>  test/unittest/usdt/sdt_notes.h            | 504 ++++++++++++++++++++++
>  test/unittest/usdt/tst.usdt-notes-args.r  |   2 +
>  test/unittest/usdt/tst.usdt-notes-args.sh |  51 +++
>  test/unittest/usdt/tst.usdt-notes-lib.r   |  14 +
>  test/unittest/usdt/tst.usdt-notes-lib.sh  | 145 +++++++
>  test/unittest/usdt/tst.usdt-notes.r       |  14 +
>  test/unittest/usdt/tst.usdt-notes.sh      | 121 ++++++
>  12 files changed, 1406 insertions(+), 7 deletions(-)
>  create mode 100644 test/unittest/usdt/sdt_notes.h
>  create mode 100644 test/unittest/usdt/tst.usdt-notes-args.r
>  create mode 100755 test/unittest/usdt/tst.usdt-notes-args.sh
>  create mode 100644 test/unittest/usdt/tst.usdt-notes-lib.r
>  create mode 100755 test/unittest/usdt/tst.usdt-notes-lib.sh
>  create mode 100644 test/unittest/usdt/tst.usdt-notes.r
>  create mode 100755 test/unittest/usdt/tst.usdt-notes.sh
> 




More information about the DTrace-devel mailing list