1. 27 Jan, 2018 1 commit
  2. 22 Jan, 2018 2 commits
  3. 20 Jan, 2018 4 commits
  4. 19 Jan, 2018 7 commits
  5. 18 Jan, 2018 6 commits
  6. 17 Jan, 2018 4 commits
  7. 16 Jan, 2018 3 commits
    • Yonghong Song's avatar
      fix a trace_pipe output issue · 7a46dfe2
      Yonghong Song authored
      For trace_pipe output, the /sys/kernel/debug/tracing/trace_pipe
      output format looks like below for kernel 4.12 and earlier:
      ```
       <COMM>-<PID> [CPU] FLAGS TIMESTAMP: [SYMBOL]: USER_MESSAGES
      ```
      where if an internal address is not able to be resolved to
      a kernel symbol, `SYMBOL` will not be printed out at all.
      
      kernel 4.13 and later will have format like:
      ```
       <COMM>-<PID> [CPU] FLAGS TIMESTAMP: [SYMBOL_OR_ADDR]: USER_MESSAGES
      ```
      Basically, if an address is not able to resolved into a
      kernel symbol, the address itself will be printed out.
      The change was introduced by below commit:
      ```
      commit feaf1283d11794b9d518fcfd54b6bf8bee1f0b4b
      Author: Steven Rostedt (VMware) <rostedt@goodmis.org>
      Date:   Thu Jun 22 17:04:55 2017 -0400
      
          tracing: Show address when function names are not found
      
          Currently, when a function is not found in kallsyms, instead of simply
          showing the function address, it shows nothing at all:
      
           # echo ':mod:kvm_intel' > /sys/kernel/tracing/set_ftrace_filter
           # echo function > /sys/kernel/tracing/set_ftrace_filter
           # qemu -enable-kvm /home/my-qemu-image
             <Ctrl-C>
           # rmmod kvm_intel
           # cat /sys/kernel/tracing/trace
           qemu-system-x86-2408  [001] d..2   135.013238:  <-kvm_arch_hardware_enable
           qemu-system-x86-2408  [001] ....   135.014574:  <-kvm_arch_vm_ioctl
           qemu-system-x86-2408  [001] ....   135.015420:  <-kvm_vm_ioctl_check_extension
           qemu-system-x86-2408  [001] ....   135.045411:  <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ....   135.045412:  <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ....   135.045412:  <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ....   135.045412:  <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ...1   135.045413:  <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ....   135.045413:  <-__do_cpuid_ent
      
          When it should show:
      
           qemu-system-x86-2408  [001] d..2   135.013238: 0xffffffffa02a39f0 <-kvm_arch_hardware_enable
           qemu-system-x86-2408  [001] ....   135.014574: 0xffffffffa02a2ba0 <-kvm_arch_vm_ioctl
           qemu-system-x86-2408  [001] ....   135.015420: 0xffffffffa029e4e0 <-kvm_vm_ioctl_check_extension
           qemu-system-x86-2408  [001] ....   135.045411: 0xffffffffa02a1380 <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ....   135.045412: 0xffffffffa029e160 <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ....   135.045412: 0xffffffffa029e180 <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ....   135.045412: 0xffffffffa029e520 <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ...1   135.045413: 0xffffffffa02a13b0 <-__do_cpuid_ent
           qemu-system-x86-2408  [001] ....   135.045413: 0xffffffffa02a1380 <-__do_cpuid_ent
      
          instead.
      ```
      
      This patch fixed the issue by parsing the trace_pipe output considering the
      `SYMBOL_OR_ADDRESS` field may or may not be empty.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      7a46dfe2
    • Nathan Scott's avatar
      f5fb9af6
    • Nathan Scott's avatar
      start adding -e/--ebpf option to the python tools/ scripts · ca4ba557
      Nathan Scott authored
      Several python tools allow their eBPF code to be printed to
      stdout for debugging.  There are other projects that would
      like to share these program definitions however, instead of
      duplicating code.  Formalise an -e/--ebpf option, and start
      using it in several tools (more to come).
      Signed-off-by: default avatarNathan Scott <nathans@redhat.com>
      ca4ba557
  8. 15 Jan, 2018 1 commit
  9. 13 Jan, 2018 1 commit
  10. 12 Jan, 2018 5 commits
    • 4ast's avatar
      Merge pull request #1524 from iovisor/yhs_dev · 19c84593
      4ast authored
      usdt: better handling for probes existing in multiple binary files
      19c84593
    • yonghong-song's avatar
      Merge pull request #1526 from luciang/master · 0c405db0
      yonghong-song authored
      tools: syscount: add --errno=EPERM filter
      0c405db0
    • Yonghong Song's avatar
    • Yonghong Song's avatar
      usdt: permit to enable probes from a pid and a particular binary · fead16ad
      Yonghong Song authored
      Currently, for usdt, the commands where both a pid and a binary path
      are specified are not well supported. For example,
      ```
      funccount -p <pid> 'u:<binary_path>:probe'
      ```
      will count `probe` occurances for all binary paths in `pid`, not just
      `<binary_path>`. The command
      ```
      argdist -p <pid> 'u:<binary_path>:probe():s64:arg1'
      ```
      will also count `probe` occurances for all binary paths in `pid`
      with my previous patch.
      
      Furthermore, suppose user want to trace linker `setjmp` probe point
      with command
      ```
      trace.py -p <pid> 'u:/usr/lib64/ld-2.17.so:setjmp'
      ```
      Without my previous patch, user will have incorrect results as both
      `libc:setjmp` and `rtld:setjmp` exists and the bcc just picks the first
      one which is `libc:setjmp`. My last patch will cause `enable_probe`
      failures if in the same usdt context, two probes have the same
      probe_name but different provider name.
      
      To fix all these issues, this patch passes additional binary path
      to the pid-based usdt context, so that only probes from that particular
      binary will be added to the context. This solved all the above
      mentioned issues.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      fead16ad
    • Yonghong Song's avatar
      usdt: permit each probe to have locations from more than one binary path · 24894573
      Yonghong Song authored
      Fixing issue #1515.
      
      Currently, each usdt probe (provider, probe_name) can only
      have locations from the single binary. It is possible that
      USDT probes are defined in a header file which eventually causes
      the same usdt probe having locations in several different
      binary/shared_objects. In such cases, we are not able to attach
      the same bpf program to all these locations.
      
      This patch addresses this issue by defining each location to
      be `bin_path + addr_offset` vs. previous `addr_offset` only.
      This way, each internal Probe class can represent all locations
      for the same (provider, probe_name) pair.
      
      The `tplist.py` output is re-organized with the (provider, probe_name)
      in the top level like below:
      ```
      ...
      rtld:lll_futex_wake [sema 0x0]
        location #1 /usr/lib64/ld-2.17.so 0xaac8
          argument #1 8 unsigned bytes @ di
          argument #2 4 signed   bytes @ 1
          argument #3 4 signed   bytes @ 0
        location #2 /usr/lib64/ld-2.17.so 0xe9b9
          argument #1 8 unsigned bytes @ di
          argument #2 4 signed   bytes @ 1
          argument #3 4 signed   bytes @ 0
        location #3 /usr/lib64/ld-2.17.so 0xef3b
          argument #1 8 unsigned bytes @ di
          argument #2 4 signed   bytes @ 1
          argument #3 4 signed   bytes @ 0
      ...
      ```
      
      Tested with the following commands
      ```
        tplist.py
        trace.py -p <pid> 'u::probe "arg1 = %d", arg1'
        trace.py u:<binary_path>:probe "arg1 = %d", arg1'
        argdist.py -p <pid> 'u::probe():s64:arg1'
        argdist.py -C 'u:<binary_path>:probe():s64:arg1'
        funccount.py -p <pid> 'u:<binary_path>:probe'
        funccount.py 'u:<binary_path>:probe'
      ```
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      24894573
  11. 11 Jan, 2018 2 commits
    • Lucian Adrian Grijincu's avatar
      tools: syscount: add --errno=EPERM filter · 5426ef24
      Lucian Adrian Grijincu authored
      Similar to `--filter` which reports all failing syscalls,
      `--errno=ENOENT` reports syscalls failing with the specified errno value.
      
      ```
      $ sudo bcc/tools/syscount.py -e ENOENT
      Tracing syscalls, printing top 10... Ctrl+C to quit.
      ^C[12:07:13]
      SYSCALL                   COUNT
      open                        330
      stat                        240
      access                       63
      execve                       22
      readlink                      3
      ```
      5426ef24
    • Yonghong Song's avatar
      usdt: ignore location with incorrect probe virtual address · bf2a8111
      Yonghong Song authored
      The patch fixed issue #1528. The linker ld.gold may generate
      a probe with invalid virtual address if the section which the probe
      relocates against is discarded.
      
      Instead of failing, a simple checking is added such that
      if the probe virtual address is less than the address of the first
      instruction, print out a warning and ignore this probe.
      Signed-off-by: default avatarYonghong Song <yhs@fb.com>
      bf2a8111
  12. 10 Jan, 2018 4 commits