|
From: Paul F. <pj...@wa...> - 2024-08-17 16:39:28
|
On 06-06-24 15:43, Byron Hawkins wrote:
> For the purposes of studying dead-code elimination in LLVM, I'd like to
> generate a simple list of all the functions that are ever called by the
> target program. There's no need for any timing or frequency reports or
> backtraces or any other details. So far, the best solution I can find is
> to filter callgrind output like this:
>
> grep -E "^c?fn" callgrind/output.raw | cut -d " " -f 2- | grep -Ev
> "^0x|^c?fn"
>
> It doesn't seem highly reliable, since I'm just picking out entries by
> sort of guessing, then checking the results with gdb (setting a
> breakpoint on every symbol not encountered by callgrind). All target
> programs are trivial unit tests with rigid, deterministic behavior, but
> it would still be nicer to have a more formally defined approach for
> extracting a precise set of function symbols for which invocation was
> observed during the execution. Thanks in advance for any suggestions.
There are various ways to get the function names. I usually use a train
of commands like
awk '/^fn=.* .*/{print $2}' callgrind.out.3727 | sort | uniq -c | sort -n
(only printing the first field with the fn name from awk so not getting
the full arg list).
A+
Paul
|