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 vpush {d0-d15} @ save out all fp registers 119e45c0b968d63ea38353c99252d233879c2efdafjeffhao push {r0-r12,lr} @ save out all registers 12d72564ca7aa66c6d95b6ca34299258b65ecfd1cbBen Cheng ldr r2, .LdvmSelfVerificationMemOpDecode @ defined in footer.S 139e45c0b968d63ea38353c99252d233879c2efdafjeffhao mov r0, lr @ arg0 <- link register 149e45c0b968d63ea38353c99252d233879c2efdafjeffhao mov r1, sp @ arg1 <- stack pointer 159e45c0b968d63ea38353c99252d233879c2efdafjeffhao blx r2 @ decode and handle the mem op 169e45c0b968d63ea38353c99252d233879c2efdafjeffhao pop {r0-r12,lr} @ restore all registers 179e45c0b968d63ea38353c99252d233879c2efdafjeffhao vpop {d0-d15} @ restore all fp registers 189e45c0b968d63ea38353c99252d233879c2efdafjeffhao bx lr @ return to compiled code 199e45c0b968d63ea38353c99252d233879c2efdafjeffhao#endif 20