- 21 Feb, 2017 15 commits
-
-
4ast authored
External debuginfo support and general symbols overhaul
-
Sasha Goldshtein authored
This commit introduces support for tests of the new debuglink and build-id debuginfo resolution functionality. The tests build a dummy.c file with a debuglink section, and again with a build-id section, and make sure that the symbol resolution code can locate the debug information correctly (in the binary's directory for debuglink, and in /usr/lib/debug/.build-id for the build-id).
-
Sasha Goldshtein authored
The implementation of `ProcSyms::resolve_name` was only valid for kernel symbols, when there is no module. When a module was provided, it would segfault due to the module being null. Fixed by making `bcc_symcache_resolve_name` take an additional module parameter, which, for kernel symbols, is simply null (`None` from Python).
-
Sasha Goldshtein authored
Adds support for resolving symbols using external debuginfo files, which can be retrieved from two locations. First, check the build-id of the desired binary and look in /usr/lib/debug/.build-id according to the build-id structure. Second, check the debuglink section of the desired binary and look in /usr/lib/debug or in the binary's current directory. These are the rules applied by GDB as well, but GDB lets the user reconfigure the debug directory path from /usr/lib/debug to something else; we do not support this. These changes are based on the following description of how GDB resolves external debuginfo: https://sourceware.org/gdb/onlinedocs/gdb/Separate-Debug-Files.html
-
Sasha Goldshtein authored
When resolving symbols, ProcSyms would treat position-independent executables (PIE files) incorrectly, resulting in symbol resolution failures. Specifically, PIE files are treated like shared objects for ASLR, which means all symbol addresses in the file need to be taken relative to the executable load address at runtime, the same as with dynamic library shared objects. The fix is in the `is_so()` method on `ProcSyms::Module`, which now uses the correct `bcc_elf_is_shared` helper for testing if a file is a shared object rather than just looking at the extension ".so", which is very brittle -- and wrong.
-
Sasha Goldshtein authored
-
Sasha Goldshtein authored
Remove addresses from stack output, as these are not used in the vast majority of the cases.
-
Sasha Goldshtein authored
-
Sasha Goldshtein authored
-
Sasha Goldshtein authored
-
Sasha Goldshtein authored
The default profile output used to include stack addresses, which are not used in 99+% of the cases.
-
Sasha Goldshtein authored
Remove usyms.py dependency and replace with new symbols API.
-
Sasha Goldshtein authored
The new API has two main methods: `sym` and `ksym` (the second is a trivial wrapper of the first one). Both methods accept two Boolean flags arguments: `show_module` and `show_address`. The first controls whether the resulting symbol name should contain the name of the symbol's module, in brackets. For kernel symbols, this is simply "[kernel]". The second controls whether the resulting symbol name should contain the instruction offset from the beginning of the symbol, e.g. "start_thread+0x202".
-
Sasha Goldshtein authored
This class was obsolete and replaced by the SymbolCache class.
-
4ast authored
Support base + index * scale addressing for USDT arguments
-
- 20 Feb, 2017 4 commits
-
-
4ast authored
trace, argdist: Treat small USDT arguments correctly
-
Sasha Goldshtein authored
trace and argdist currently only work correctly for USDT arguments whose size is exactly 8 bytes. Smaller types, such as chars, shorts, ints (signed or unsigned) are not treated correctly. The reason is that the produced program would invoke the `bpf_usdt_readarg` helper with the address of a u64 local variable, and then cast that variable to the user-specified type derived from the format string. However, the `bpf_usdt_readarg` rewriting then passes `sizeof(u64)` to the generated `bpf_..._readarg` macro, which then fails to read anything because the provided size doesn't match the argument size it knows about. The fix is fairly easy: instead of declaring a u64 unconditionally and reading into that variable with `bpf_usdt_readarg`, declare a variable that has the correct type according to what we know about the USDT probe.
-
4ast authored
Fix file descriptor leak
-
Paul Chaignon authored
-
- 19 Feb, 2017 1 commit
-
-
Sasha Goldshtein authored
It turns out that some software will have USDT probe arguments referencing memory using the full `nnn@(%basereg + %idxreg * scale` syntax. This is represented as `nnn@(%basereg,%idxreg,scale)` in the `NT_STAPSDT` note, encountered in building a recent version of PostgreSQL on FC25. This format is now recognized by the USDT parser, and the correct BPF code is emitted to retrieve arguments that reference memory using this full addressing syntax.`
-
- 16 Feb, 2017 10 commits
-
-
Brenden Blanco authored
llcstat: fix TypeError on python3
-
Brendan Gregg authored
dbslower and dbstat
-
Brendan Gregg authored
-
Brenden Blanco authored
syscount: Summarize syscall counts and latencies
-
Brenden Blanco authored
Adds zlib1g-dev Debian package build dependency
-
Alexandros authored
When building from source in Debian, zlib1g-dev is needed or else '/usr/bin/ld: cannot find -lz' error will occur.
-
Sasha Goldshtein authored
This new tool attaches to the raw_syscalls:sys_enter and sys_exit tracepoints, and collects frequency counts and optionally latencies of syscalls (aggregated by syscall or by process). It is a fairly natural and efficient extension of Brendan Gregg's syscount from perf-tools. Options include latency tracing, interval printouts, process filtering, summarizing only failed syscalls, and more. NOTE: The translation of syscall numbers to names is performed using a static list, borrowed from strace sources. It is accurate up to syscall 313, and does not include the bpf() syscall, for example. Also, it is only relevant for x86_64. Basic example: ``` $ syscount -P Tracing syscalls, printing top 10... Ctrl+C to quit. [10:13:21] PID COMM COUNT 30216 sshd 533 31391 vi 494 25188 screen 134 25776 mysqld 24 31394 python 10 494 systemd-journal 5 ^C $ syscount -L Tracing syscalls, printing top 10... Ctrl+C to quit. [10:13:34] SYSCALL COUNT TIME (us) select 132 1902458.009 nanosleep 166 11136.305 write 89 41.308 ftruncate 1 33.217 stat 1 22.117 fstat 1 6.134 [unknown: 321] 28 4.553 ioctl 7 4.544 wait4 166 3.962 timerfd_settime 1 3.786 ^C ``` Related: #786
-
Sasha Goldshtein authored
-
Sasha Goldshtein authored
This tool traces MySQL/PostgreSQL queries, and aggregates their latencies into a histogram. The histogram is then printed when the tool is stopped, or at user-specified intervals.
-
Sasha Goldshtein authored
This tool traces MySQL/PostgreSQL queries, including an optional minimum duration threshold. This is based on `mysqld_qslower` but adapted to automatically detect MySQL/PostgreSQL processes, and a couple of other code fixes. I believe at this time, `mysqld_qslower` can be retired, as this tool completely supersedes it.
-
- 15 Feb, 2017 4 commits
-
-
Brenden Blanco authored
Revert "undo rebase"
-
Rafael Fonseca authored
This reverts commit a112514c. The changes the commit reverted are legit and should not have been reverted.
-
Brenden Blanco authored
Move monotonic_time to BPF class, use CLOCK_MONOTONIC
-
Rafael Fonseca authored
The bytes object has no __format__ method of its own, inheriting it from object, so an exception is thrown in python3 when it's passed to a formatted string since formatting instructions are type specific. $: ./llcstat Running for 10 seconds or hit Ctrl-C to end. PID NAME CPU REFERENCE MISS HIT% Traceback (most recent call last): File "./llcstat", line 108, in <module> (float(hit) / float(v.value)) * 100.0)) TypeError: non-empty format string passed to object.__format__
-
- 14 Feb, 2017 6 commits
-
-
Brenden Blanco authored
Add pkg-config file to Debian packages.
-
Marcin Ślusarz authored
-
Brenden Blanco authored
filetop: Fix TypeError by not mixing bytes and str.
-
Rafael Fonseca authored
When executing the filetop command tool, the following message was generated: Traceback (most recent call last): File "/usr/share/bcc/tools/filetop", line 190, in <module> name = name[:-3] + "..." TypeError: can't concat bytes to str Also, by decoding the bytes we print the strings without a leading "b'" making the output more readable.
-
Brenden Blanco authored
Add optional kernel flags for running networking examples in INSTALL.md
-
Brenden Blanco authored
-