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