Bug 220930 - DTrace, pid provider: Can't get a trace of a malloc function in google-perftools
Summary: DTrace, pid provider: Can't get a trace of a malloc function in google-perftools
Status: New
Alias: None
Product: Base System
Classification: Unclassified
Component: misc (show other bugs)
Version: 11.0-STABLE
Hardware: Any Any
: --- Affects Only Me
Assignee: freebsd-bugs mailing list
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2017-07-23 01:03 UTC by Yuri Victorovich
Modified: 2017-07-23 10:43 UTC (History)
1 user (show)

See Also:


Attachments
malloc-user-process.d (257 bytes, text/plain)
2017-07-23 01:03 UTC, Yuri Victorovich
no flags Details
start-process-and-wait (120 bytes, text/plain)
2017-07-23 01:04 UTC, Yuri Victorovich
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Yuri Victorovich freebsd_committer 2017-07-23 01:03:08 UTC
Created attachment 184607 [details]
malloc-user-process.d

Here's how to repeat:
1. Install qTox and google perftools: pkg install qTox google-perftools
2. Load dtraceall kernel module: kldload dtraceall.ko
3. Place the attached scripts 'start-process-and-wait' and 'malloc-user-process.d' into some directory and set +x flag on both.
4. As a regular user, start qTox in stopped mode: LD_PRELOAD=/usr/local/lib/libtcmalloc.so  ./start-process-and-wait /usr/local/bin/qtox
5. As root, with the pid printed on step 4, start dtrace: ./malloc-user-process.d {pid} > out.log

In many cases, step 5 prints one of these two error messages and exits:
> dtrace: failed to compile script ./malloc-user-process.d: line 9: Invalid argument
or
> dtrace: failed to compile script ./malloc-user-process.d: line 13: failed to create return probe for 'malloc': Unknown variable name
In both cases the debugged process gets continued.

In rare other cases dtrace continues and eventually deadlocks:
> dtrace: script './malloc-user-process.d' matched 2 probes
- at this point qtox process stays in TX+ state, and dtrace stays in S+ state forever.

All errors are invalid. pidNNN argument should be valid in line 9, and malloc symbol is always present by the virtue of LD_PRELOAD of the library with 'malloc' symbol in it.
dtrace shouldn't deadlock. Ctrl-C on dtrace doesn't stop it. However, 'killall -9 dtrace' does.
Comment 1 Yuri Victorovich freebsd_committer 2017-07-23 01:04:00 UTC
Created attachment 184608 [details]
start-process-and-wait