Tools for analyzing and browsing Tarmac instruction traces.


Last build status on Ubuntu 20.04 with gcc Last build status on Ubuntu 20.04 with clang Last build status on Ubuntu 18.04 with gcc Last build status on Ubuntu 18.04 with clang

Tarmac Trace Utilities

Arm Tarmac Trace Utilities is a suite of tools to read, analyze and browse traces of running programs in the 'Tarmac' textual format.

Utilities in this collection can:

  • Generate reports based on the data in the index and trace file, such as per-function profiling, or showing the tree of function calls and returns observed during the trace.
  • Repackage the trace data in a different format, such as an IEEE 1364 Value Change Dump file (.vcd).
  • Interactively browse the trace file in a way that understands its semantics, tracking the complete state of registers and memory as you page back and forth in the trace file, and allowing rapid navigation to places of interest, such as the previous location where a given data item was updated, or the return corresponding to a function call.


To build the analysis tools from source, you will need a C++ compiler compatible with C++14, and CMake.

To build the interactive browsing tools, you will also need a curses library (for the terminal-based version) or GTK+ 3 (for the GUI version) or both.

These are all available on current Linux distributions, for example Ubuntu 16.04 (xenial) and later, Debian 9 (stretch), CentOS 8, or Fedora 31.

On Windows, the analysis tools have been built successfully with Visual Studio 2017, and the terminal-based interactive browser can be built using PDCurses.


To build the tools, run the following commands:

cmake .
cmake --build .

(There are many other ways to invoke CMake, but this is the simplest.)


For detailed information on all the tools and how to use them, see the main documentation.


This package is distributed under the Apache v2.0 License.

Feedback, Contributions and Support

Please use the GitHub issue tracker associated with this repository for feedback.

We welcome code contributions via GitHub pull requests. Please try to stick to the style in the rest of the code for your contributions.

  • tarmac-profile crashes on windows side for large Tarmac files

    tarmac-profile crashes on windows side for large Tarmac files

    I build the binaries on Windows using visual studio 2017 as mentioned and when i try to get the profile information for large tarmac trace files (>1.5GB), the tools crash during indexing and it refers me towards this line:

    I would like to understand if there is a limitation on how big the trace file can be?

    opened by Firew0rk 9
  • Question about implementation of index file

    Question about implementation of index file

    Hi, Sorry to bother you! I'm learning tarmac based sw debug and just found this project which is quite useful. However, before fully understanding the implementation, I have a very initial question/confusion about the fundamental implementation of index file and how it being used by other tools. For example, I tried play tarmac-browser, it immediately shows reg and memory info once I jump to certain line of original tarmac file. It seems the reg/memory info of certain tarmac line is stored in the index file so that it can be represented in browser immediately (like, the reg/memory info at that moment of each line in the trace are stored). But in theory, it's almost impossible to store such huge info in the index file (and I see the size of index file looks OK). I'm wondering, if index file only contains intermediate info, then other tools like browser still need kind of processing to get reg/memory info of certain line of trace? If so, what if the size of original tarmac trace is large (for example, GB level), despite of the index generation time, any potential performance risk when browser to represent info? Thank you!

    opened by ninipa 6
  • Tarmac log unsupported format

    Tarmac log unsupported format


    I am trying to parse a tarmac log generated from a run and I am getting the following error:

    tarmac_example_for_github_issue.log:7: unknown Tarmac event type 'MNR4___I' tarmac_example_for_github_issue.log:8: unknown Tarmac event type 'BNR4___I' tarmac_example_for_github_issue.log:12: unknown Tarmac event type 'MNR4O__I' tarmac_example_for_github_issue.log:13: unknown Tarmac event type 'BNR4O__I' tarmac_example_for_github_issue.log:16: expected ')' after bracketed value 3027 cyc IT (00022ad6:00000000) 00022ad6 48e2 T16 LDR r0,[pc,#904] ; [0x22e60]


    BR Nick

    opened by nick-samsung 6
  • Unrecognized syntax in tarmac file

    Unrecognized syntax in tarmac file

    tarmac-browser doesn't like the following entry:

    2884500 ps ES (0000000000000188:9e6703e0) O el3h_s: FMOV d0,xzr R V0<63:0> 0000000000000000 R V0<127:64> 0000000000000000

    $ ./tarmac-browser tarmac._CLUSTER_g_core_0__g_little_u_helios_core_u_vcpu_u_cpu_u_helios_dpu_u_follow_.t0.log 
    index file tarmac._CLUSTER_g_core_0__g_little_u_helios_core_u_vcpu_u_cpu_u_helios_dpu_u_follow_.t0.log.index does not exist; building it
    tarmac._CLUSTER_g_core_0__g_little_u_helios_core_u_vcpu_u_cpu_u_helios_dpu_u_follow_.t0.log:199: Unrecognised token
                        R V0<63:0> 0000000000000000
    opened by WonderfulVoid 2
  • Running

    Running "cmake ." reports an error in CMakeLists.txt

    I tried to build using the commands suggested in the readme, but "cmake ." fails with an error message suggesting a bug in CMakeLists.txt:

    $ cmake .
    -- The CXX compiler identification is GNU 7.5.0
    -- Check for working CXX compiler: /usr/bin/c++
    -- Check for working CXX compiler: /usr/bin/c++ -- works
    -- Detecting CXX compiler ABI info
    -- Detecting CXX compiler ABI info - done
    -- Detecting CXX compile features
    -- Detecting CXX compile features - done
    -- Found Curses: /usr/lib/x86_64-linux-gnu/  
    -- Found PkgConfig: /usr/bin/pkg-config (found version "0.29.1") 
    -- Checking for module 'gtk+-3.0'
    --   Found gtk+-3.0, version 3.22.30
    CMake Error at CMakeLists.txt:46 (install):
      install TARGETS given target "tarmac-callinfo" which does not exist in this
    -- Found PythonInterp: /usr/bin/python3 (found version "3.6.9") 
    -- Configuring incomplete, errors occurred!
    See also "/home/petmay01/src/tarmac-trace-utilities/CMakeFiles/CMakeOutput.log".

    This is on an Ubuntu 18.04.5 LTS with cmake version 3.10.2.

    I don't see anything obviously diagnostic in the CMakeOutput.log but I have attached it anyway. CMakeOutput.log

    opened by pm215 1
  • Initial support for Tarmac generated by Cortex-M4 RTL.

    Initial support for Tarmac generated by Cortex-M4 RTL.

    This flavour of Tarmac is approximately in the Fast Models style (IT/IS instruction records, contiguous rather than diagrammatic memory transfers), but with some awkward differences that aren't clearly signalled: the CPU mode field is missing from instruction records, and the data in memory transfers is given in memory order rather than logical order.

    As far as I can tell, these changes manage to support this format without either breaking the existing test suite or requiring an up-front mode setting for the Tarmac parser. But it's precarious: the clues from which I deduce which syntax and semantics to expect don't really have much to do with the syntax and semantics differences, so it's all a bit more 'recognise the fingerprint of a particular implementation' than I'd like.

    However, it does work, and this change also adds some Cortex-M4 lines to the parser test suite with their expected output. So if we need to completely rethink things later, we'll be able to make sure the new approach still works.

    opened by statham-arm 0
  • [CI] Add github CI workflow.

    [CI] Add github CI workflow.

    This commit sets up 4 worflows, to configure, build and test tarmac-trace-utilities on Ubuntu 18.04, Ubuntu 20.04 with gcc and clang.

    The current status of the CI is shown at the top of the README.rst.

    opened by Arnaud-de-Grandmaison-ARM 0
  • [CMake] Ensure link_directories is invoked early enough.

    [CMake] Ensure link_directories is invoked early enough.

    The documentation at explicitely states :

    The command will apply only to targets created after it is called, so fix the invocation order in the CMakeLists.txt.

    While being there, remove the 'PRIVATE' keyword which does not apply to this flavour of the linker command setup.

    This does fix building tarmac-gui-browser on Mac and remove spurious warnings about non-existing xyz/PRIVATE directories.

    opened by Arnaud-de-Grandmaison-ARM 0
  • Add lib path when linking GTK.

    Add lib path when linking GTK.

    From the Note in the CMake manual ( the link_directories command is rarely necessary. It's rather suggested to use target_link_libraries with the full pathes for the libraries. pkg-config conveniently sets this with ${GTK_LINK_LIBRARIES}.

    This does fix building tarmac-gui-browser on Mac.

    opened by Arnaud-de-Grandmaison-ARM 0
  • Support multiple ELF images

    Support multiple ELF images

    We're currently tracing our boot ROM and bootloader, and we're jumping between several ELF: BL1, BL2, BL31 & BL33. We would like to have the option to supply multiple ELF files. Is it possible ?

    opened by rfried-nrl 1
  • feature request: arbitrary text search in tarmac-browser

    feature request: arbitrary text search in tarmac-browser

    I'm playing around with tarmac-browser as an alternative to my traditional "just view the trace file with less" approach, and one feature I would really like is the ability to move around in the trace by arbitrary text search. In 'less' you can do this with:

    • /pattern to search forwards
    • ?pattern to search backwards
    • n to repeat the previous search

    This lets you do ad-hoc things like "find the first VLDR in the trace", or "find the last point in the trace where some register had the value 0x8080". (Less critically, it also means I don't have to get used to a different interface for "go to this PC", because /3901bd80 would then work for that just as it does in less.)

    opened by pm215 1
Arm Software
Arm Software
the checkra1n set of tools targeting bare metal, Linux and Windows

Universal toolchain Low-effort cross-compiling for the masses. What's Universal toolchain? It's a collection of sysroots and shell scripts in such a w

null 67 Jan 5, 2023
This is a collection of tools for creating and manipulating BitTorrent v2 torrent files

torrent tools This is a collection of tools for creating and manipulating BitTorrent v2 torrent files. torrent-new can create hybrid torrents, but the

Arvid Norberg 9 Nov 12, 2022
Play Doh Windows ACL Tools

PDAcl 是一个支持Windows活动目录扩展权限设置、Windows活动目录常规权限设置、Windows服务权限设置的命令工具。

倾旋 61 Oct 30, 2022
A collection of tools to abuse chrome browser

A collection of tools to abuse chrome browser

batsec 267 Jan 1, 2023
Open-CMSIS-Pack development tools - C++

CMSIS-Pack Development Tools and Libraries This repository contains the source code of command line tools and library components for processing meta i

Open-CMSIS-Pack 34 Dec 29, 2022
CommonMark parsing and rendering library and program in C

cmark cmark is the C reference implementation of CommonMark, a rationalized version of Markdown syntax with a spec. (For the JavaScript reference impl

CommonMark 1.4k Jan 4, 2023
libcurses and dependencies taken from netbsd and brought into a portable shape (at least to musl or glibc)

netbsd-libcurses portable edition this is a port of netbsd's curses library for usage on Linux systems (tested and developed on sabotage linux, based

null 124 Nov 7, 2022
Sqrt OS is a simulation of an OS scheduler and memory manager using different scheduling algorithms including Highest Priority First (non-preemptive), Shortest Remaining Time Next, and Round Robin.

A CPU scheduler determines an order for the execution of its scheduled processes; it decides which process will run according to a certain data structure that keeps track of the processes in the system and their status. A process, upon creation, has one of the three states: Running, Ready, Blocked (doing I/O, using other resources than CPU or waiting on unavailable resource).

Abdallah Hemdan 18 Apr 15, 2022
The lightweight and modern Map SDK for Android and iOS

Open Mobile Maps The lightweight and modern Map SDK for Android (6.0+) and iOS (10+) Getting started Readme Android Readme iOS Featu

Open Mobile Maps 95 Dec 23, 2022
Indexes points and lines and generates map tiles to display them

Datamaps This is a tool for indexing large lists of geographic points or lines and dynamically generating map tiles from the index for display. Depend

Eric Fischer 329 Dec 6, 2022
A LKM rootkit targeting 4.x and 5.x kernel versions which opens a backdoor that can be used to spawn a reverse shell to a remote host and more.

Umbra Umbra (/ˈʌmbrə/) is an experimental LKM rootkit for kernels 4.x and 5.x (up to 5.7) which opens a network backdoor that spawns reverse shells to

Marcos S. Bajo 93 Dec 10, 2022
A cross-platform OpenXR capabilities explorer and runtime switcher with a CLI and GUI.

OpenXR Explorer OpenXR Explorer is a handy debug tool for OpenXR developers. It allows for easy switching between OpenXR runtimes, shows lists of the

Nick Klingensmith 154 Dec 13, 2022
Simple and lightweight pathname parser for C. This module helps to parse dirname, basename, filename and file extension .

Path Module For C File name and extension parsing functionality are removed because it's difficult to distinguish between a hidden dir (ex: .git) and

Prajwal Chapagain 3 Feb 25, 2022
Compile and execute C "scripts" in one go!

c "There isn't much that's special about C. That's one of the reasons why it's fast." I love C for its raw speed (although it does have its drawbacks)

Ryan Jacobs 2k Dec 26, 2022
A shebang-friendly script for "interpreting" single C99, C11, and C++ files, including rcfile support.

c99sh Basic Idea Control Files Shebang Tricks C++ C11 Credits Basic Idea A shebang-friendly script for "interpreting" single C99, C11, and C++ files,

Rhys Ulerich 100 Dec 3, 2022
A tool for use with clang to analyze #includes in C and C++ source files

Include What You Use For more in-depth documentation, see docs. Instructions for Users "Include what you use" means this: for every symbol (type, func

null 3.2k Jan 4, 2023
SMACK Software Verifier and Verification Toolchain

SMACK is both a modular software verification toolchain and a self-contained software verifier. It can be used to verify the assertions in its input p

null 393 Dec 10, 2022
CommonMark spec, with reference implementations in C and JavaScript

CommonMark CommonMark is a rationalized version of Markdown syntax, with a spec and BSD-licensed reference implementations in C and JavaScript. Try it

CommonMark 4.7k Jan 1, 2023
A C library for parsing/normalizing street addresses around the world. Powered by statistical NLP and open geo data.

libpostal: international street address NLP libpostal is a C library for parsing/normalizing street addresses around the world using statistical NLP a

openvenues 3.6k Dec 27, 2022