Brenden Blanco [Mon, 2 May 2016 04:31:16 +0000 (21:31 -0700)]
Use local key/leaf definition instead of bpf_tunnel_key
Even after fixing the nested union issue in the preceding commits, this
example was failing. The reason was that the kernel was filling in all
bits of the bpf_tunnel_key, which in recent kernels includes non-zero
fields such as ttl. That non-zero field would break the lookup in the
tunkey2if table, which was populated assuming all extra bytes would be
zero.
Fix it by defining a simpler key structure, and copy the required fields
out from the local variable.
Fixes: #510
Brenden Blanco [Mon, 2 May 2016 04:29:08 +0000 (21:29 -0700)]
Add clang support for nested struct/union as key field
Clang was up until now not able to parse nested structs or unions as a
field in the table key or leaf. Add support in the library side, as well
as python support for the exported json description.
Brenden Blanco [Mon, 2 May 2016 04:27:19 +0000 (21:27 -0700)]
Add a test for broken nested union clang parsing
Brenden Blanco [Mon, 2 May 2016 04:26:04 +0000 (21:26 -0700)]
Avoid a warning in bpf_module.cc
The variable inside the if statement was unused, unliked the blocks
above and below it. Use the isa<> check instead.
Brenden Blanco [Mon, 2 May 2016 04:24:29 +0000 (21:24 -0700)]
skip include of kernel bpf.h in test, forward declare instead
4ast [Sat, 30 Apr 2016 23:04:00 +0000 (16:04 -0700)]
Merge pull request #517 from vmg/vmg/clang-diag
cc/clang: Use positional arguments for diagnostic messages
4ast [Sat, 30 Apr 2016 15:11:31 +0000 (08:11 -0700)]
Merge pull request #515 from vmg/vmg/static-lua
Lua tooling improvements
Vicent Marti [Sat, 30 Apr 2016 12:57:52 +0000 (14:57 +0200)]
cc/clang: Use positional arguments for diagnostic messages
Vicent Marti [Sat, 30 Apr 2016 12:35:47 +0000 (14:35 +0200)]
lua: Proper style for main.c
Vicent Marti [Sat, 30 Apr 2016 12:13:26 +0000 (14:13 +0200)]
lua: Do not try to detach buffers as kprobes
Vicent Marti [Sat, 30 Apr 2016 12:00:11 +0000 (14:00 +0200)]
table.py: Call `__delitem__ when deleting an item :)
Vicent Marti [Sat, 30 Apr 2016 11:50:48 +0000 (13:50 +0200)]
lua: Fix regeneration of `bcc.lua`
Vicent Marti [Sat, 30 Apr 2016 11:37:09 +0000 (13:37 +0200)]
bcc-lua: Build as a C executable
Vicent Marti [Sat, 30 Apr 2016 11:22:42 +0000 (13:22 +0200)]
lua: Make all probes executable
Vicent Marti [Sat, 30 Apr 2016 11:14:28 +0000 (13:14 +0200)]
lua: build as a standalone tool with static libbcc
Brendan Gregg [Fri, 29 Apr 2016 17:57:45 +0000 (10:57 -0700)]
Merge pull request #514 from mcaleavya/master
updated opensnoop to use bpf_perf_output
mcaleavya [Fri, 29 Apr 2016 12:38:51 +0000 (13:38 +0100)]
updated opensnoop to use bpf_perf_output
4ast [Thu, 28 Apr 2016 21:14:41 +0000 (14:14 -0700)]
Merge pull request #498 from vmg/vmg/usdt
[WIP] Native implementation for USDT probes
Vicent Marti [Thu, 28 Apr 2016 17:42:55 +0000 (19:42 +0200)]
cc: Finish USDT implementation
Vicent Marti [Thu, 28 Apr 2016 10:24:05 +0000 (12:24 +0200)]
cc: Implement symbol resolution for USDT
Vicent Marti [Thu, 28 Apr 2016 10:22:22 +0000 (12:22 +0200)]
cc: Split bcc_syms.cc into a C++ header file
Vicent Marti [Thu, 28 Apr 2016 10:20:57 +0000 (12:20 +0200)]
cc: Allow callback cancellation on bcc_procutils
Vicent Marti [Thu, 28 Apr 2016 10:19:30 +0000 (12:19 +0200)]
cc: Add missing include
Vicent Marti [Wed, 27 Apr 2016 14:57:58 +0000 (16:57 +0200)]
usdt: Implement probe resolution [WIP]
Vicent Marti [Wed, 27 Apr 2016 10:36:26 +0000 (12:36 +0200)]
usdt: Implement `assign_to_local`
Vicent Marti [Wed, 27 Apr 2016 09:45:10 +0000 (11:45 +0200)]
Add missing license headers
Vicent Marti [Wed, 27 Apr 2016 09:41:54 +0000 (11:41 +0200)]
usdt: Use `optional` to properly handle missing args
Brenden Blanco [Sun, 24 Apr 2016 03:02:45 +0000 (20:02 -0700)]
Move implementation of USDT::Argument into cc file
To avoid exposing the implementation of new/delete of the Argument
class, move it out of the header file. This also requires making private
the std::string members, so that they cannot be assigned to directly.
Let the ArgumentParser assign to them as a friend, and expose const
functions to access them as const only from the client.
Also, convert non-const reference usages to pass-by-pointer.
Vicent Marti [Wed, 20 Apr 2016 23:19:48 +0000 (01:19 +0200)]
cc: Implement USDT argument parsing in C++
Vicent Marti [Wed, 20 Apr 2016 23:18:40 +0000 (01:18 +0200)]
tests: Port the C API suite to C++/Catch
Brenden Blanco [Thu, 28 Apr 2016 13:30:56 +0000 (06:30 -0700)]
Merge pull request #511 from vmg/vmg/find-library
bpf: Wrap `bcc_procutils_which_so` as `BPF.find_library`
Vicent Marti [Thu, 28 Apr 2016 08:26:26 +0000 (10:26 +0200)]
bpf: Wrap `bcc_procutils_which_so` as `BPF.find_library`
This class method was being used outside of the BPF class in the
`tracer` and `usdt` tools.
Brenden Blanco [Wed, 27 Apr 2016 03:26:54 +0000 (20:26 -0700)]
Merge pull request #507 from vmg/vmg/elf-so
Explicitly list the libelf runtime dependency
Vicent Marti [Tue, 26 Apr 2016 14:34:11 +0000 (16:34 +0200)]
packaging: Add `libelf.so` as a runtime dependency
Vicent Marti [Tue, 26 Apr 2016 14:33:55 +0000 (16:33 +0200)]
lua: Only build if LuaJIT is available
4ast [Sat, 23 Apr 2016 15:51:08 +0000 (08:51 -0700)]
Merge pull request #502 from sublimino/patch-1
Add libelf-dev to Ubuntu build deps
Andrew Martin [Sat, 23 Apr 2016 14:10:55 +0000 (15:10 +0100)]
Add libelf-dev to Ubuntu build deps
This was required on a Debian system, but in lieu of instructions for that distribution, and as Debian users will follow Ubuntu, would you consider verifying it on Ubuntu and accepting this PR?
4ast [Wed, 20 Apr 2016 15:11:10 +0000 (08:11 -0700)]
Merge pull request #495 from vmg/vmg/elf-2
[RFC] Remove all dependencies on external binaries
Vicent Marti [Wed, 20 Apr 2016 11:37:55 +0000 (13:37 +0200)]
cc: Clang format
Vicent Marti [Wed, 20 Apr 2016 11:24:55 +0000 (13:24 +0200)]
cc: Add tests for the C API
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cc: Looser heuristic to detect .so modules
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cc: Only try to list ksyms if we're root
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cc: Move `bcc_resolve_symname` to its proper header
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cc: Add missing license headers
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cc: Format C and C++ code according to Google's styleguide
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
deps: Add `libelf` to the build requirements
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
python: Use the native Symbol resolution APIs
The native resolvers are used for the Kernel Symbol resolution in the
`BPF` class, and for the ProcessSymbols class. A lot of redundant code
has been removed.
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
python: Wrap the new native symbol APIs
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
lua: Remove unused files
The `sym` module no longer needs to be exported. The `LD` module is no
longer used anywhere.
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
lua: Use the new native Symbol resolver
The static `BPF.SymbolCache` now uses a native symbol resolver instead
of the Lua/binutils implementation. Likewise for the kernel symbol
resolver, and the `check_path_symbol` API to find a probe's hook
address.
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
lua: Wrap the new native APIs
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cc: Add a native Symbol Resolver cache
This new set of C/C++ APIs is capable of performing symbol resolution
for any given running process, using the native `libelf` APIs instead of
shelling out to binutils tools.
This is a reimplementation of the original ProcSyms Python/Lua code.
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cc: Add a set of process utils written in C/C++
These APIs mimic behavior that was being performed using native tools.
- bcc_procutils_which_so: resolves a short library name into a full path
so a shared object. Equivalent to `ldconfig -p`
- bcc_procutils_which: resolves a short name into a full path to a
binary. Equivalent to a shell's builtin `which`
- bcc_procutils_each_module: lists all the modules loaded in a process'
memory space. Uses the kernel's `/proc/$pid/maps`
- bcc_procutils_each_ksym: lists all symbols and addresses for the
kernel. Uses the kernel's `/proc/kallsyms`
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cc: Add a set of ELF-related APIs based on libelf
The following APIs have been implemented inside `libbcc`, which
programatically replicate the previous usage of `binutils` tools like
`objdump` and `elfdump`.
- bcc_elf_foreach_usdt: finds all USDT probes inside a given binary
- bcc_elf_loadadddr: find the load address for a shared object
- bcc_elf_foreach_sym: lists all symbols in an ELF binary or SO
- bcc_elf_shared_obj: returns whether a given path is an ELF shared
object, a binary, or neither
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cmake: Add dependency to LibELF
Add a new a `FindLibElf.cmake` package, and use it to link the main
`libbcc` library against the system's LibELF. This library will be used
to re-implement functionality that was previously dependent on
`binutils`.
Vicent Marti [Wed, 20 Apr 2016 11:24:54 +0000 (13:24 +0200)]
cmake: Properly use library detection modules
Instead of importing the `Find*.cmake` modules directly, place them in
the root `cmake/` folder and define it as a CMake Module path. This lets
us use the `find_package` builtin to require any given packages.
4ast [Tue, 19 Apr 2016 21:58:58 +0000 (14:58 -0700)]
Merge pull request #496 from iovisor/bblanco_dev
Add infra and ctest for code style formatting
Brenden Blanco [Tue, 19 Apr 2016 21:14:42 +0000 (14:14 -0700)]
Add clang-format file, tweak style-check.sh
Add an initial .clang-format file, based on LLVM's style base. Inform
the style-check wrapper to only consider h, c, and cc files when it
runs, and print out the --verbose output upon failure.
Brenden Blanco [Tue, 19 Apr 2016 18:42:49 +0000 (11:42 -0700)]
Add ctest for style, using clang-format
When user touches a file, that file will be fed to `git clang-format`,
and if the tool reports a new diff it will consider the test failed. The
files to check will be anything in the current workspace compared to
origin/master.
Brenden Blanco [Tue, 19 Apr 2016 18:15:05 +0000 (11:15 -0700)]
Remove git-clang-format output when no files are modified
Brenden Blanco [Tue, 19 Apr 2016 18:13:40 +0000 (11:13 -0700)]
Add git-clang-format to be used for testing source style
4ast [Tue, 19 Apr 2016 01:16:10 +0000 (18:16 -0700)]
Merge pull request #494 from iovisor/install-md
Update INSTALL.md with Xenial instructions
Brenden Blanco [Tue, 19 Apr 2016 01:12:03 +0000 (03:12 +0200)]
Update INSTALL.md with Xenial instructions
The buildbot is now building nightly ubuntu 16.04 packages. Include the steps to install.
4ast [Mon, 18 Apr 2016 19:04:12 +0000 (12:04 -0700)]
Merge pull request #493 from iovisor/bblanco_dev
Let bcc debian build depend on 3.7|3.8
Brenden Blanco [Mon, 18 Apr 2016 18:37:10 +0000 (11:37 -0700)]
Let bcc debian build depend on 3.7|3.8
In Xenial, llvm 3.8 will be available upstream without manual apt steps.
Add those packages as a possible dependency in our build.
Brenden Blanco [Sun, 17 Apr 2016 20:43:27 +0000 (13:43 -0700)]
Merge pull request #489 from aaronpuchert/permissive_regex
Don't require "OS ABI" specification in libraries
4ast [Sun, 17 Apr 2016 15:55:49 +0000 (08:55 -0700)]
Merge pull request #490 from vmg/vmg/lua64
lua: Properly support high-range 64 addresses
Brenden Blanco [Sun, 17 Apr 2016 15:52:52 +0000 (08:52 -0700)]
Merge pull request #487 from bobrik/ubuntu-install
Install all required packages on ubuntu
Aaron Puchert [Sat, 16 Apr 2016 22:06:13 +0000 (00:06 +0200)]
Don't require "OS ABI" specification in libraries
The most important system libraries are listed like this by ldconfig:
libc.so.6 (libc6,x86-64, OS ABI: Linux 3.0.0) => /lib64/libc.so.6
But most user-level libraries don't have the "OS ABI" and will not be
found by the regular expression.
libz.so (libc6,x86-64) => /usr/lib64/libz.so
This makes the regular expression more permissive, so that it finds
those libraries as well.
Vicent Marti [Fri, 15 Apr 2016 23:03:28 +0000 (01:03 +0200)]
lua: Properly support high-range 64 addresses
Lua's native Number type is a 64-bit double with 52-bit precision, which
was causing rounding errors when storing and working with high-range
memory addresses (namely, addresses from the kernel, which are all in
the `0xffffffff........` range).
To work around this, we've made sure to never call `tonumber` on any
variables that represent memory addresses, and instead continue
operating on them with their native types: LuaJIT can work with the
underlying `uint64_t` type for these values and transparently perform
all kinds of numeric operations.
The only limitation of working with native 64-bit types in LuaJIT is
that they cannot be printed with the language's default `string.format`
API. To give better UX to probe writers, these APIs have been
monkeypatched so the `%p` format specifier will now properly handle
64-bit addresses and print them in an appropriate format.
Ivan Babrou [Thu, 14 Apr 2016 13:20:50 +0000 (14:20 +0100)]
Install all required packages on ubuntu
4ast [Mon, 11 Apr 2016 22:31:15 +0000 (15:31 -0700)]
Merge pull request #482 from markdrayton/lua-outside-source-build
bcc-lua: build bcc.lua and bcc.o in the build tree
4ast [Mon, 11 Apr 2016 02:11:08 +0000 (19:11 -0700)]
Merge pull request #483 from iovisor/bblanco_dev
miscellaneous cleanups to C++ and tools/trace
Mark Drayton [Sun, 10 Apr 2016 15:47:28 +0000 (08:47 -0700)]
bcc-lua: build bcc.lua and bcc.o in the build tree
Brenden Blanco [Sun, 10 Apr 2016 01:41:42 +0000 (18:41 -0700)]
Simplify error prints in frontend_action
Brenden Blanco [Fri, 8 Apr 2016 23:01:51 +0000 (16:01 -0700)]
Fix compile error when perf headers are included early
I didn't actually track this one down, but was getting some errors
coming out of kernel header files when perf_events.h was included first.
Move it after some std headers that mask the issue.
Brenden Blanco [Fri, 8 Apr 2016 23:00:03 +0000 (16:00 -0700)]
Use lookup instead of delete in test_stackid
BPF programs aren't allowed to attach to these functions since deadlocks
may occur, thus the test would fail since no stack is collected. Use
update_elem to test instead.
Brenden Blanco [Fri, 8 Apr 2016 22:52:55 +0000 (15:52 -0700)]
Fix python3 exception when ctrl-c tools/trace.py
The way to do exception printing in python2/3 compatible way is using
sys.exc_info()[0/1].
4ast [Sat, 9 Apr 2016 00:44:04 +0000 (17:44 -0700)]
Merge pull request #481 from iovisor/ast_dev
bcc-lua: switch to quiet by default
Alexei Starovoitov [Sat, 9 Apr 2016 00:37:41 +0000 (17:37 -0700)]
bcc-lua: switch to quiet by default
use --verbose to turn verbose output
Signed-off-by: Alexei Starovoitov <ast@fb.com>
Brenden Blanco [Wed, 6 Apr 2016 21:49:22 +0000 (14:49 -0700)]
Merge pull request #480 from larsx2/master
Fixed tcpv4connect.py broken link on README
Eduardo Urias [Wed, 6 Apr 2016 21:18:20 +0000 (17:18 -0400)]
Fixed tcpv4connect.py broken link on README
Brenden Blanco [Wed, 6 Apr 2016 18:58:31 +0000 (11:58 -0700)]
Merge pull request #479 from LucaCanali/master
Fix for find_symbol method, issue #478
Luca Canali [Wed, 6 Apr 2016 17:39:07 +0000 (19:39 +0200)]
Fix for find_symbol method, issue #478
Luca Canali [Wed, 6 Apr 2016 15:35:07 +0000 (17:35 +0200)]
Fix for find_symbol method, issue #478
Brenden Blanco [Wed, 6 Apr 2016 14:06:24 +0000 (07:06 -0700)]
Merge pull request #477 from ragnard/nixos
Add support for nixos
Ragnar Dahlén [Tue, 5 Apr 2016 22:32:02 +0000 (23:32 +0100)]
Introduce BCC_KERNEL_MODULES_DIR
Add support for systems using a non-default ("/lib/modules") kernel lib
directory.
Ragnar Dahlén [Tue, 5 Apr 2016 22:21:45 +0000 (23:21 +0100)]
add missing include directory to calculated cflags
4ast [Tue, 5 Apr 2016 17:06:04 +0000 (10:06 -0700)]
Merge pull request #474 from mcaleavya/master
migrated gethostlatency to use bpf_perf_event
Brenden Blanco [Tue, 5 Apr 2016 05:50:39 +0000 (22:50 -0700)]
Merge pull request #470 from vmg/vmg/lua-standalone
Standalone Lua tracing tool
Vicent Marti [Mon, 4 Apr 2016 18:50:59 +0000 (20:50 +0200)]
debian: Add bcc-lua package to control
Vicent Marti [Mon, 4 Apr 2016 17:21:29 +0000 (19:21 +0200)]
debian: Add install rule for bcc-lua
Vicent Marti [Mon, 4 Apr 2016 17:19:49 +0000 (19:19 +0200)]
SPECS: Add a spec for `bcc-lua`
Vicent Marti [Mon, 4 Apr 2016 16:57:10 +0000 (18:57 +0200)]
bcc-lua: Add Install target
mcaleavya [Sat, 2 Apr 2016 17:22:37 +0000 (18:22 +0100)]
migrated gethostlatency to use bpf_perf_event
Vicent Marti [Fri, 1 Apr 2016 15:40:58 +0000 (17:40 +0200)]
bpf.lua: Enable the `--llvm-debug` CLI flag
Vicent Marti [Fri, 1 Apr 2016 15:38:43 +0000 (17:38 +0200)]
bcc.lua: Print traceback on errors
Vicent Marti [Fri, 1 Apr 2016 15:31:47 +0000 (17:31 +0200)]
bcc: Move all `argv` parsing to Lua code
Vicent Marti [Fri, 1 Apr 2016 15:14:49 +0000 (17:14 +0200)]
bcc: Allow the runner to parse some arguments
Vicent Marti [Thu, 31 Mar 2016 06:22:45 +0000 (08:22 +0200)]
bcc-lua: Add test for standalone `bcc-lua`