| |||
| Home > RealView Debugger Commands > Alphabetical command reference > TRACEDATAREAD | |||
The TRACEDATAREAD command enables you to set a tracepoint on data reads.
This command is valid only for ETM-based hardware targets.
[,TRACEDATAREAD qualifier...] {address | address_range}
where:
qualifierIs an ordered list of zero or more qualifiers. The possible qualifiers are described in List of qualifiers.
addressSpecifies the address at which the tracepoint is placed.
address_rangeSpecifies the address range at which the tracepoint is placed. See Specifying address ranges for details on how to specify an address range.
This command sets a tracepoint at the address or address range you specify that triggers when an instruction access at the indicated address reads data from memory.
The tracepoint type is by default to trigger, that is, start
collecting trace information into the trace buffer. You can modify
the action using the hw_out: qualifier to, for
example, stop tracing.
For more information about tracepoints and the way you access the ETM, see the Embedded Trace Macrocell Specification and the chapter that describes tracing in RealView Developer Kit v2.2 Extensions User Guide.
The command qualifiers are as follows, but not all qualifiers are available for all of the supported trace targets:
guiIf an error occurs when executing the command or when the tracepoint is triggered, the GUI is used to report it. Otherwise, the error is reported to the command pane.
This qualifier has no effect in the headless debugger.
hw_ahigh:(n)Specifies the high address for an address-range tracepoint. The low address is specified by the standard tracepoint address.
For example, this command sets a tracepoint that triggers
when a data read is made by any instruction in the address range
from 0x1000 to 0x1200:
TRCDR,hw_ahigh:0x1200 0x1000
hw_dvalue:(n)Specifies a data value to be compared to values transmitted on the processor data bus.
For example, this command sets a tracepoint that triggers
for a data read of the data value 0x400 at an
instruction at address 0x1FA00:
TRCDR,hw_dvalue:0x400 0x1FA00
hw_dhigh:(n)Specifies the high data value for a data-range tracepoint.
The low data value is specified by the hw_dvalue qualifier.
For example, this command sets a tracepoint that triggers
for any data read of the data value between 0x00-0x18 at
an instruction at address 0x1000:
TRCDR,hw_dvalue:0x0,hw_dhigh:0x18 0x1000
hw_dmask:(n)Specifies the data value mask value used for in
comparisons with a data-value tracepoint. Data values that match
the value specified by the hw_dvalue qualifier
when masked with this value cause the tracepoint to trigger.
For example, this command sets a tracepoint that triggers
for any data read of the data value between 0x400-0x4FF at
an instruction at address 0x1000:
TRCDR,hw_dvalue:0x400,hw_dmask:0xF00 0x1000
hw_passcount:(n)Specifies the number of times that the specified condition has to occur to trigger the tracepoint.
You can use this option to set up and use the ARM ETM counter hardware, if the ETM has counters exists and there is one available for use. ETM counters are 32 bits.
hw_and:{[then-]id}Perform an and or an and-then conjunction
with an existing tracepoint. For example, hw_and:h2,
or hw_and:"then-h2", where 2 is
the tracepoint id of another tracepoint.
In the and form, the conditions associated with both tracepoints are chained together, so that the action associated with the second tracepoint is performed only when both conditions match at the same time.
In the and-then form, when the condition for the first tracepoint is met, the second tracepoint is enabled. When the second tracepoint condition is matched, even if the first condition no longer matches, the actions associated are performed.
The is one
of:id
the tracepoint list index of an
existing of tracepoint, and has the format h,
for example indexh1
prev for the last tracepoint
specified for this connection
next for the target of this condition.
For example, these two commands set a tracepoint that triggers
the trace buffer when a data access in code at line 582 of modify.c is followed
by another data access at line 379 of access.c:
TRCDR \MODIFY_1\#582 TRCDR,hw_and:then-1 \ACCESS_1\#379
hw_in:{s}Input trigger tests. The string is
specific to the trace connection being used. For the ARM ETM, the
following case-sensitive forms are defined:s
"Size of Data Access=s"For data comparisons, check the data access size against
the specified value, and return True if it matches, where is:s
AnyAny access size.
Halfword16-bit accesses.
Word32-bit accesses.
For example, this command sets a tracepoint that triggers
for any 16-bit data read that occurs in the program code between 0x1E000-0x1FF00:
TRCDR,hw_in:"Size of Data Access=Halfword" 0x1E00..0x1FF00
hw_out:{s}Output trigger tests. The string is
specific to the trace connection being used. For the ARM ETM, the
following case-sensitive form is defined:s
"Tracepoint Type=s"Specify the trace action for this command, where is:s
TriggerSets a trigger point.
Start TracingSets a trace start point.
Stop TracingSets a trace stop point.
Trace InstrSets an instruction-only trace range.
Trace Instr and DataSets an instruction and data trace range.
For example, this command sets a tracepoint that traces all instructions
executed between program code addresses 0x1E000-0x1FF00,
but does not trace instructions outside this range:
TRCDR,hw_out:"Tracepoint Type=Trace Instr" 0x1E00..0x1FF00
hw_not:{s}Use this qualifier to invert the sense of an address,
data, or hw_and term specified in the same command.
The argument can
be set to:s
addrInvert the tracepoint address value.
dataInvert the tracepoint value.
thenInvert
an associated hw_and:{then} condition.
For example, to trace when a data value does not match a mask, you can write:
TRCDR,hw_not:data,hw_dmask:0x00FF ...
The trace commands require an address value, and the addr variant of hw_not uses
this address.
TRCDR,hw_not:addr 0x10040..0x10060
This means to trace execution at addresses other than the
range 0x10040 to 0x10060,
that is, exclude this region from the trace.
The hw_not:then variant of the command
is used in conjunction with hw_and to form or and nand-then conditions.
modify:(n)Instead of creating a new tracepoint, modify the
tracepoint with tracepoint ID number by
replacing the address expression and the qualifiers of the existing
tracepoint to those specified in this command.n
You cannot use this qualifier with the hw_and qualifier
to change a non-chained tracepoint to a chained tracepoint. However,
you can modify a chained tracepoint with any other qualifier and
also change the address expression.
The following examples show how to use TRACEDATAREAD:
TRACEDATAREAD
\COMMAND_1\#132 Set a
trace data read trigger at line 132 in the file command.c.
TRCDR \MAIN_1\#35..\MAIN_1\#63Start tracing instructions when a data read occurs
in the code between line 35-63 of main.c.
TRCDR,hw_pass:5,hw_out:"Tracepoint
Type=Start Tracing" \MAIN_1\#35Start tracing when a data read occurs at line 35 of main.c.
TRCDR,hw_out:"Tracepoint
Type=Stop Tracing" \GUI_1\#35..\GUI_1\#78Stop tracing when any instruction between line 35-78
of gui.c reads data.
The following commands provide similar or related functionality: