Skip to content

Latest commit

 

History

History
63 lines (48 loc) · 2.07 KB

trace_format.rst

File metadata and controls

63 lines (48 loc) · 2.07 KB

Trace file contents

A trace file essentially consists in

  • A header with general information about the trace generation context (name of the binary executable passed to , --tag argument value, production date & time, ...), followed by
  • The machine execution trace entries (roughly, one per execution basic block, with information on the branch decision at the end)

offers a dump-trace option to display the contents of trace files passed as arguments, displaying tags passed to amongst other things. For example:

gnatcov dump-trace test_divmod2.trace

Tag  : DATE_TIME (Date)
Len  : 8
Data : dc 07 02 15 08 00 25 00
       2012-02-21 08:00:37

Tag  : EXEC_FILE_NAME
Len  : 16
Data : obj/test_divmod2

Tag  : USER_DATA (User_Tag)
Len  : 10
Data : sample tag

Traces:
fffffffc-fffffffb ?: 20 ---- fault
fffffffc-ffffffff ?: 11 ---t block
fff0067c-fff006b3 ?: 11 ---t block
fff006bc-fff006bf ?: 12 --t- block
[...]

Prior to the execution traces per-se (list of executed instruction blocks past the Traces: label), we see a few information entries aimed at helping and users on various accounts. Each entry has a tag identifying it's kind, then some associated data dependent on the kind. Our example above features the following information entries:

DATE_TIME :

The trace production time stamp, always 8 bytes long.

EXEC_FILE_NAME :

Path to the binary program that was executed to produce the trace. This path can be exactly the one that was passed to or a derived path, for instance if had to add an extension to find the actual file (see target_specific_notes). uses this path to find the program file again at analysis time, to find which machine code corresponds to which address for example.

USER_DATA :

User string tag for this trace, when one was passed with -T to .

The precise structure is described in the qemu_traces.ads unit of the gnatcov sources.