2011-09-02 23:34:15 +02:00
|
|
|
Function tracing
|
|
|
|
----------------
|
|
|
|
|
|
|
|
Enable CONFIG_TRACE in debug menu. Run the compiled image on target. You will get
|
|
|
|
a log with a lot of lines like:
|
|
|
|
|
|
|
|
...
|
|
|
|
~0x001072e8(0x00100099)
|
|
|
|
~0x00108bc0(0x0010730a)
|
|
|
|
...
|
|
|
|
|
|
|
|
First address is address of function which was just entered, the second address
|
|
|
|
is address of functions which call that.
|
|
|
|
|
|
|
|
You can use the log2dress to dress the log again:
|
|
|
|
|
|
|
|
...
|
|
|
|
src/arch/x86/lib/c_start.S:85 calls /home/ruik/coreboot/src/boot/selfboot.c:367
|
2012-11-30 21:34:04 +01:00
|
|
|
/home/ruik/coreboot/src/boot/selfboot.c:370 calls /home/ruik/coreboot/src/device/device.c:325
|
2011-09-02 23:34:15 +02:00
|
|
|
...
|
|
|
|
|
|
|
|
Alternatively, you can use genprof to generate a gmon.out file, which can be used
|
|
|
|
by gprof to show the call traces. You will need to install uthash library to compile
|
|
|
|
that.
|
|
|
|
|
|
|
|
Great use is:
|
|
|
|
|
|
|
|
make
|
|
|
|
./genprof /tmp/yourlog ; gprof ../../build/coreboot_ram | ./gprof2dot.py -e0 -n0 | dot -Tpng -o output.png
|
|
|
|
|
|
|
|
Which generates a PNG with a call graph.
|