OSDN Git Service

2009-06-08 Andrew Haley <aph@redhat.com>
[pf3gnuchains/gcc-fork.git] / libffi / testsuite / libffi.call / ffitest.h
1 #include <stdlib.h>
2 #include <stdio.h>
3 #include <string.h>
4 #include <fcntl.h>
5 #include <stdint.h>
6 #include <inttypes.h>
7 #include <ffi.h>
8 #include "fficonfig.h"
9
10 #define MAX_ARGS 256
11
12 #define CHECK(x) !(x) ? abort() : 0
13
14 /* Define __UNUSED__ that also other compilers than gcc can run the tests.  */
15 #undef __UNUSED__
16 #if defined(__GNUC__)
17 #define __UNUSED__ __attribute__((__unused__))
18 #else
19 #define __UNUSED__
20 #endif
21
22 /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
23    file open.  */
24 #ifdef HAVE_MMAP_ANON
25 # undef HAVE_MMAP_DEV_ZERO
26
27 # include <sys/mman.h>
28 # ifndef MAP_FAILED
29 #  define MAP_FAILED -1
30 # endif
31 # if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
32 #  define MAP_ANONYMOUS MAP_ANON
33 # endif
34 # define USING_MMAP
35
36 #endif
37
38 #ifdef HAVE_MMAP_DEV_ZERO
39
40 # include <sys/mman.h>
41 # ifndef MAP_FAILED
42 #  define MAP_FAILED -1
43 # endif
44 # define USING_MMAP
45
46 #endif
47
48 #ifdef USING_MMAP
49 static inline void *
50 allocate_mmap (size_t size)
51 {
52   void *page;
53 #if defined (HAVE_MMAP_DEV_ZERO)
54   static int dev_zero_fd = -1;
55 #endif
56
57 #ifdef HAVE_MMAP_DEV_ZERO
58   if (dev_zero_fd == -1)
59     {
60       dev_zero_fd = open ("/dev/zero", O_RDONLY);
61       if (dev_zero_fd == -1)
62         {
63           perror ("open /dev/zero: %m");
64           exit (1);
65         }
66     }
67 #endif
68
69
70 #ifdef HAVE_MMAP_ANON
71   page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
72                MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
73 #endif
74 #ifdef HAVE_MMAP_DEV_ZERO
75   page = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
76                MAP_PRIVATE, dev_zero_fd, 0);
77 #endif
78
79   if (page == (void *) MAP_FAILED)
80     {
81       perror ("virtual memory exhausted");
82       exit (1);
83     }
84
85   return page;
86 }
87
88 #endif