~ubuntu-branches/ubuntu/natty/libffi/natty

« back to all changes in this revision

Viewing changes to testsuite/libffi.special/ffitestcxx.h

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2008-04-04 21:20:12 UTC
  • Revision ID: james.westby@ubuntu.com-20080404212012-08zs514m24myu0bh
Tags: upstream-3.0.5
ImportĀ upstreamĀ versionĀ 3.0.5

Show diffs side-by-side

added added

removed removed

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