Name Date Size #Lines LOC

..--

decoder/H25-Apr-2025-359,763339,558

.gitignoreH A D25-Apr-2025638 7262

Android.bpH A D25-Apr-20252.6 KiB8679

HOWTO.mdH A D25-Apr-202530.2 KiB670528

LICENSEH A D25-Apr-20251.4 KiB3125

METADATAH A D25-Apr-2025628 2119

MODULE_LICENSE_BSDHD25-Apr-20250

OWNERSH A D25-Apr-202539 21

README.mdH A D25-Apr-202519.7 KiB357275

TEST_MAPPINGH A D25-Apr-202575 77

TODOH A D25-Apr-20251 KiB2016

README.md

1OpenCSD - An open source CoreSight(tm) Trace Decode library        {#mainpage}
2===========================================================
3
4This library provides an API suitable for the decode of ARM(r) CoreSight(tm) trace streams.
5
6The library will decode formatted trace in three stages:
7
81. *Frame Deformatting* : Removal CoreSight frame formatting from individual trace streams.
92. *Packet Processing*  : Separate individual trace streams into discrete packets.
103. *Packet Decode*      : Convert the packets into fully decoded trace describing the program flow on a core.
11
12The library is implemented in C++ with an optional "C" API.
13
14Library Versioning
15------------------
16
17From version 0.4, library versioning will use a semantic versioning format
18(per http://semver.org) of the form _Major.minor.patch_ (M.m.p).
19
20Internal library version calls, documentation and git repository will use this format moving forwards.
21Where a patch version is not quoted, or quoted as .x then comments will apply to the entire release.
22
23Releases will be at M.m.0, with patch version incremented for bugfixes or documentation updates.
24
25Releases will appear on the master branch in the git repository with an appropriate version tag.
26
27CoreSight Trace Component Support.
28----------------------------------
29
30_Current Version 1.5.4_
31
32### Current support:
33
34- ETE   (v1.3) instruction trace - packet processing and packet decode.
35- ETMv4 (v4.6 [A/R profile] v4.4 [M profile]) instruction trace - packet processing and packet decode.
36- PTM   (v1.1) instruction trace - packet processing and packet decode.
37- ETMv3 (v3.5) instruction trace - packet processing and packet decode.
38- ETMv3 (v3.5) data trace - packet processing.
39- STM   (v1.1) software trace - packet processing and packet decode.
40
41- External Decoders - support for addition of external / custom decoders into the library.
42
43### Support to be added:
44
45- ITM software trace - packet processing and decode.
46- ETMv3 data trace - packet decode.
47- ETMv4 data trace - packet processing and decode.
48
49Note: for ITM and STM, packet decode is combining Master+Channel+Marker+Payload packets into a single generic
50output packet.
51
52
53Note on the Git Repository.
54---------------------------
55
56This git repository for OpenCSD contains only source for the OpenCSD decoder library.
57From version 0.4, releases appear as versioned tags on the master branch.
58
59CoreSight kernel drivers and perf suport for CoreSight trace is maintained in the latest
60upstream kernel versions.
61
62One exception is a minor patch required for autoFDO support.
63See [autofdo.md](@ref AutoFDO).
64
65Documentation
66-------------
67
68API Documentation is provided inline in the source header files, which use the __doxygen__ standard mark-up.
69Run `doxygen` on the `./doxygen_config.dox` file located in the `./docs` directory..
70
71    doxygen ./doxygen_config.dox
72
73This will produce the documentation in the `./docs/html` directory. The doxygen configuration also includes
74the `*.md` files as part of the documentation.
75
76Application Programming using the Library
77-----------------------------------------
78
79See the [programmers guide](@ref prog_guide) for details on usage of the library in custom applications.
80(`./docs/prog_guide/prog_guide_main.md`).
81
82
83Building and Installing the Library
84-----------------------------------
85
86See [build_libs.md](@ref build_lib) in the `./docs` directory for build details.
87
88The linux build makefile now contains options to install the library for a linux environment.
89
90
91How the Library is used in Linux `perf`
92---------------------------------------
93The library and additional infrastructure for programming CoreSight components has been integrated
94with the standard linux perfomance analysis tool `perf`.
95
96
97See [HOWTO.md](@ref howto_perf) for details.
98
99How to use the Library, perf and Trace for AutoFDO
100--------------------------------------------------
101Capturing trace using perf and decoding using the library can
102generate profiles for AutoFDO.
103
104See [autofdo.md](@ref AutoFDO) for details and scripts.
105
106(`./tests/auto-fdo/autofdo.md`).
107
108
109Version and Modification Information
110====================================
111
112- _Version 0.001_:  Library development - tested with `perf` tools integration - BKK16, 8th March 2016
113- _Version 0.002_:  Library development - added in PTM decoder support. Restructure header dir, replaced ARM rctdl prefix with opencsd/ocsd.
114- _Version 0.003_:  Library development - added in ETMv3 instruction decoder support.
115- _Version 0.4_  :  Library development - updated decode tree and C-API for generic decoder handling. Switch to semantic versioning.
116- _Version 0.4.1_:  Minor Update & Bugfixes - fix to PTM decoder, ID checking on test program, adds NULL_TS support in STM packet processor.
117- _Version 0.4.2_:  Minor Update - Update to documentation for perf usage in 4.8 kernel branch.
118- _Version 0.5.0_:  Library Development - external decoder support. STM full decode.
119- _Version 0.5.1_:  Minor Update & Bugfixes - Update HOWTO for kernel 4.9. Build fixes for parallel builds
120- _Version 0.5.2_:  Minor Update & Bugfixes - Update trace info packet string o/p + Cycle count packet bugfixes.
121- _Version 0.5.3_:  Doc update for using AutoFDO with ETM and additional timestamp and cycle count options.
122- _Version 0.5.4_:  Updates: X-compile for arm/arm64.  Remove deprecated VS2010 builds. Bugfix: GCC inline semantics in debug build.
123- _Version 0.6.0_:  Packet printers moved from tests into the main library. C++ and C APIs updated to allow clients to use them.
124                    Update to allow perf to insert barrier packets (4xFSYNC) which the decoder can be made to use to reset the decode state.
125- _Version 0.6.1_:  Bugfix: instruction follower bug on A32 branch to T32.
126- _Version 0.7.0_:  Add handling for trace return stack feature to ETMv4 and PTM trace.
127- _Version 0.7.1_:  Bugfix: ETMv3 packet processor.
128- _Version 0.7.2_:  Bugfix: ETMv4 decoder - fix exact match packet address follower.
129- _Version 0.7.3_:  Bugfix: PTM decoder - issues with initialisation and ASYNC detection.
130- _Version 0.7.4_:  Notification of change of repository for perf extensions. gcc 6.x build fixes.
131- _Version 0.7.5_:  Bugfix: ETMv4 decoder memory leak. Linux build update - header dependencies force rebuild.
132- _Version 0.8.0_:  Header restructure and build update to enable linux version to install library and C-API headers in standard locations.
133                    Library output naming changed from 'cstraced' to 'opencsd'.
134- _Version 0.8.1_:  Minor updates: Use install tool to copy headers. Changes to HOWTO for perf usage.
135- _Version 0.8.2_:  Bugfix: C++ init errors fixed for CLANG build process.
136- _Version 0.8.3_:  Bugfix: ETMv4 decoder issues fixed.
137- _Version 0.8.4_:  build: makefile updates and improvements to get build process compatible with Debian packaging.
138- _Version 0.9.0_:  Performance improvements for perf: Additional info in instruction range output packet. Caching memory accesses.
139				    Added Programmers guide to documentation.
140- _Version 0.9.1_:  Bugfix: Crash during decode when first memory access is to address where no image provided.
141- _Version 0.9.2_:  Bugfix: ETMv4: Incorrect Exception number output for Genric exception packets.
142                    AutoFDO: update documentation for AutoFDO usage and add in "record.sh" script
143- _Version 0.9.3_:  Bugfix: Test snapshot library not handling 'offset' parameters in dump file sections.
144                    Install: ocsd_if_version.h moved to opencsd/include to allow installation on OS & use in compiling client apps.
145- _Version 0.10.0_:
146    - __Updates__: Add additional information about the last instruction to the generic output packet.
147    - __Docs__: update docs for updated output packet.
148    - __Bugfix__: typecast removed from OCSD_VER_NUM in ocsd_if_version.h to allow use in C pre-processor.
149    - __Bugfix__: ETMV4: Interworking ISA change between A32-T32 occasionally missed during instruction decode.
150
151- _Version 0.10.1_:
152    - __Updates__: Build update - allow multi-thread make (make -j<N>).
153    - __Docs__: Minor update to AutoFDO documentation.
154
155- _Version 0.11.0_:
156    - __Update__: ETM v4 decoder updated to support ETM version up to v4.4
157    - __Update__: Memory access callback function - added new callback signature to provide TraceID to client when requesting memory.
158    - __Update__: Created new example program to demonstrate using memory buffer in APIs.
159    - __Bugfix__: Typos in docs and source.
160    - __Bugfix__: Memory accessor - validate callback return values.
161
162- _Version 0.11.1_:
163    - __Update__: build:- change -fpic to -fPIC to allow Debian build on sparc.
164    - __Bugfix__: build:- remove unused variable
165
166- _Version 0.11.2_:
167    - __Update__: docs:- HOWTO.md update to match new perf build requirements.
168    - __Bugfix__: Minor spelling typos fixed.
169
170- _Version 0.12.0_:
171    - __Update__: Frame deformatter - TPIU FSYNC and HSYNC support added.
172    - __Update__: ETM v4: Bugfix & clarification on Exception trace handling. Where exception occurs at a branch target before any instructions
173                  have been executed, the preferred return address is also the target address of the branch instruction. This case now includes as specific flag in
174                  the packet. Additionally any context change associated with this target address was being applied incorrectly.
175    - _Update__: Core / Architecture mapping to core names as used by test programs / snapshots updated to include additional recent ARM cores.
176    - __Update__: Docs: Update to reflect new exception flag. Update test program example to reflect latest output.
177    - __Bugfix__: ETM v4: Valid trace info packet was not handled correctly (0x01, 0x00).
178    - __Bugfix__: ETM v4: Error messaging on commit stack overflow.
179
180- _Version 0.12.1_:
181    - __Update__: build: remove -g option from release build.
182    - __Update__: tests: Snapshots can now use generic arch+profile names rather than core names, e.g. ARMv8-A
183    - __Bugfix__: Instruction decode - v8.3 B[L]A{A|B}[Z] instructions mis-identified.
184     -__Bugfix__: Transition from A64 to A32 can be mis-decoded if the trace implementation represents the transition
185                  as an individual address packet followed by a context packet.
186
187- _Version 0.12.2_:
188    - __Bugfix__: Clean up memory leaks.
189    - __Bugfix__: ETMv4: Ensure addressing history zeroed after TINFO.
190    - __Update__: Allow GCC version to be included in build output path.
191    - __Bugfix__: Packet printing update when WFI/WFE is P0 element.
192
193- _Version 0.13.x_ : Intermediate development version.
194
195- _Version 0.14.0_:
196    - __Update__: ETMv4 - decoder update & simplification to handle advanced trace features.
197    - __Update__: ETMv4 - decoder support for speculative trace.
198    - __Update__: Generic Elements: Additional information in EOT, UNSYNC, ON packets to give reason.
199    - __Update__: Memaccess: Add EL2 secure memory space flag.
200    - __Update__: Documentation: Updated for release changes and to reflect latest kernel version support for CoreSight.
201    - __Update__: Perf helper scripts updated to reflect latest build flow.
202    - __Bugfix__: Fix for component operational flag inputs.
203
204- _Version 0.14.1_:
205    - __Update__: ETMv4 - Add support for Q elements.
206    - __Bugfix__: build: fix logic issue for && operator. (github issue #23, sumitted by yabinc)
207
208- _Version 0.14.2_:
209    - __Update__: Architecture versioning. Set enum tag values to make conversion to numeric version easier.
210    - __Update__: I-decode: remove global temporary decode state data and replace with local instance data
211                  to make library more easily usable in multi-threaded programs.
212    - __Bugfix__: I-decode: Some Thumb instructions not correctly reported as implied returns.
213                  (github issue #24, submitted by kongy).
214
215- _Version 0.14.3_:
216    - __Update__: Fix makefile to be compliant with RPM base distros. (github issue #26, submitted by jlinton)
217    - __Update__: Add section to autofdo document.
218    - __Bugfix__: STM: fix bug that was missing ASYNC packets. (github issue #27, reported by subhasish Karmakar)
219
220- _Version 0.14.4_:
221    - __Update__: makefile: Add DESTDIR to install targets. (github issue #30)
222    - __Update__: tests: add script to run single test only.
223    - __Update__: docs: update to location of ARM coresight driver backports directory.
224    - __Bugfix__: ETMv3: Fix missing comma in string list. (github issue #31)
225    - __Bugfix__: makefile: tests: Fix build race problem (github issue #32)
226    - __Bugfix__: tests: fix ignore tpiu command line options (github issue #28)
227
228- _Version 1.0.0_:
229    - __New Decode Protocol__: Support added for the ETE protocol, used by ARM PEs that implement the FEAT_ETE
230                               feature. Supports new architectural features in this trace, including FEAT_TME.
231    - __Update__: Output Elememts: New protocol defines two new output elements.
232    - __Update__: Add support for WFIT / WFET instructions traced as P0 elements.
233    - __Update__: Architecture versioning. Arch v8 + PEs may add features in a flexible manner, and ARM also
234                  declares future features ahead of architecture versions to allow support to be added.
235                  APIs requiring an architecture version can now use ARCH_AA64 to declare a version of v8.3 +
236                  additional features. This relaxes the strict versionnig rules that the decoder uses when
237                  looking for Opcodes as trace waypoints.
238    - __Update__: docs: Add linux 'man' file and installation.
239    - __Bugfix__: build: Fix clean install, and remove static lib build test from main makefile to
240                  dev makefile only. (github issue #33)
241
242- _Version 1.1.0_:
243    - __Update__: ETM v4.6 support.
244    - __Update__: C-API - add API functions to get last error and convert error code to string.
245    - __Bugfix__: ETMv4/ETE - fix loop problem in commit elements.
246    - __Bugfix__: ETMv4/ETE - make error handling consistent.
247    - __Bugfix__: Add Pull request #36 from github (Ross Burton)
248    - __Bugfix__: Add Pull request #37 from github (Ian Rogers)
249
250- _Version 1.1.1_:
251    - __Bugfix__: Fix include and install for ETE decoder headers.
252
253- _Version 1.2.0_:
254    - __Update__: Add API for counting packet decode statistics, and Frame debmux statistics.
255    - __Update__: Update test scripts to allow additional command line options to be passed.
256    - __Bugfix__: Fix various build warnings.
257    - __Bugfix__: Remove unused variable (github issue #38 from Yi Kong)
258    - __Bugfix__: Remove noisy printf (James Clark)
259    - __Bugfix__: Fix documentation issues (github issues #39 & #40 from rbresalier)
260
261- _Version 1.2.1_:
262   - __Bugfix__: ETM4x / ETE - output of context elements to client can in some circumstances
263                 be delayed until after subsequent atoms have been processed leading to incorrect
264                 memory decode access via the client callbacks.
265                 Fixed to flush context elements immediately they are committed.
266
267- _Version 1.3.0_:
268    - __Admin__: Dev versions now have patch versions at least +100 from root public version
269    - __Update__: Add support for conditional branch (BC.cond) introduced for v8.8 / v9.3 architecture.
270    - __Update__: ETE: Add support for NSE bit - security state bit defining Root / Realm states in FEAT_RME.
271
272- _Version 1.3.1_:
273    - __Bugfix__: Add header file in snapshot parser - fix build for certain libc++ libs (github issue #43 from manojgupta)
274    - __Bugfix__: Fix typo in comment (github issue #42 from nothatDinger)
275
276- _Version 1.3.2_:
277    - __Bugfix__: ETM4x / ETE - 64 bit timestamp value - MS bit incorrectly masked to 1b0 during extraction from packet.
278
279- _Version 1.3.3_:
280    - __Update__: Add build directory for VS2022 build.
281    - __Update__: Add test program for Coresight Frame Demux code
282    - __Bugfix__: PTM: Fix incorrect extraction of Waypoint Address packet (github issue #48)
283    - __Bugfix__: Frame Demux: Fix HSYNC, FSYNC and 4xFSYNC handling that was causing out-of-bounds reads
284                  on invalid data input. (issues #49, #50 and #51). Fixed error handling for incorrect
285                  number of FSYNC packets in 4xFSYNC frame reset code that was not triggering an error
286                  and allowing fun with mis-aligned input data.
287    - __Bugfix__: Fix silent failure if incorrect config flags set when setting up frame demux modes.
288
289- _Version 1.4.0_:
290    - __Update__: ETE: Add support for Arch v9.4 FEAT_ITE. ETE v1p3, sw trace instrumentation.
291                  Adds in new generic output packet type: OCSD_GEN_TRC_ELEM_INSTRUMENTATION.
292    - __Bugfix__: Fix memory leak in mispredict handling (github issue #52 from yabinc)
293
294- _Version 1.4.1_:
295    - __Update__: Test: Update test program trc_pkt_lister with option to have no logging output - final stats only.
296    - __Bugfix__: ETM4x: ETE: Fix memory leak / use after free (github issues #53, #58 from yabinc)
297    - __Bugfix__: C-API: Fix memory leak with output sink object. (github issue #55)
298
299- _Version 1.4.2_:
300    - __Update__: Decoder memory access - add debug features and cacheing to improve performance of decode.
301                  Caching controllable by API or environment variables.
302    - __Update__: Decode debug options to control potential runaway debug when incorrect memory images input
303                  to decoder.
304
305                   - aarch64 instruction check for invalid instruction opcode. (any opcode with 0x0000 as top
306                      16 bits).
307
308                   - optional instruction range maximum run limit. Set by environment variable.
309
310    - __Update__: Remove VS2015 support.
311    - __Bugfix__: Memory spaces: ensure that decoder memory requests are correctly labelled with Realm and
312                  root characteristics when appropriate.
313    - __Bugfix__: M class tail chained interrupts now correctly handled.
314    - __Bugfix__: STM: - fix master and channel ID initialisation (github issue #61 from MommeSherif)
315    - __Bugfix__: Test: update HOWTO.md and perf-test-script.base for new paths (github issue #60 from yuxy-c)
316    - __Bugfix__: build: Fix GCC version dir handling for versions of GCC > 9.
317
318
319- _Version 1.5.1_:
320    - __Update__: ETE: Add support for Arch 9.5 FEAT_PAUTH_LR. Add new instructions to disassembler to
321                  recognise RETA<k>SPPC variants as indirect branches. Adds new test snapshots.
322
323- _Version 1.5.2_:
324    - __Update__: docs: Update documentation for test programs.
325    - __Update__: docs: Update trc_pkt_lister man file.
326    - __Bugfix__: build: fix warnings building library.
327    - __Bugfix__: tests: Fix typo in trc_pkt_lister help output.
328
329- _Version 1.5.3_:
330    - __Update__: tests: Add timing information to trc_pkt_lister program.
331    - __Update__: memacc: Add external interface to set memacc cache parameters. Update test programs.
332    - __Bugfix__: etm4x: fix packet print typo.
333    - __Bugfix__: docs: Minor fixes to docs and man file.
334    - __Bugfix__: build: minor fix for clang compatibility.
335
336- _Version 1.5.4_:
337    - __Update__: Add operation flags to allow clients to enable additional checking modes.
338                  Checks for inconsistencies in program image and incoming trace. Adds operational flags:
339                    - `OCSD_OPFLG_N_UNCOND_DIR_BR_CHK` - check for N atom on unconditional direct branches.
340                    - `OCSD_OPFLG_STRICT_N_UNCOND_BR_CHK` - check for N atom on all unconditional branches.
341                    - `OCSD_OPFLG_CHK_RANGE_CONTINUE` - Inconsistent range continuity on not taken branches.
342    - __Update__: Add operational flag `ETM4_OPFLG_PKTDEC_AA64_OPCODE_CHK` to enable aa64 opcode checks.
343
344Licence Information
345===================
346
347This library is licensed under the [BSD three clause licence.](http://directory.fsf.org/wiki/License:BSD_3Clause)
348
349A copy of this license is in the `LICENCE` file included with the source code.
350
351Contact
352=======
353
354Using the github site: https://github.com/Linaro/OpenCSD
355
356Mailing list: [email protected]
357