; 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