OSDN Git Service

2010-07-06 Kai Tietz <kai.tietz@onevision.com>
authorktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Jul 2010 18:25:26 +0000 (18:25 +0000)
committerktietz <ktietz@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 6 Jul 2010 18:25:26 +0000 (18:25 +0000)
        * gcc.target/i386/ms_hook_prologue.c: Add x64 ms_hook_prologue
        support.
        * gcc.target/i386/i386.exp: Likewise.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@161875 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/i386/i386.exp
gcc/testsuite/gcc.target/i386/ms_hook_prologue.c

index 0f7b0c1..cf61679 100644 (file)
@@ -1,3 +1,9 @@
+2010-07-06  Kai Tietz  <kai.tietz@onevision.com>
+
+       * gcc.target/i386/ms_hook_prologue.c: Add x64 ms_hook_prologue
+       support.
+       * gcc.target/i386/i386.exp: Likewise.
+
 2010-07-06  Peter Bergner  <bergner@vnet.ibm.com>
 
        PR testsuite/44195
index 8b31231..65abf58 100644 (file)
@@ -27,8 +27,7 @@ load_lib gcc-dg.exp
 
 # Return 1 if attribute ms_hook_prologue is supported.
 proc check_effective_target_ms_hook_prologue { } {
-    if { [check_effective_target_ilp32]
-        && [check_no_compiler_messages ms_hook_prologue object {
+    if { [check_no_compiler_messages ms_hook_prologue object {
             void __attribute__ ((__ms_hook_prologue__)) foo ();
         } ""] } {
        return 1
index f945492..e11bcc0 100644 (file)
@@ -11,7 +11,7 @@ int __attribute__ ((__ms_hook_prologue__)) foo ()
   /* The NOP mov must not be optimized away by optimizations.
      The push %ebp, mov %esp, %ebp must not be removed by
      -fomit-frame-pointer */
-
+#ifndef __x86_64__
   /* movl.s %edi, %edi */
   if(*ptr++ != 0x8b) return 1;
   if(*ptr++ != 0xff) return 1;
@@ -20,6 +20,15 @@ int __attribute__ ((__ms_hook_prologue__)) foo ()
   /* movl.s %esp, %ebp */
   if(*ptr++ != 0x8b) return 1;
   if(*ptr++ != 0xec) return 1;
+#else
+  /* leaq 0(%rsp), %rsp */
+  if (*ptr++ != 0x48) return 1;
+  if (*ptr++ != 0x8d) return 1;
+  if (*ptr++ != 0xa4) return 1;
+  if (*ptr++ != 0x24) return 1;
+  if (ptr[0] != 0 || ptr[1] != 0 || ptr[2] != 0 || ptr[3] != 0)
+    return 1;
+#endif
   return 0;
 }