xref: /aosp_15_r20/external/libffi/testsuite/libffi.call/ffitest.h (revision 1fd5a2e1d639cd1ddf29dd0c484c123bbd850c21)
1*1fd5a2e1SPrashanth Swaminathan #include <stdlib.h>
2*1fd5a2e1SPrashanth Swaminathan #include <stdio.h>
3*1fd5a2e1SPrashanth Swaminathan #include <string.h>
4*1fd5a2e1SPrashanth Swaminathan #include <fcntl.h>
5*1fd5a2e1SPrashanth Swaminathan #include <ffi.h>
6*1fd5a2e1SPrashanth Swaminathan #include "fficonfig.h"
7*1fd5a2e1SPrashanth Swaminathan 
8*1fd5a2e1SPrashanth Swaminathan #if defined HAVE_STDINT_H
9*1fd5a2e1SPrashanth Swaminathan #include <stdint.h>
10*1fd5a2e1SPrashanth Swaminathan #endif
11*1fd5a2e1SPrashanth Swaminathan 
12*1fd5a2e1SPrashanth Swaminathan #if defined HAVE_INTTYPES_H
13*1fd5a2e1SPrashanth Swaminathan #include <inttypes.h>
14*1fd5a2e1SPrashanth Swaminathan #endif
15*1fd5a2e1SPrashanth Swaminathan 
16*1fd5a2e1SPrashanth Swaminathan #define MAX_ARGS 256
17*1fd5a2e1SPrashanth Swaminathan 
18*1fd5a2e1SPrashanth Swaminathan #define CHECK(x) (void)(!(x) ? (abort(), 1) : 0)
19*1fd5a2e1SPrashanth Swaminathan 
20*1fd5a2e1SPrashanth Swaminathan /* Define macros so that compilers other than gcc can run the tests.  */
21*1fd5a2e1SPrashanth Swaminathan #undef __UNUSED__
22*1fd5a2e1SPrashanth Swaminathan #if defined(__GNUC__)
23*1fd5a2e1SPrashanth Swaminathan #define __UNUSED__ __attribute__((__unused__))
24*1fd5a2e1SPrashanth Swaminathan #define __STDCALL__ __attribute__((stdcall))
25*1fd5a2e1SPrashanth Swaminathan #define __THISCALL__ __attribute__((thiscall))
26*1fd5a2e1SPrashanth Swaminathan #define __FASTCALL__ __attribute__((fastcall))
27*1fd5a2e1SPrashanth Swaminathan #define __MSABI__ __attribute__((ms_abi))
28*1fd5a2e1SPrashanth Swaminathan #else
29*1fd5a2e1SPrashanth Swaminathan #define __UNUSED__
30*1fd5a2e1SPrashanth Swaminathan #define __STDCALL__ __stdcall
31*1fd5a2e1SPrashanth Swaminathan #define __THISCALL__ __thiscall
32*1fd5a2e1SPrashanth Swaminathan #define __FASTCALL__ __fastcall
33*1fd5a2e1SPrashanth Swaminathan #endif
34*1fd5a2e1SPrashanth Swaminathan 
35*1fd5a2e1SPrashanth Swaminathan #ifndef ABI_NUM
36*1fd5a2e1SPrashanth Swaminathan #define ABI_NUM FFI_DEFAULT_ABI
37*1fd5a2e1SPrashanth Swaminathan #define ABI_ATTR
38*1fd5a2e1SPrashanth Swaminathan #endif
39*1fd5a2e1SPrashanth Swaminathan 
40*1fd5a2e1SPrashanth Swaminathan /* Prefer MAP_ANON(YMOUS) to /dev/zero, since we don't need to keep a
41*1fd5a2e1SPrashanth Swaminathan    file open.  */
42*1fd5a2e1SPrashanth Swaminathan #ifdef HAVE_MMAP_ANON
43*1fd5a2e1SPrashanth Swaminathan # undef HAVE_MMAP_DEV_ZERO
44*1fd5a2e1SPrashanth Swaminathan 
45*1fd5a2e1SPrashanth Swaminathan # include <sys/mman.h>
46*1fd5a2e1SPrashanth Swaminathan # ifndef MAP_FAILED
47*1fd5a2e1SPrashanth Swaminathan #  define MAP_FAILED -1
48*1fd5a2e1SPrashanth Swaminathan # endif
49*1fd5a2e1SPrashanth Swaminathan # if !defined (MAP_ANONYMOUS) && defined (MAP_ANON)
50*1fd5a2e1SPrashanth Swaminathan #  define MAP_ANONYMOUS MAP_ANON
51*1fd5a2e1SPrashanth Swaminathan # endif
52*1fd5a2e1SPrashanth Swaminathan # define USING_MMAP
53*1fd5a2e1SPrashanth Swaminathan 
54*1fd5a2e1SPrashanth Swaminathan #endif
55*1fd5a2e1SPrashanth Swaminathan 
56*1fd5a2e1SPrashanth Swaminathan #ifdef HAVE_MMAP_DEV_ZERO
57*1fd5a2e1SPrashanth Swaminathan 
58*1fd5a2e1SPrashanth Swaminathan # include <sys/mman.h>
59*1fd5a2e1SPrashanth Swaminathan # ifndef MAP_FAILED
60*1fd5a2e1SPrashanth Swaminathan #  define MAP_FAILED -1
61*1fd5a2e1SPrashanth Swaminathan # endif
62*1fd5a2e1SPrashanth Swaminathan # define USING_MMAP
63*1fd5a2e1SPrashanth Swaminathan 
64*1fd5a2e1SPrashanth Swaminathan #endif
65*1fd5a2e1SPrashanth Swaminathan 
66*1fd5a2e1SPrashanth Swaminathan /* MinGW kludge.  */
67*1fd5a2e1SPrashanth Swaminathan #if defined(_WIN64) | defined(_WIN32)
68*1fd5a2e1SPrashanth Swaminathan #define PRIdLL "I64d"
69*1fd5a2e1SPrashanth Swaminathan #define PRIuLL "I64u"
70*1fd5a2e1SPrashanth Swaminathan #else
71*1fd5a2e1SPrashanth Swaminathan #define PRIdLL "lld"
72*1fd5a2e1SPrashanth Swaminathan #define PRIuLL "llu"
73*1fd5a2e1SPrashanth Swaminathan #endif
74*1fd5a2e1SPrashanth Swaminathan 
75*1fd5a2e1SPrashanth Swaminathan /* Tru64 UNIX kludge.  */
76*1fd5a2e1SPrashanth Swaminathan #if defined(__alpha__) && defined(__osf__)
77*1fd5a2e1SPrashanth Swaminathan /* Tru64 UNIX V4.0 doesn't support %lld/%lld, but long is 64-bit.  */
78*1fd5a2e1SPrashanth Swaminathan #undef PRIdLL
79*1fd5a2e1SPrashanth Swaminathan #define PRIdLL "ld"
80*1fd5a2e1SPrashanth Swaminathan #undef PRIuLL
81*1fd5a2e1SPrashanth Swaminathan #define PRIuLL "lu"
82*1fd5a2e1SPrashanth Swaminathan #define PRId8 "hd"
83*1fd5a2e1SPrashanth Swaminathan #define PRIu8 "hu"
84*1fd5a2e1SPrashanth Swaminathan #define PRId64 "ld"
85*1fd5a2e1SPrashanth Swaminathan #define PRIu64 "lu"
86*1fd5a2e1SPrashanth Swaminathan #define PRIuPTR "lu"
87*1fd5a2e1SPrashanth Swaminathan #endif
88*1fd5a2e1SPrashanth Swaminathan 
89*1fd5a2e1SPrashanth Swaminathan /* PA HP-UX kludge.  */
90*1fd5a2e1SPrashanth Swaminathan #if defined(__hppa__) && defined(__hpux__) && !defined(PRIuPTR)
91*1fd5a2e1SPrashanth Swaminathan #define PRIuPTR "lu"
92*1fd5a2e1SPrashanth Swaminathan #endif
93*1fd5a2e1SPrashanth Swaminathan 
94*1fd5a2e1SPrashanth Swaminathan /* IRIX kludge.  */
95*1fd5a2e1SPrashanth Swaminathan #if defined(__sgi)
96*1fd5a2e1SPrashanth Swaminathan /* IRIX 6.5 <inttypes.h> provides all definitions, but only for C99
97*1fd5a2e1SPrashanth Swaminathan    compilations.  */
98*1fd5a2e1SPrashanth Swaminathan #define PRId8 "hhd"
99*1fd5a2e1SPrashanth Swaminathan #define PRIu8 "hhu"
100*1fd5a2e1SPrashanth Swaminathan #if (_MIPS_SZLONG == 32)
101*1fd5a2e1SPrashanth Swaminathan #define PRId64 "lld"
102*1fd5a2e1SPrashanth Swaminathan #define PRIu64 "llu"
103*1fd5a2e1SPrashanth Swaminathan #endif
104*1fd5a2e1SPrashanth Swaminathan /* This doesn't match <inttypes.h>, which always has "lld" here, but the
105*1fd5a2e1SPrashanth Swaminathan    arguments are uint64_t, int64_t, which are unsigned long, long for
106*1fd5a2e1SPrashanth Swaminathan    64-bit in <sgidefs.h>.  */
107*1fd5a2e1SPrashanth Swaminathan #if (_MIPS_SZLONG == 64)
108*1fd5a2e1SPrashanth Swaminathan #define PRId64 "ld"
109*1fd5a2e1SPrashanth Swaminathan #define PRIu64 "lu"
110*1fd5a2e1SPrashanth Swaminathan #endif
111*1fd5a2e1SPrashanth Swaminathan /* This doesn't match <inttypes.h>, which has "u" here, but the arguments
112*1fd5a2e1SPrashanth Swaminathan    are uintptr_t, which is always unsigned long.  */
113*1fd5a2e1SPrashanth Swaminathan #define PRIuPTR "lu"
114*1fd5a2e1SPrashanth Swaminathan #endif
115*1fd5a2e1SPrashanth Swaminathan 
116*1fd5a2e1SPrashanth Swaminathan /* Solaris < 10 kludge.  */
117*1fd5a2e1SPrashanth Swaminathan #if defined(__sun__) && defined(__svr4__) && !defined(PRIuPTR)
118*1fd5a2e1SPrashanth Swaminathan #if defined(__arch64__) || defined (__x86_64__)
119*1fd5a2e1SPrashanth Swaminathan #define PRIuPTR "lu"
120*1fd5a2e1SPrashanth Swaminathan #else
121*1fd5a2e1SPrashanth Swaminathan #define PRIuPTR "u"
122*1fd5a2e1SPrashanth Swaminathan #endif
123*1fd5a2e1SPrashanth Swaminathan #endif
124*1fd5a2e1SPrashanth Swaminathan 
125*1fd5a2e1SPrashanth Swaminathan /* MSVC kludge.  */
126*1fd5a2e1SPrashanth Swaminathan #if defined _MSC_VER
127*1fd5a2e1SPrashanth Swaminathan #if !defined(__cplusplus) || defined(__STDC_FORMAT_MACROS)
128*1fd5a2e1SPrashanth Swaminathan #define PRIuPTR "lu"
129*1fd5a2e1SPrashanth Swaminathan #define PRIu8 "u"
130*1fd5a2e1SPrashanth Swaminathan #define PRId8 "d"
131*1fd5a2e1SPrashanth Swaminathan #define PRIu64 "I64u"
132*1fd5a2e1SPrashanth Swaminathan #define PRId64 "I64d"
133*1fd5a2e1SPrashanth Swaminathan #endif
134*1fd5a2e1SPrashanth Swaminathan #endif
135*1fd5a2e1SPrashanth Swaminathan 
136*1fd5a2e1SPrashanth Swaminathan #ifndef PRIuPTR
137*1fd5a2e1SPrashanth Swaminathan #define PRIuPTR "u"
138*1fd5a2e1SPrashanth Swaminathan #endif
139