~ubuntu-branches/ubuntu/lucid/gauche-c-wrapper/lucid

« back to all changes in this revision

Viewing changes to libffi/testsuite/libffi.call/ffitest.h

  • Committer: Bazaar Package Importer
  • Author(s): NIIBE Yutaka
  • Date: 2008-04-07 09:15:03 UTC
  • Revision ID: james.westby@ubuntu.com-20080407091503-wu0h414koe95kj4i
Tags: upstream-0.5.2
ImportĀ upstreamĀ versionĀ 0.5.2

Show diffs side-by-side

added added

removed removed

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