4.14 Events and trace interface

All Iris events are handled through this interface.

Most clients only need to call the following functions:

Get a list of all events that an instance supports.
Enable receiving the specified event.
When the events are no longer required.

Optionally, events can be enabled or disabled by calling eventStream_enable() or eventStream_disable(). These functions might provide a performance benefit over eventStream_create() and eventStream_destroy() when repeatedly enabling and disabling the same event stream. The client implements the event callback functions ec_*(), as needed. All other event functions are exotic and deal with ringbuffering events, counter events, and reading the state of an event.

Target instances can expose zero or more event sources. Event sources emit:

  • Trace events, for example INST events for each executed instruction.
  • Simulation events, for example IRIS_BREAKPOINT_HIT events.
  • Other events, for example events defined by a custom GUI.

An instance that produces events is called an event producer, or trace producer. It implements the event_*() functions.

An instance that receives event callbacks is called an event consumer, or trace consumer. It must implement the callbacks for the events it requested, for example ec_INST() and ec_IRIS_BREAKPOINT_HIT().

Target instances that do not expose any event sources must either return E_function_not_supported_by_instance for the event_*() functions, or return an empty list of event sources. In practice, however, all instances that implement Iris interfaces that might generate events, must also implement the event interface to expose these events, and allow clients to receive them. In particular, instances that support the breakpoint interface or the semihosting interface must implement the event interface.

This section contains the following subsections:
Non-ConfidentialPDF file icon PDF version101196_0100_00_en
Copyright © 2018 Arm Limited or its affiliates. All rights reserved.