Until ftrace gains this ability, you could use systemtap:
# cat callret.stp
probe $1.call { printf ("%s <- %s\n", thread_indent(1), probefunc()) }
probe $1.return { printf ("%s -> %s\n", thread_indent(-1), probefunc()) }
# stap callret.stp 'module("usbcore").function("*")'
[...]
^C
#
(One can also add conditions based on function parameters, processes,
whatever; soon it'll be easy to trace all function parameters.)
- FChE
--