mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-24 03:53:31 +00:00
164 lines
4.8 KiB
ReStructuredText
164 lines
4.8 KiB
ReStructuredText
|
.. SPDX-License-Identifier: GPL-2.0+:
|
||
|
|
||
|
trace command
|
||
|
=============
|
||
|
|
||
|
Synopis
|
||
|
-------
|
||
|
|
||
|
::
|
||
|
|
||
|
trace stats
|
||
|
trace pause
|
||
|
trace resume
|
||
|
trace funclist [<addr> <size>]
|
||
|
trace calls [<addr> <size>]
|
||
|
|
||
|
Description
|
||
|
-----------
|
||
|
|
||
|
The *trace* command is used to control the U-Boot tracing system. It allows
|
||
|
tracing to be paused and resumed, shows statistics for traces and provides a
|
||
|
way to dump out the trace information.
|
||
|
|
||
|
|
||
|
trace stats
|
||
|
~~~~~~~~~~~
|
||
|
|
||
|
This display tracing statistics, as follows:
|
||
|
|
||
|
function sites
|
||
|
Functions are binned as a way of reducing the amount of space needed to
|
||
|
hold all the function information. This is controlled by FUNC_SITE_SIZE in
|
||
|
the trace.h header file. The usual value is 4, which provides the finest
|
||
|
granularity (assuming a minimum instruction size of 4 bytes) which means
|
||
|
that every function can be resolved individually.
|
||
|
|
||
|
function calls
|
||
|
Total number of function calls, including those which were not traced due
|
||
|
to buffer space. This count does not include functions which exceeded the
|
||
|
depth limit.
|
||
|
|
||
|
untracked function calls
|
||
|
Total number of function calls which did not appear in the U-Boot image.
|
||
|
This can happen if a function is called outside the normal code area.
|
||
|
|
||
|
traced function calls
|
||
|
Total number of function calls which were actually traced, i.e. are included
|
||
|
in the recorded trace data.
|
||
|
|
||
|
dropped due to overflow
|
||
|
If the trace buffer was exhausted then this shows the number of records that
|
||
|
were dropped. Try reducing the depth limit or expanding the buffer size.
|
||
|
|
||
|
maximum observed call depth
|
||
|
Maximum observed call depth while tracing.
|
||
|
|
||
|
calls not traced due to depth
|
||
|
Counts the number of function calls that were not recorded because they
|
||
|
exceeded the maximum call depth.
|
||
|
|
||
|
max function calls
|
||
|
Maximum number of function calls which can be recorded in the trace buffer,
|
||
|
given its size. Once `function calls` hits this value, recording stops.
|
||
|
|
||
|
trace buffer
|
||
|
Address of trace buffer
|
||
|
|
||
|
call records
|
||
|
Address of first trace record. This is near the start of the trace buffer,
|
||
|
after the function-call counts.
|
||
|
|
||
|
|
||
|
trace pause
|
||
|
~~~~~~~~~~~
|
||
|
|
||
|
Pauses tracing, so that no more data is added to the trace buffer.
|
||
|
|
||
|
|
||
|
trace resume
|
||
|
~~~~~~~~~~~~
|
||
|
|
||
|
Resumes tracing, so that new function calls are added to the trace buffer if
|
||
|
there is sufficient space.
|
||
|
|
||
|
|
||
|
trace funclist [<addr> <size>]
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
Dumps a list of functions into the provided buffer. The file uses a format
|
||
|
specific to U-Boot: a header, following by the function offset and call count.
|
||
|
|
||
|
If the address and size are not given, these are obtained from
|
||
|
:ref:`develop/trace:environment variables`. In any case the environment
|
||
|
variables are updated after the command runs.
|
||
|
|
||
|
The resulting data should be written out to the host, e.g. using Ethernet or
|
||
|
a filesystem. There are no tools provided to read this sdata.
|
||
|
|
||
|
|
||
|
trace calls [<addr> <size>]
|
||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||
|
|
||
|
Dumps a list of function calls into the provided buffer. The file uses a format
|
||
|
specific to U-Boot: a header, following by the list of calls. The proftool
|
||
|
tool can be used to convert this information ready for further analysis.
|
||
|
|
||
|
|
||
|
Example
|
||
|
-------
|
||
|
|
||
|
::
|
||
|
|
||
|
=> trace stats
|
||
|
269,252 function sites
|
||
|
38,025,059 function calls
|
||
|
3 untracked function calls
|
||
|
7,382,690 traced function calls
|
||
|
17 maximum observed call depth
|
||
|
15 call depth limit
|
||
|
68,667,432 calls not traced due to depth
|
||
|
22,190,112 max function calls
|
||
|
|
||
|
trace buffer 6c000000 call records 6c20de78
|
||
|
=> trace resume
|
||
|
=> trace pause
|
||
|
|
||
|
This shows that resuming the trace causes the buffer to overflow::
|
||
|
|
||
|
=> trace stats
|
||
|
269,252 function sites
|
||
|
49,573,694 function calls
|
||
|
3 untracked function calls
|
||
|
22,190,112 traced function calls (8289848 dropped due to overflow)
|
||
|
17 maximum observed call depth
|
||
|
15 call depth limit
|
||
|
68,667,432 calls not traced due to depth
|
||
|
22,190,112 max function calls
|
||
|
|
||
|
trace buffer 6c000000 call records 6c20de78
|
||
|
=> trace funcs 30000000 0x100000
|
||
|
Function trace dumped to 30000000, size 0x1e70
|
||
|
|
||
|
This shows collecting and writing out the result trace data:
|
||
|
|
||
|
::
|
||
|
=> trace calls 20000000 0x10000000
|
||
|
Call list dumped to 20000000, size 0xfdf21a0
|
||
|
=> save mmc 1:1 20000000 /trace ${profoffset}
|
||
|
File System is consistent
|
||
|
file found, deleting
|
||
|
update journal finished
|
||
|
File System is consistent
|
||
|
update journal finished
|
||
|
266281376 bytes written in 18584 ms (13.7 MiB/s)
|
||
|
|
||
|
From here you can use proftool to convert it:
|
||
|
|
||
|
.. code-block:: bash
|
||
|
|
||
|
tools/proftool -m System.map -t trace -o asc.fg dump-ftrace
|
||
|
|
||
|
|
||
|
.. _`ACPI specification`: https://uefi.org/sites/default/files/resources/ACPI_6_3_final_Jan30.pdf
|