2.3.136. TRACEDATAWRITE

The TRACEDATAWRITE command enables you to set a tracepoint on data reads.

Note

This command is valid only for ETM-based hardware targets.

Syntax

TRACEDATAWRITE [,qualifier...] {address | address-range}

where:

qualifier

Is an ordered list of zero or more qualifiers. The possible qualifiers are described in List of qualifiers.

address

Specifies the address at which the tracepoint is placed.

address-range

Specifies the address range at which the tracepoint is placed. See Specifying address ranges for details on how to specify an address range.

Description

This command sets a tracepoint at the address or address range you specify that triggers when an instruction access at the indicated address writes data to 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 chapters that describe setting unconditional and conditional tracepoints in the RealView Debugger v3.0 Trace User Guide.

List of qualifiers

The command qualifiers are as follows, but not all qualifiers are available for all of the supported trace targets:

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 data is written by any instruction in the address range from 0x1000 to 0x1200:


TRACEDATAWRITE,hw_ahigh:0x1200 0x1000

This is equivalent to the command:


TRACEDATAWRITE 0x1000..0x1200

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 when data value 0x400 is written by an instruction at address 0x1FA00:


TRACEDATAWRITE,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 when data value between 0x00-0x18 is written by an instruction at address 0x1000:


TRACEDATAWRITE,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 when data value between 0x400-0x4FF is written by an instruction at address 0x1000:


TRACEDATAWRITE,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 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 identifed by id, which is one of:

  • next for the next breakpoint specified for this connection

  • prev for the last breakpoint specified for this connection

  • the breakpoint list index of an existing breakpoint.

Tracepoints set in this way are called chained tracepoints. How RealView Debugger processes the tracepoints depends on the conjunction you have used:

  • In the and form, the conditions associated with both tracepoints are chained together, so that trace capture starts only when both conditions simultaneously match.

    For example:


    TRACEDATAWRITE,hw_and:next \MODIFY\#582
    TRACEDATAWRITE,hw_and:prev \ACCESS\#379

  • In the and-then form, RealView Debugger examines the chained tracepoints starting with the last one you specified. When the condition for the last tracepoint is met, the previous tracepoint is enabled. However, trace capture starts only when this tracepoint condition is met. RealView Debugger continues processing all tracepoints in the chain, until the condition in first one you specified is met. At this point, trace capture starts.

    For example, you might have three tracepoints in a chain:

    TRACEDATAWRITE,hw_and:{then-next} 0x10014 TRACEDATAWRITE,hw_and:{then-prev} 0x10018 TRACEDATAWRITE,hw_and:{then-prev} 0x1001B

    In this case, RealView Debugger first checks for a data write at address 0x1001B, then at address 0x10018, and finally at adress 0x10014. When all conditions are met, trace capture starts.

If you clear a tracepoint that has the ID next, then all tracepoints in the chain are cleared.

If you clear a tracepoint that has the ID prev, then that tracepoint and the following ones are cleared. The previous breakpoints in the chain remain set.

hw_in:{s}

Input trigger tests. The string s is specific to the trace connection being used. For the ARM ETM, the following case-sensitive forms are defined:

Ignore Security Level=Yes|No

Enables Secure and Normal mode data comparisons for processors that implement the TrustZone architecture:

Yes

Match when the processor is in any mode. This is the default.

No

Match only when the processor is in the mode specified by the address suffix:

  • S:address indicates Secure mode.

  • N:address indicates Normal mode.

For example, the command to set a tracepoint for a Secure mode address is:

TRACEDATAWRITE,hw_in:{Ignore Security Level=No} S:0x8100.

"Size of Data Access=s"

This determines the following:

  • for data accesses, the size of the data transfer

  • for instruction accesses, the size of the instruction accessed.

The size s is one of:

Any

Depends on the implementation:

  • halfword for Thumb code

  • word for ARM code.

This is the default.

Halfword

16-bit accesses (Thumb code).

Word

32-bit accesses (ARM code).

For example, this command sets a tracepoint that triggers for any 32-bit data read or a write that occurs in the program code between 0x1E000-0x1FF00:


TRACEDATAWRITE,hw_in:"Size of Data Access=Word" 0x1E00..0x1FF00

hw_out:{s}

Output trigger tests. The string s is specific to the trace connection being used. For the ARM ETM, the following case-sensitive form is defined:

"Tracepoint Type=s"

Specify the trace action for this command, where s is:

Trigger

Sets a trigger point.

Start Tracing

Sets a trace start point.

Stop Tracing

Sets a trace stop point.

Trace Instr

Sets an instruction-only trace range.

Trace Instr and Data

Sets 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:


TRACEDATAWRITE,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 s can be set to:

addr

Invert the tracepoint address value.

data

Invert the tracepoint value.

then

Invert an associated hw_and:{then} condition.

For example, to trace when a data value does not match a mask, you can write:


TRACEDATAWRITE,hw_not:data,hw_dmask:0x00FF ...

The trace commands require an address value, and the addr variant of hw_not uses this address.


TRACEDATAWRITE,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 n by replacing the address expression and the qualifiers of the existing tracepoint to those specified in this command.

Note

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.

Examples

The following example shows how to use TRACEDATAWRITE:

TRACEDATAWRITE \MATH_1\#449.3

Set a trace data write trigger at statement 3 of line 449 in the file math.c.

Alias

TRCDWRITE is an alias of TRACEDATAWRITE.

See also

The following commands provide similar or related functionality:

Copyright © 2002-2006 ARM Limited. All rights reserved.ARM DUI 0175H
Non-Confidential