00001 #ifndef QEMU_OSDEP_H 00002 #define QEMU_OSDEP_H 00003 00004 #include <stdarg.h> 00005 #ifdef __OpenBSD__ 00006 #include <sys/types.h> 00007 #include <sys/signal.h> 00008 #endif 00009 00010 #ifndef _WIN32 00011 #include <sys/time.h> 00012 #endif 00013 00014 #ifndef glue 00015 #define xglue(x, y) x ## y 00016 #define glue(x, y) xglue(x, y) 00017 #define stringify(s) tostring(s) 00018 #define tostring(s) #s 00019 #endif 00020 00021 #ifndef likely 00022 #if __GNUC__ < 3 00023 #define __builtin_expect(x, n) (x) 00024 #endif 00025 00026 #define likely(x) __builtin_expect(!!(x), 1) 00027 #define unlikely(x) __builtin_expect(!!(x), 0) 00028 #endif 00029 00030 #ifndef offsetof 00031 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *) 0)->MEMBER) 00032 #endif 00033 #ifndef container_of 00034 #define container_of(ptr, type, member) ({ \ 00035 const typeof(((type *) 0)->member) *__mptr = (ptr); \ 00036 (type *) ((char *) __mptr - offsetof(type, member));}) 00037 #endif 00038 00039 #ifndef MIN 00040 #define MIN(a, b) (((a) < (b)) ? (a) : (b)) 00041 #endif 00042 #ifndef MAX 00043 #define MAX(a, b) (((a) > (b)) ? (a) : (b)) 00044 #endif 00045 00046 #ifndef ARRAY_SIZE 00047 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 00048 #endif 00049 00050 #ifndef always_inline 00051 #if (__GNUC__ < 3) || defined(__APPLE__) 00052 #define always_inline inline 00053 #else 00054 #define always_inline __attribute__ (( always_inline )) __inline__ 00055 #ifdef __OPTIMIZE__ 00056 #define inline always_inline 00057 #endif 00058 #endif 00059 #else 00060 #define inline always_inline 00061 #endif 00062 00063 #ifdef __i386__ 00064 #define REGPARM __attribute((regparm(3))) 00065 #else 00066 #define REGPARM 00067 #endif 00068 00069 #define qemu_printf printf 00070 00071 #if defined (__GNUC__) && defined (__GNUC_MINOR__) 00072 # define QEMU_GNUC_PREREQ(maj, min) \ 00073 ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) 00074 #else 00075 # define QEMU_GNUC_PREREQ(maj, min) 0 00076 #endif 00077 00078 void *qemu_memalign(size_t alignment, size_t size); 00079 void *qemu_vmalloc(size_t size); 00080 void qemu_vfree(void *ptr); 00081 00082 int qemu_create_pidfile(const char *filename); 00083 00084 void psst_get_time(long *sec, long *usec); 00085 typedef struct { 00086 long tv_sec; 00087 long tv_usec; 00088 } qemu_timeval; 00089 #define qemu_gettimeofday(tp) psst_get_time(&(((qemu_timeval*)tp)->tv_sec), &(((qemu_timeval*)tp)->tv_usec)); 00090 00091 #endif