1*bbecb9d1SAndroid Build Coastguard Worker /************************************************************************** 2*bbecb9d1SAndroid Build Coastguard Worker * 3*bbecb9d1SAndroid Build Coastguard Worker * Copyright 2010 VMware, Inc. 4*bbecb9d1SAndroid Build Coastguard Worker * All Rights Reserved. 5*bbecb9d1SAndroid Build Coastguard Worker * 6*bbecb9d1SAndroid Build Coastguard Worker * Permission is hereby granted, free of charge, to any person obtaining a 7*bbecb9d1SAndroid Build Coastguard Worker * copy of this software and associated documentation files (the 8*bbecb9d1SAndroid Build Coastguard Worker * "Software"), to deal in the Software without restriction, including 9*bbecb9d1SAndroid Build Coastguard Worker * without limitation the rights to use, copy, modify, merge, publish, 10*bbecb9d1SAndroid Build Coastguard Worker * distribute, sub license, and/or sell copies of the Software, and to 11*bbecb9d1SAndroid Build Coastguard Worker * permit persons to whom the Software is furnished to do so, subject to 12*bbecb9d1SAndroid Build Coastguard Worker * the following conditions: 13*bbecb9d1SAndroid Build Coastguard Worker * 14*bbecb9d1SAndroid Build Coastguard Worker * The above copyright notice and this permission notice (including the 15*bbecb9d1SAndroid Build Coastguard Worker * next paragraph) shall be included in all copies or substantial portions 16*bbecb9d1SAndroid Build Coastguard Worker * of the Software. 17*bbecb9d1SAndroid Build Coastguard Worker * 18*bbecb9d1SAndroid Build Coastguard Worker * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 19*bbecb9d1SAndroid Build Coastguard Worker * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 20*bbecb9d1SAndroid Build Coastguard Worker * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 21*bbecb9d1SAndroid Build Coastguard Worker * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR 22*bbecb9d1SAndroid Build Coastguard Worker * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 23*bbecb9d1SAndroid Build Coastguard Worker * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 24*bbecb9d1SAndroid Build Coastguard Worker * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25*bbecb9d1SAndroid Build Coastguard Worker * 26*bbecb9d1SAndroid Build Coastguard Worker **************************************************************************/ 27*bbecb9d1SAndroid Build Coastguard Worker 28*bbecb9d1SAndroid Build Coastguard Worker 29*bbecb9d1SAndroid Build Coastguard Worker /* 30*bbecb9d1SAndroid Build Coastguard Worker * Miscellaneous OS services. 31*bbecb9d1SAndroid Build Coastguard Worker */ 32*bbecb9d1SAndroid Build Coastguard Worker 33*bbecb9d1SAndroid Build Coastguard Worker 34*bbecb9d1SAndroid Build Coastguard Worker #ifndef _OS_MISC_H_ 35*bbecb9d1SAndroid Build Coastguard Worker #define _OS_MISC_H_ 36*bbecb9d1SAndroid Build Coastguard Worker 37*bbecb9d1SAndroid Build Coastguard Worker #include <stdint.h> 38*bbecb9d1SAndroid Build Coastguard Worker #include <stdbool.h> 39*bbecb9d1SAndroid Build Coastguard Worker 40*bbecb9d1SAndroid Build Coastguard Worker #include "detect_os.h" 41*bbecb9d1SAndroid Build Coastguard Worker 42*bbecb9d1SAndroid Build Coastguard Worker 43*bbecb9d1SAndroid Build Coastguard Worker #if DETECT_OS_UNIX 44*bbecb9d1SAndroid Build Coastguard Worker # include <signal.h> /* for kill() */ 45*bbecb9d1SAndroid Build Coastguard Worker # include <unistd.h> /* getpid() */ 46*bbecb9d1SAndroid Build Coastguard Worker #endif 47*bbecb9d1SAndroid Build Coastguard Worker 48*bbecb9d1SAndroid Build Coastguard Worker 49*bbecb9d1SAndroid Build Coastguard Worker #ifdef __cplusplus 50*bbecb9d1SAndroid Build Coastguard Worker extern "C" { 51*bbecb9d1SAndroid Build Coastguard Worker #endif 52*bbecb9d1SAndroid Build Coastguard Worker 53*bbecb9d1SAndroid Build Coastguard Worker 54*bbecb9d1SAndroid Build Coastguard Worker /* 55*bbecb9d1SAndroid Build Coastguard Worker * Trap into the debugger. 56*bbecb9d1SAndroid Build Coastguard Worker */ 57*bbecb9d1SAndroid Build Coastguard Worker #if (defined(PIPE_ARCH_X86) || defined(PIPE_ARCH_X86_64)) && defined(PIPE_CC_GCC) 58*bbecb9d1SAndroid Build Coastguard Worker # define os_break() __asm("int3") 59*bbecb9d1SAndroid Build Coastguard Worker #elif defined(PIPE_CC_MSVC) 60*bbecb9d1SAndroid Build Coastguard Worker # define os_break() __debugbreak() 61*bbecb9d1SAndroid Build Coastguard Worker #elif DETECT_OS_UNIX 62*bbecb9d1SAndroid Build Coastguard Worker # define os_break() kill(getpid(), SIGTRAP) 63*bbecb9d1SAndroid Build Coastguard Worker #else 64*bbecb9d1SAndroid Build Coastguard Worker # define os_break() abort() 65*bbecb9d1SAndroid Build Coastguard Worker #endif 66*bbecb9d1SAndroid Build Coastguard Worker 67*bbecb9d1SAndroid Build Coastguard Worker 68*bbecb9d1SAndroid Build Coastguard Worker /* 69*bbecb9d1SAndroid Build Coastguard Worker * Abort the program. 70*bbecb9d1SAndroid Build Coastguard Worker */ 71*bbecb9d1SAndroid Build Coastguard Worker #if defined(DEBUG) 72*bbecb9d1SAndroid Build Coastguard Worker # define os_abort() do { os_break(); abort(); } while(0) 73*bbecb9d1SAndroid Build Coastguard Worker #else 74*bbecb9d1SAndroid Build Coastguard Worker # define os_abort() abort() 75*bbecb9d1SAndroid Build Coastguard Worker #endif 76*bbecb9d1SAndroid Build Coastguard Worker 77*bbecb9d1SAndroid Build Coastguard Worker 78*bbecb9d1SAndroid Build Coastguard Worker /* 79*bbecb9d1SAndroid Build Coastguard Worker * Output a message. Message should preferably end in a newline. 80*bbecb9d1SAndroid Build Coastguard Worker */ 81*bbecb9d1SAndroid Build Coastguard Worker void 82*bbecb9d1SAndroid Build Coastguard Worker os_log_message(const char *message); 83*bbecb9d1SAndroid Build Coastguard Worker 84*bbecb9d1SAndroid Build Coastguard Worker 85*bbecb9d1SAndroid Build Coastguard Worker /* 86*bbecb9d1SAndroid Build Coastguard Worker * Get an option. Should return NULL if specified option is not set. 87*bbecb9d1SAndroid Build Coastguard Worker */ 88*bbecb9d1SAndroid Build Coastguard Worker const char * 89*bbecb9d1SAndroid Build Coastguard Worker os_get_option(const char *name); 90*bbecb9d1SAndroid Build Coastguard Worker 91*bbecb9d1SAndroid Build Coastguard Worker 92*bbecb9d1SAndroid Build Coastguard Worker /* 93*bbecb9d1SAndroid Build Coastguard Worker * Get the total amount of physical memory available on the system. 94*bbecb9d1SAndroid Build Coastguard Worker */ 95*bbecb9d1SAndroid Build Coastguard Worker bool 96*bbecb9d1SAndroid Build Coastguard Worker os_get_total_physical_memory(uint64_t *size); 97*bbecb9d1SAndroid Build Coastguard Worker 98*bbecb9d1SAndroid Build Coastguard Worker /* 99*bbecb9d1SAndroid Build Coastguard Worker * Amount of physical memory available to a process 100*bbecb9d1SAndroid Build Coastguard Worker */ 101*bbecb9d1SAndroid Build Coastguard Worker bool 102*bbecb9d1SAndroid Build Coastguard Worker os_get_available_system_memory(uint64_t *size); 103*bbecb9d1SAndroid Build Coastguard Worker 104*bbecb9d1SAndroid Build Coastguard Worker /* 105*bbecb9d1SAndroid Build Coastguard Worker * Size of a page 106*bbecb9d1SAndroid Build Coastguard Worker */ 107*bbecb9d1SAndroid Build Coastguard Worker bool 108*bbecb9d1SAndroid Build Coastguard Worker os_get_page_size(uint64_t *size); 109*bbecb9d1SAndroid Build Coastguard Worker 110*bbecb9d1SAndroid Build Coastguard Worker 111*bbecb9d1SAndroid Build Coastguard Worker #ifdef __cplusplus 112*bbecb9d1SAndroid Build Coastguard Worker } 113*bbecb9d1SAndroid Build Coastguard Worker #endif 114*bbecb9d1SAndroid Build Coastguard Worker 115*bbecb9d1SAndroid Build Coastguard Worker 116*bbecb9d1SAndroid Build Coastguard Worker #endif /* _OS_MISC_H_ */ 117