18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef QEMU_OSDEP_H 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define QEMU_OSDEP_H 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 46731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#include "config-host.h" 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <stdarg.h> 62910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#include <stddef.h> 76731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#include <stdbool.h> 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/types.h> 96731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifdef __OpenBSD__ 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#include <sys/signal.h> 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 136731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifndef _WIN32 146731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#include <sys/wait.h> 156731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else 166731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define WIFEXITED(x) 1 176731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define WEXITSTATUS(x) (x) 186731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif 196731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 205d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#include <sys/time.h> 215d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 226731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#if defined(CONFIG_SOLARIS) && CONFIG_SOLARIS_VERSION < 10 236731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/* [u]int_fast*_t not in <sys/int_types.h> */ 246731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnertypedef unsigned char uint_fast8_t; 256731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnertypedef unsigned int uint_fast16_t; 266731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnertypedef signed int int_fast16_t; 276731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif 286731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef glue 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define xglue(x, y) x ## y 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define glue(x, y) xglue(x, y) 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define stringify(s) tostring(s) 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define tostring(s) #s 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef likely 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#if __GNUC__ < 3 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define __builtin_expect(x, n) (x) 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define likely(x) __builtin_expect(!!(x), 1) 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define unlikely(x) __builtin_expect(!!(x), 0) 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef container_of 468b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define container_of(ptr, type, member) ({ \ 478b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project const typeof(((type *) 0)->member) *__mptr = (ptr); \ 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project (type *) ((char *) __mptr - offsetof(type, member));}) 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 512910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner/* Convert from a base type to a parent type, with compile time checking. */ 522910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#ifdef __GNUC__ 532910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define DO_UPCAST(type, field, dev) ( __extension__ ( { \ 542910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner char __attribute__((unused)) offset_must_be_zero[ \ 552910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner -offsetof(type, field)]; \ 562910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner container_of(dev, type, field);})) 572910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#else 582910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define DO_UPCAST(type, field, dev) container_of(dev, type, field) 592910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#endif 602910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 612910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define typeof_field(type, field) typeof(((type *)0)->field) 622910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define type_check(t1,t2) ((t1*)0 - (t2*)0) 632910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef MIN 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MIN(a, b) (((a) < (b)) ? (a) : (b)) 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef MAX 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define MAX(a, b) (((a) > (b)) ? (a) : (b)) 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 708b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 716731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifndef ROUND_UP 726731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define ROUND_UP(n,d) (((n) + (d) - 1) & -(d)) 736731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif 746731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 7545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#ifndef DIV_ROUND_UP 7645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define DIV_ROUND_UP(n,d) (((n) + (d) - 1) / (d)) 7745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif 7845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef ARRAY_SIZE 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef always_inline 842910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#if !((__GNUC__ < 3) || defined(__APPLE__)) 855d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef __OPTIMIZE__ 866731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#undef inline 872910f183ddd5286911bc1e3499ea93cb57de8b75David 'Digit' Turner#define inline __attribute__ (( always_inline )) __inline__ 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 895d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#else 916731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#undef inline 928b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define inline always_inline 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 948b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 958b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define qemu_printf printf 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 976731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerint qemu_daemon(int nochdir, int noclose); 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid *qemu_memalign(size_t alignment, size_t size); 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid *qemu_vmalloc(size_t size); 1006731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid *qemu_anon_ram_alloc(size_t size); 1018b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid qemu_vfree(void *ptr); 1026731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid qemu_anon_ram_free(void *ptr, size_t size); 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 10445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_INVALID -1 10545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 10645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#if defined(CONFIG_MADVISE) 10745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 10845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_WILLNEED MADV_WILLNEED 10945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTNEED MADV_DONTNEED 11045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#ifdef MADV_DONTFORK 11145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTFORK MADV_DONTFORK 11245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#else 11345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTFORK QEMU_MADV_INVALID 11445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif 11545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#ifdef MADV_MERGEABLE 11645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_MERGEABLE MADV_MERGEABLE 11745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#else 11845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID 11945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif 1206731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifdef MADV_DONTDUMP 1216731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_DONTDUMP MADV_DONTDUMP 1226731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else 1236731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID 1246731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif 1256731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifdef MADV_HUGEPAGE 1266731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_HUGEPAGE MADV_HUGEPAGE 1276731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else 1286731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_HUGEPAGE QEMU_MADV_INVALID 1296731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif 13045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 13145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#elif defined(CONFIG_POSIX_MADVISE) 13245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 13345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_WILLNEED POSIX_MADV_WILLNEED 13445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTNEED POSIX_MADV_DONTNEED 13545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTFORK QEMU_MADV_INVALID 13645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID 1376731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID 1386731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_HUGEPAGE QEMU_MADV_INVALID 13945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 14045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#else /* no-op */ 14145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 14245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_WILLNEED QEMU_MADV_INVALID 14345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTNEED QEMU_MADV_INVALID 14445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_DONTFORK QEMU_MADV_INVALID 14545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID 1466731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_DONTDUMP QEMU_MADV_INVALID 1476731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define QEMU_MADV_HUGEPAGE QEMU_MADV_INVALID 14845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 14945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif 15045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 15145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turnerint qemu_madvise(void *addr, size_t len, int advice); 15245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 1536731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerint qemu_open(const char *name, int flags, ...); 1546731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerint qemu_close(int fd); 1556731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 1566731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#if defined(__HAIKU__) && defined(__i386__) 1576731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define FMT_pid "%ld" 1586731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#elif defined(WIN64) 1596731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define FMT_pid "%" PRId64 1606731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else 1616731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define FMT_pid "%d" 1626731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif 1636731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 16445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turnerint qemu_create_pidfile(const char *filename); 16545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turnerint qemu_get_thread_id(void); 16645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 1676731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#ifndef CONFIG_IOVEC 1686731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerstruct iovec { 1696731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner void *iov_base; 1706731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner size_t iov_len; 1716731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner}; 1726731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/* 1736731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * Use the same value as Linux for now. 1746731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner */ 1756731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#define IOV_MAX 1024 1766731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 1776731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerssize_t readv(int fd, const struct iovec *iov, int iov_cnt); 1786731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerssize_t writev(int fd, const struct iovec *iov, int iov_cnt); 1796731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else 1806731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#include <sys/uio.h> 1816731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif 1826731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 18345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#ifdef _WIN32 18445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turnerstatic inline void qemu_timersub(const struct timeval *val1, 18545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner const struct timeval *val2, 18645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner struct timeval *res) 18745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner{ 18845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner res->tv_sec = val1->tv_sec - val2->tv_sec; 18945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner if (val1->tv_usec < val2->tv_usec) { 19045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner res->tv_sec--; 19145c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner res->tv_usec = val1->tv_usec - val2->tv_usec + 1000 * 1000; 19245c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner } else { 19345c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner res->tv_usec = val1->tv_usec - val2->tv_usec; 19445c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner } 19545c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner} 19645c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#else 19745c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define qemu_timersub timersub 19845c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#define ffs __builtin_ffs 19945c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner#endif 20045c3be00d4c1f85ba8bbf34827c024fbc636725fDavid 'Digit' Turner 2016731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid qemu_set_cloexec(int fd); 2026731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 2036731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid qemu_set_version(const char *); 2046731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerconst char *qemu_get_version(void); 2056731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 2066731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid fips_set_state(bool requested); 2076731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerbool fips_get_state(void); 2086731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 2096731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/* Return a dynamically allocated pathname denoting a file or directory that is 2106731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * appropriate for storing local state. 2116731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * 2126731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * @relative_pathname need not start with a directory separator; one will be 2136731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * added automatically. 2146731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * 2156731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * The caller is responsible for releasing the value returned with g_free() 2166731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * after use. 2176731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner */ 2186731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerchar *qemu_get_local_state_pathname(const char *relative_pathname); 2196731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 2206731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/** 2216731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * qemu_getauxval: 2226731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * @type: the auxiliary vector key to lookup 2236731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * 2246731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * Search the auxiliary vector for @type, returning the value 2256731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * or 0 if @type is not present. 2266731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner */ 2276731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#if defined(CONFIG_GETAUXVAL) || defined(__linux__) 2286731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerunsigned long qemu_getauxval(unsigned long type); 2296731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else 2306731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerstatic inline unsigned long qemu_getauxval(unsigned long type) { return 0; } 2316731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#endif 2326731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner 2336731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner/** 2346731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * qemu_init_auxval: 2356731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * @envp: the third argument to main 2366731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * 2376731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner * If supported and required, locate the auxiliary vector at program startup. 2386731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner */ 2396731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#if defined(CONFIG_GETAUXVAL) || !defined(__linux__) 2406731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnerstatic inline void qemu_init_auxval(char **envp) { } 2416731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turner#else 2426731cf52901064b55e19bae60ade2ccb5f69829cDavid 'Digit' Turnervoid qemu_init_auxval(char **envp); 243a2c14f947951612b45024095afd2210aa7368773David 'Digit' Turner#endif 244a2c14f947951612b45024095afd2210aa7368773David 'Digit' Turner 2458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 246