From 943072f45ca34caf7b55db16f412bed94f7c27bc Mon Sep 17 00:00:00 2001 From: Corinna Vinschen Date: Tue, 18 Jun 2013 09:45:37 +0000 Subject: * Makefile.in (VPATH): Drop CONFIG_DIR. (EXTRA_DLL_OFILES): Remove. (DLL_OFILES): Remove EXTRA_DLL_OFILES. (ASFLAGS): Define as -D_WIN64 on x86_64. (GMON_OFILES): Add mcountFunc.o. ($(srcdir)/$(TLSOFFSETS_H)): Use target_cpu rather than CONFIG_DIR. * configure.ac (CONFIG_DIR): Remove definition. * configure: Regenerate. * gcrt0.c: Use latest version from Mingw-w64 project. * gmon.c: Ditto. * gmon.h: Ditto. * mcount.c: Ditto. * mcountFunc.S: Ditto, new file. * profil.c: Ditto. * profil.h: Ditto. * config: Remove entire directory. --- winsup/cygwin/mcountFunc.S | 115 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 winsup/cygwin/mcountFunc.S (limited to 'winsup/cygwin/mcountFunc.S') diff --git a/winsup/cygwin/mcountFunc.S b/winsup/cygwin/mcountFunc.S new file mode 100644 index 000000000..e1b9136cf --- /dev/null +++ b/winsup/cygwin/mcountFunc.S @@ -0,0 +1,115 @@ +/** + * 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 -- cgit v1.2.3