[Bug 278489] dtrace; pid probe; unable to match constructor functions

From: <bugzilla-noreply_at_freebsd.org>
Date: Sun, 21 Apr 2024 18:03:00 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=278489

--- Comment #2 from martin <martin@bxlr.sk> ---
Indeed evaltime works in that scenario.

The issue was originally shared on forums here:
https://forums.freebsd.org/threads/tracing-shared-library-functions-using-dtrace.93172/

I tried to simplified is as much as possible before opening PR. I didn't test
it with the evaltime for my simplified version.

Original issue is that these constructors are not matched on custom libraries.
Simple "mylib" demo lib:

#include <stdio.h>
#include "mylib.h"

static int rc;

void __attribute__((constructor)) mysetup(void) {
        printf("*** %s exec\n", __func__);
        rc = 666;
}

void __attribute__((destructor)) leave(void) {
        rc = 0;
}

int hello(char* s) {
        printf("%s: %s\n", __func__, s);
        return rc;
}

Still lists the functions as expected:

# dtrace -ln 'pid$target:mylib.so::entry' -c ./test
*** mysetup exec
hidden stuff
   ID   PROVIDER            MODULE                          FUNCTION NAME
82966    pid1096          mylib.so             __do_global_dtors_aux entry
82967    pid1096          mylib.so                  register_classes entry
82968    pid1096          mylib.so             __do_global_ctors_aux entry
82969    pid1096          mylib.so                           mysetup entry
82970    pid1096          mylib.so                             leave entry
82971    pid1096          mylib.so                             hello entry

But doesn't match it:

# dtrace -n 'pid$target:mylib.so::entry' -c ./test
*** mysetup exec
hidden stuff
dtrace: description 'pid$target:mylib.so::entry' matched 6 probes
hello: my hello program

return value: 666
dtrace: pid 1098 has exited
CPU     ID                    FUNCTION:NAME
  7  82971                      hello:entry
  7  82970                      leave:entry
  7  82966      __do_global_dtors_aux:entry

Specifying evaltime fails to match any probes:

# dtrace -x evaltime=exec -n 'pid$target:mylib.so::entry' -c ./test
dtrace: invalid probe specifier pid$target:mylib.so::entry: probe description
pid1100:mylib.so::entry does not match any probes

-- 
You are receiving this mail because:
You are the assignee for the bug.