1a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* ----------------------------------------------------------------------- 2a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ffi_common.h - Copyright (c) 1996 Red Hat, Inc. 3a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Copyright (C) 2007 Free Software Foundation, Inc 4a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 5a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project Common internal definitions and macros. Only necessary for building 6a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project libffi. 7a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ----------------------------------------------------------------------- */ 8a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 9a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifndef FFI_COMMON_H 10a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_COMMON_H 11a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 12a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __cplusplus 13a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectextern "C" { 14a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 15a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 16a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <fficonfig.h> 17a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 18a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Do not move this. Some versions of AIX are very picky about where 19a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project this is positioned. */ 20a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __GNUC__ 21a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project//# define alloca __builtin_alloca /* ANDROID removed, clashes w/bionic */ 22a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# include <alloca.h> /* ANDROID added */ 23a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# define MAYBE_UNUSED __attribute__((__unused__)) 24a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else 25a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# define MAYBE_UNUSED 26a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# if HAVE_ALLOCA_H 27a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# include <alloca.h> 28a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# else 29a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# ifdef _AIX 30a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project #pragma alloca 31a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# else 32a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# ifndef alloca /* predefined by HP cc +Olibcalls */ 33a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectchar *alloca (); 34a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# endif 35a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# endif 36a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# endif 37a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 38a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 39a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Check for the existence of memcpy. */ 40a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if STDC_HEADERS 41a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# include <string.h> 42a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else 43a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# ifndef HAVE_MEMCPY 44a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# define memcpy(d, s, n) bcopy ((s), (d), (n)) 45a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project# endif 46a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 47a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 48a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#if defined(FFI_DEBUG) 49a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#include <stdio.h> 50a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 51a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 52a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef FFI_DEBUG 53a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectvoid ffi_assert(char *expr, char *file, int line); 54a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectvoid ffi_stop_here(void); 55a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectvoid ffi_type_test(ffi_type *a, char *file, int line); 56a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 57a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_ASSERT(x) ((x) ? (void)0 : ffi_assert(#x, __FILE__,__LINE__)) 58a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_ASSERT_AT(x, f, l) ((x) ? 0 : ffi_assert(#x, (f), (l))) 59a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_ASSERT_VALID_TYPE(x) ffi_type_test (x, __FILE__, __LINE__) 60a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#else 61a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_ASSERT(x) 62a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_ASSERT_AT(x, f, l) 63a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define FFI_ASSERT_VALID_TYPE(x) 64a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 65a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 66a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define ALIGN(v, a) (((((size_t) (v))-1) | ((a)-1))+1) 67a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#define ALIGN_DOWN(v, a) (((size_t) (v)) & -a) 68a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 69a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Perform machine dependent cif processing */ 70a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projectffi_status ffi_prep_cif_machdep(ffi_cif *cif); 71a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 72a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Extended cif, used in callback from assembly routine */ 73a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef struct 74a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project{ 75a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project ffi_cif *cif; 76a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project void *rvalue; 77a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project void **avalue; 78a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project} extended_cif; 79a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 80a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project/* Terse sized type definitions. */ 81a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef unsigned int UINT8 __attribute__((__mode__(__QI__))); 82a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef signed int SINT8 __attribute__((__mode__(__QI__))); 83a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef unsigned int UINT16 __attribute__((__mode__(__HI__))); 84a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef signed int SINT16 __attribute__((__mode__(__HI__))); 85a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef unsigned int UINT32 __attribute__((__mode__(__SI__))); 86a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef signed int SINT32 __attribute__((__mode__(__SI__))); 87a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef unsigned int UINT64 __attribute__((__mode__(__DI__))); 88a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef signed int SINT64 __attribute__((__mode__(__DI__))); 89a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 90a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Projecttypedef float FLOAT32; 91a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 92a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 93a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#ifdef __cplusplus 94a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project} 95a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 96a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 97a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project#endif 98a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 99a89495f48f185779ff7d9d64ce6e6b037c9ded87The Android Open Source Project 100