19e45c0b968d63ea38353c99252d233879c2efdafjeffhao#if defined(WITH_SELF_VERIFICATION)
29e45c0b968d63ea38353c99252d233879c2efdafjeffhao    /*
39e45c0b968d63ea38353c99252d233879c2efdafjeffhao     * This handler encapsulates heap memory ops for selfVerification mode.
49e45c0b968d63ea38353c99252d233879c2efdafjeffhao     *
59e45c0b968d63ea38353c99252d233879c2efdafjeffhao     * The call to the handler is inserted prior to a heap memory operation.
69e45c0b968d63ea38353c99252d233879c2efdafjeffhao     * This handler then calls a function to decode the memory op, and process
79e45c0b968d63ea38353c99252d233879c2efdafjeffhao     * it accordingly. Afterwards, the handler changes the return address to
89e45c0b968d63ea38353c99252d233879c2efdafjeffhao     * skip the memory op so it never gets executed.
99e45c0b968d63ea38353c99252d233879c2efdafjeffhao     */
109e45c0b968d63ea38353c99252d233879c2efdafjeffhao    push    {r0-r12,lr}                 @ save out all registers
11d72564ca7aa66c6d95b6ca34299258b65ecfd1cbBen Cheng    ldr     r2, .LdvmSelfVerificationMemOpDecode @ defined in footer.S
129e45c0b968d63ea38353c99252d233879c2efdafjeffhao    mov     r0, lr                      @ arg0 <- link register
139e45c0b968d63ea38353c99252d233879c2efdafjeffhao    mov     r1, sp                      @ arg1 <- stack pointer
149e45c0b968d63ea38353c99252d233879c2efdafjeffhao    blx     r2                          @ decode and handle the mem op
159e45c0b968d63ea38353c99252d233879c2efdafjeffhao    pop     {r0-r12,lr}                 @ restore all registers
169e45c0b968d63ea38353c99252d233879c2efdafjeffhao    bx      lr                          @ return to compiled code
179e45c0b968d63ea38353c99252d233879c2efdafjeffhao#endif
18