1*61046927SAndroid Build Coastguard Worker /************************************************************************** 2*61046927SAndroid Build Coastguard Worker * 3*61046927SAndroid Build Coastguard Worker * Copyright 2010 VMware, Inc. 4*61046927SAndroid Build Coastguard Worker * All Rights Reserved. 5*61046927SAndroid Build Coastguard Worker * 6*61046927SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 7*61046927SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the 8*61046927SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including 9*61046927SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish, 10*61046927SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to 11*61046927SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to 12*61046927SAndroid Build Coastguard Worker * the following conditions: 13*61046927SAndroid Build Coastguard Worker * 14*61046927SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the 15*61046927SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions 16*61046927SAndroid Build Coastguard Worker * of the Software. 17*61046927SAndroid Build Coastguard Worker * 18*61046927SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19*61046927SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20*61046927SAndroid Build Coastguard Worker * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21*61046927SAndroid Build Coastguard Worker * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22*61046927SAndroid Build Coastguard Worker * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23*61046927SAndroid Build Coastguard Worker * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24*61046927SAndroid Build Coastguard Worker * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25*61046927SAndroid Build Coastguard Worker * 26*61046927SAndroid Build Coastguard Worker **************************************************************************/ 27*61046927SAndroid Build Coastguard Worker 28*61046927SAndroid Build Coastguard Worker 29*61046927SAndroid Build Coastguard Worker /* 30*61046927SAndroid Build Coastguard Worker * Miscellaneous OS services. 31*61046927SAndroid Build Coastguard Worker */ 32*61046927SAndroid Build Coastguard Worker 33*61046927SAndroid Build Coastguard Worker 34*61046927SAndroid Build Coastguard Worker #ifndef _OS_MISC_H_ 35*61046927SAndroid Build Coastguard Worker #define _OS_MISC_H_ 36*61046927SAndroid Build Coastguard Worker 37*61046927SAndroid Build Coastguard Worker #include <stdint.h> 38*61046927SAndroid Build Coastguard Worker #include <stdbool.h> 39*61046927SAndroid Build Coastguard Worker 40*61046927SAndroid Build Coastguard Worker #include "util/detect.h" 41*61046927SAndroid Build Coastguard Worker 42*61046927SAndroid Build Coastguard Worker 43*61046927SAndroid Build Coastguard Worker #if DETECT_OS_POSIX 44*61046927SAndroid Build Coastguard Worker # include <signal.h> /* for kill() */ 45*61046927SAndroid Build Coastguard Worker # include <unistd.h> /* getpid() */ 46*61046927SAndroid Build Coastguard Worker #endif 47*61046927SAndroid Build Coastguard Worker 48*61046927SAndroid Build Coastguard Worker 49*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 50*61046927SAndroid Build Coastguard Worker extern "C" { 51*61046927SAndroid Build Coastguard Worker #endif 52*61046927SAndroid Build Coastguard Worker 53*61046927SAndroid Build Coastguard Worker 54*61046927SAndroid Build Coastguard Worker /* 55*61046927SAndroid Build Coastguard Worker * Trap into the debugger. 56*61046927SAndroid Build Coastguard Worker */ 57*61046927SAndroid Build Coastguard Worker #if (DETECT_ARCH_X86 || DETECT_ARCH_X86_64) && DETECT_CC_GCC 58*61046927SAndroid Build Coastguard Worker # define os_break() __asm("int3") 59*61046927SAndroid Build Coastguard Worker #elif DETECT_CC_MSVC 60*61046927SAndroid Build Coastguard Worker # define os_break() __debugbreak() 61*61046927SAndroid Build Coastguard Worker #elif DETECT_OS_POSIX 62*61046927SAndroid Build Coastguard Worker # define os_break() kill(getpid(), SIGTRAP) 63*61046927SAndroid Build Coastguard Worker #else 64*61046927SAndroid Build Coastguard Worker # define os_break() abort() 65*61046927SAndroid Build Coastguard Worker #endif 66*61046927SAndroid Build Coastguard Worker 67*61046927SAndroid Build Coastguard Worker 68*61046927SAndroid Build Coastguard Worker /* 69*61046927SAndroid Build Coastguard Worker * Abort the program. 70*61046927SAndroid Build Coastguard Worker */ 71*61046927SAndroid Build Coastguard Worker #if MESA_DEBUG 72*61046927SAndroid Build Coastguard Worker # define os_abort() do { os_break(); abort(); } while(0) 73*61046927SAndroid Build Coastguard Worker #else 74*61046927SAndroid Build Coastguard Worker # define os_abort() abort() 75*61046927SAndroid Build Coastguard Worker #endif 76*61046927SAndroid Build Coastguard Worker 77*61046927SAndroid Build Coastguard Worker 78*61046927SAndroid Build Coastguard Worker /* 79*61046927SAndroid Build Coastguard Worker * Output a message. Message should preferably end in a newline. 80*61046927SAndroid Build Coastguard Worker */ 81*61046927SAndroid Build Coastguard Worker void 82*61046927SAndroid Build Coastguard Worker os_log_message(const char *message); 83*61046927SAndroid Build Coastguard Worker 84*61046927SAndroid Build Coastguard Worker 85*61046927SAndroid Build Coastguard Worker /* 86*61046927SAndroid Build Coastguard Worker * Get an option. Should return NULL if specified option is not set. 87*61046927SAndroid Build Coastguard Worker * It has the same disadvantage as getenv, see 88*61046927SAndroid Build Coastguard Worker * https://wiki.sei.cmu.edu/confluence/display/c/ENV34-C.+Do+not+store+pointers+returned+by+certain+functions 89*61046927SAndroid Build Coastguard Worker */ 90*61046927SAndroid Build Coastguard Worker const char * 91*61046927SAndroid Build Coastguard Worker os_get_option(const char *name); 92*61046927SAndroid Build Coastguard Worker 93*61046927SAndroid Build Coastguard Worker /* 94*61046927SAndroid Build Coastguard Worker * Get an option. Should return NULL if specified option is not set. 95*61046927SAndroid Build Coastguard Worker * It's will save the option into hash table for the first time, and 96*61046927SAndroid Build Coastguard Worker * for latter calling, it's will return the value comes from hash table 97*61046927SAndroid Build Coastguard Worker * directly, and the returned value will always be valid before program exit 98*61046927SAndroid Build Coastguard Worker * The disadvantage is that setenv, unsetenv, putenv won't take effect 99*61046927SAndroid Build Coastguard Worker * after this function is called 100*61046927SAndroid Build Coastguard Worker */ 101*61046927SAndroid Build Coastguard Worker const char * 102*61046927SAndroid Build Coastguard Worker os_get_option_cached(const char *name); 103*61046927SAndroid Build Coastguard Worker 104*61046927SAndroid Build Coastguard Worker /* 105*61046927SAndroid Build Coastguard Worker * Get the total amount of physical memory available on the system. 106*61046927SAndroid Build Coastguard Worker */ 107*61046927SAndroid Build Coastguard Worker bool 108*61046927SAndroid Build Coastguard Worker os_get_total_physical_memory(uint64_t *size); 109*61046927SAndroid Build Coastguard Worker 110*61046927SAndroid Build Coastguard Worker /* 111*61046927SAndroid Build Coastguard Worker * Amount of physical memory available to a process 112*61046927SAndroid Build Coastguard Worker */ 113*61046927SAndroid Build Coastguard Worker bool 114*61046927SAndroid Build Coastguard Worker os_get_available_system_memory(uint64_t *size); 115*61046927SAndroid Build Coastguard Worker 116*61046927SAndroid Build Coastguard Worker /* 117*61046927SAndroid Build Coastguard Worker * Size of a page 118*61046927SAndroid Build Coastguard Worker */ 119*61046927SAndroid Build Coastguard Worker bool 120*61046927SAndroid Build Coastguard Worker os_get_page_size(uint64_t *size); 121*61046927SAndroid Build Coastguard Worker 122*61046927SAndroid Build Coastguard Worker 123*61046927SAndroid Build Coastguard Worker #ifdef __cplusplus 124*61046927SAndroid Build Coastguard Worker } 125*61046927SAndroid Build Coastguard Worker #endif 126*61046927SAndroid Build Coastguard Worker 127*61046927SAndroid Build Coastguard Worker 128*61046927SAndroid Build Coastguard Worker #endif /* _OS_MISC_H_ */ 129