[Bug 264444] dtrace ustack() cannot decode stack frames in shared libraries opened with dlopen after the program terminates
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Sat, 04 Jun 2022 03:24:53 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=264444 Bug ID: 264444 Summary: dtrace ustack() cannot decode stack frames in shared libraries opened with dlopen after the program terminates Product: Base System Version: CURRENT Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: kern Assignee: bugs@FreeBSD.org Reporter: asomers@FreeBSD.org dtrace's ustack() function is supposed to unwind a user stack trace. It usually can. But it seems that it cannot decode stack frames from a shared library, if that shared library was loaded with dlopen and the program exits before dtrace does. Steps to Reproduce (admittedly, with difficulty) 1) pkg install rust c-blosc isa-l llvm pkgconf git 2) pkg install fio-3.30 # May not build with other fio versions 3) git clone https://github.com/bfffs/bfffs.git 4) cd bfffs 5) git checkout 6e2c7b16b681d54d239b0f7518e612d5df36d096 6) cargo build -p bfffs-fio 7) truncate -s 1g /tmp/bfffs.img 8) cargo run --bin bfffs -- pool create testpool /tmp/bfffs.img 9) sudo dtrace -x ustackframes=100 -n 'profile-199 /pid == $target && arg1/ {@[ustack()] = count();}' -o fio.stacks -c "fio bfffs-fio/data/ci.fio" 10) Examine fio.stacks. It will contain frames from fio and libc.so, but none from libbfffs.so. Where there should be some, it will instead contain hex numbers, like this: libc.so.7`memcpy+0xb0 0xfcdfdc73c fio`io_u_queued_complete+0x7a fio`wait_for_completions+0x7b fio`do_io+0x678 fio`thread_main+0xbe0 libthr.so.3`0x822130a7a -- You are receiving this mail because: You are the assignee for the bug.