| /** | |
| * 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 |