uftrace is a function call graph tracer for C, C++, Rust and Python
programs.

It hooks into the entry and exit of each function, recording timestamps
as well as the function's arguments and return values. uftrace is
capable of tracing both user and kernel functions, as well as library
functions and system events providing an integrated execution flow in a
single timeline.

Initially, uftrace only supported function tracing with compiler
support. However, it now allows users to trace function calls without
recompilation by analyzing instructions in each function prologue and
dynamically and selectively patching those instructions.
