github.com/prattmic/llgo-embedded@v0.0.0-20150820070356-41cfecea0e1e/third_party/gofrontend/libffi/testsuite/libffi.call/ffitest.h (about)

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