Mercurial > hg > CbC > CbC_gcc
view libsanitizer/sanitizer_common/sanitizer_common_interceptors_vfork_i386.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(__i386__) && defined(__linux__) #include "sanitizer_common/sanitizer_asm.h" .comm _ZN14__interception10real_vforkE,4,4 .globl ASM_WRAPPER_NAME(vfork) ASM_TYPE_FUNCTION(ASM_WRAPPER_NAME(vfork)) ASM_WRAPPER_NAME(vfork): // Store return address in the spill area and tear down the stack frame. sub $12, %esp call COMMON_INTERCEPTOR_SPILL_AREA mov 12(%esp), %ecx mov %ecx, (%eax) add $16, %esp call .L0$pb .L0$pb: pop %eax .Ltmp0: add $_GLOBAL_OFFSET_TABLE_+(.Ltmp0-.L0$pb), %eax call *_ZN14__interception10real_vforkE@GOTOFF(%eax) // Restore the stack frame. // 12(%esp) return address // 8(%esp) spill %ebx // 4(%esp) spill REAL(vfork) return value // (%esp) call frame (arg0) for __*_handle_vfork sub $16, %esp mov %ebx, 8(%esp) mov %eax, 4(%esp) // Form GOT address in %ebx. call .L1$pb .L1$pb: pop %ebx .Ltmp1: add $_GLOBAL_OFFSET_TABLE_+(.Ltmp1-.L1$pb), %ebx // Restore original return address. call COMMON_INTERCEPTOR_SPILL_AREA mov (%eax), %ecx mov %ecx, 12(%esp) mov 4(%esp), %eax // Call handle_vfork in the parent process (%rax != 0). test %eax, %eax je .L_exit lea 16(%esp), %ecx mov %ecx, (%esp) call COMMON_INTERCEPTOR_HANDLE_VFORK@PLT .L_exit: mov 4(%esp), %eax mov 8(%esp), %ebx add $12, %esp ret ASM_SIZE(vfork) .weak vfork .set vfork, ASM_WRAPPER_NAME(vfork) #endif