/** * This file has no copyright assigned and is placed in the Public Domain. * This file is part of the mingw-w64 runtime package. * No warranty is given; refer to the file DISCLAIMER.PD within this package. */ #include <_mingw_mac.h> .file "mcountFunc.S" .text #ifdef _WIN64 .align 8 #else .align 4 #endif /* gcc always assumes the mcount public symbol has a single leading underscore for our target. See gcc/config/i386.h; it isn't overridden in config/i386/cygming.h or any other places for mingw */ .globl _mcount .def _mcount; .scl 2; .type 32; .endef _mcount: #ifndef _WIN64 push %ebp mov %esp, %ebp push %eax push %ecx push %edx movl 4(%ebp),%edx movl (%ebp),%eax movl 4(%eax),%eax push %edx push %eax call __MINGW_USYMBOL(_mcount_private) add $8, %esp pop %edx pop %ecx pop %eax leave ret #else push %rbp mov %rsp, %rbp push %rax push %rcx push %rdx push %r8 push %r9 push %r10 push %r11 movq 8(%rbp),%rdx movq (%rbp),%rax movq 8(%rax),%rcx sub $40, %rsp call __MINGW_USYMBOL(_mcount_private) add $40, %rsp pop %r11 pop %r10 pop %r9 pop %r8 pop %rdx pop %rcx pop %rax leave ret #endif /* gcc always assumes the mcount public symbol has a single leading underscore for our target. See gcc/config/i386.h; it isn't overridden in config/i386/cygming.h or any other places for mingw. This is the entry for new prologue mechanism required for x64 seh calling convention. */ .globl __fentry__ .def _mcount_top; .scl 2; .type 32; .endef __fentry__: #ifndef _WIN64 push %ebp mov %esp, %ebp push %eax push %ecx push %edx movl 4(%ebp),%edx movl 8(%ebp),%eax push %edx push %eax call __MINGW_USYMBOL(_mcount_private) add $8, %esp pop %edx pop %ecx pop %eax leave ret #else push %rbp mov %rsp, %rbp push %rax push %rcx push %rdx push %r8 push %r9 push %r10 push %r11 movq 8(%rbp),%rdx movq 16(%rbp),%rcx sub $40, %rsp call __MINGW_USYMBOL(_mcount_private) add $40, %rsp pop %r11 pop %r10 pop %r9 pop %r8 pop %rdx pop %rcx pop %rax leave ret #endif