; void TestTraceBuffer():
...
280121B0 mov r1, #1
280121B4 mov r0, #1
280121B8 bl |SetDebugControlAndStatus| ; enable trace buffer
280121BC add r0, sp, #0x11, 28
280121C0 bl |Test| ; call Test
...
; void Test(int * p)
280121F0 mov r12, sp
280121F4 stmdb sp!, {r0}
280121F8 stmdb sp!, {r12, lr}
280121FC ldr r0, [sp, #8]
28012200 bl |Test1| ; call Test1
28012204 ldmia sp, {sp, pc}
; void Test1(int * p)
28012208 mov r12, sp
2801220C stmdb sp!, {r0}
28012210 stmdb sp!, {r12, lr}
28012214 ldr r0, [sp, #8]
28012218 mov r1, #0x7B
2801221C str r1, [r0] ; *p = 123 - triggers a data breakpoint
28012220 ldmia sp, {sp, pc}
Figure 1: Annotated disassembly listing for functions TestTraceBuffer, Test, and Test1 used to demonstrate the XScale trace buffer.
Back to Article