| /********************************************************/ |
| /* ntapi: Native API core library */ |
| /* Copyright (C) 2013--2017 Z. Gilboa */ |
| /* Released under GPLv2 and GPLv3; see COPYING.NTAPI. */ |
| /********************************************************/ |
| |
| #include <psxtypes/psxtypes.h> |
| |
| #if (__COMPILER__ == __MSVC__) && defined(__X86_MODEL) |
| |
| intptr_t __fastcall __tt_fork_impl_v1( |
| __in uintptr_t saved_regs_stack_pointer, |
| __in uintptr_t stack_adjustment); |
| |
| int32_t __declspec(naked) __cdecl __tt_fork_v1(void) |
| { |
| __asm { |
| push ebp |
| mov ebp, esp |
| |
| push ecx |
| push edx |
| push ebx |
| push esi |
| push edi |
| |
| mov ecx, esp |
| call __tt_fork_impl_v1 |
| |
| pop edi |
| pop esi |
| pop ebx |
| pop edx |
| pop ecx |
| |
| mov esp, ebp |
| pop ebp |
| ret |
| }; |
| } |
| |
| void __declspec(naked) __fastcall __tt_fork_child_entry_point(uintptr_t esp_saved) |
| { |
| __asm { |
| xor eax, eax |
| mov esp, ecx |
| |
| pop edi |
| pop esi |
| pop ebx |
| pop edx |
| pop ecx |
| |
| pop ebp |
| ret |
| }; |
| } |
| |
| void __declspec(naked) __fastcall __tt_fork_child_entry_point_adj(uintptr_t esp_saved) |
| { |
| __asm { |
| jmp __tt_fork_child_entry_point |
| }; |
| } |
| |
| #endif |