OSDN Git Service

2009-10-12 Stefan Dösinger <stefan@codeweavers.com>
[pf3gnuchains/gcc-fork.git] / gcc / testsuite / gcc.target / i386 / ms_hook_prologue.c
1 /* Test that the ms_hook_prologue attribute generates the correct code.  */
2
3 /* { dg-do run } */
4 /* { dg-require-effective-target ilp32 } */
5 /* { dg-options "-O2 -fomit-frame-pointer" } */
6
7 int __attribute__ ((__ms_hook_prologue__)) foo ()
8 {
9   unsigned char *ptr = (unsigned char *) foo;
10
11   /* The NOP mov must not be optimized away by optimizations.
12      The push %ebp, mov %esp, %ebp must not be removed by
13      -fomit-frame-pointer */
14
15   /* movl.s %edi, %edi */
16   if(*ptr++ != 0x8b) return 1;
17   if(*ptr++ != 0xff) return 1;
18   /* push %ebp */
19   if(*ptr++ != 0x55) return 1;
20   /* movl.s %esp, %ebp */
21   if(*ptr++ != 0x8b) return 1;
22   if(*ptr++ != 0xec) return 1;
23   return 0;
24 }
25
26 int main ()
27 {
28   return foo();
29 }