Mercurial > hg > CbC > CbC_gcc
view libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_arm.inc.S @ 158:494b0b89df80 default tip
...
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 25 May 2020 18:13:55 +0900 |
parents | 1830386684a0 |
children |
line wrap: on
line source
#if defined(__arm__) && defined(__linux__) #include "sanitizer_common/sanitizer_asm.h" ASM_HIDDEN(COMMON_INTERCEPTOR_SPILL_AREA) .comm _ZN14__interception10real_vforkE,4,4 .globl ASM_WRAPPER_NAME(vfork) ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(vfork)) ASM_WRAPPER_NAME(vfork): // Save LR in the off-stack spill area. push {r4, lr} bl COMMON_INTERCEPTOR_SPILL_AREA pop {r4, lr} str lr, [r0] // Call real vfork. This may return twice. User code that runs between the first and the second return // may clobber the stack frame of the interceptor; that's why it does not have a frame. ldr r0, .LCPI0_0 .LPC0_0: ldr r0, [pc, r0] mov lr, pc bx r0 push {r0, r4} cmp r0, #0 beq .L_exit // r0 != 0 => parent process. Clear stack shadow. add r0, sp, #8 bl COMMON_INTERCEPTOR_HANDLE_VFORK .L_exit: // Restore LR. bl COMMON_INTERCEPTOR_SPILL_AREA ldr lr, [r0] pop {r0, r4} mov pc, lr .LCPI0_0: .long _ZN14__interception10real_vforkE - (.LPC0_0+8) ASM_SIZE(vfork) .weak vfork .set vfork, ASM_WRAPPER_NAME(vfork) #endif