< prev index next >

src/os/aix/vm/porting_aix.hpp

Print this page
rev 9211 : 8140645: Recent Developments for AIX
Summary: Port recent developments from SAP for AIX to the OpenJDK

*** 25,41 **** #ifndef OS_AIX_VM_PORTING_AIX_HPP #define OS_AIX_VM_PORTING_AIX_HPP #include <stddef.h> - // PPC port only: - #define assert0(b) assert( (b), "" ) - #define guarantee0(b) assert( (b), "" ) - template <class T1, class T2> bool is_aligned_to(T1 what, T2 alignment) { - return ( ((uintx)(what)) & (((uintx)(alignment)) - 1) ) == 0 ? true : false; - } - // Header file to contain porting-relevant code which does not have a // home anywhere else and which can not go into os_<platform>.h because // that header is included inside the os class definition, hence all // its content is part of the os class. --- 25,34 ----
*** 66,83 **** #ifdef __cplusplus extern "C" #endif int dladdr(void *addr, Dl_info *info); - - // The semantics in this file are thus that codeptr_t is a *real code ptr*. - // This means that any function taking codeptr_t as arguments will assume - // a real codeptr and won't handle function descriptors (eg getFuncName), - // whereas functions taking address as args will deal with function - // descriptors (eg os::dll_address_to_library_name). typedef unsigned int* codeptr_t; // helper function - given a program counter, tries to locate the traceback table and // returns info from it (like, most importantly, function name, displacement of the // pc inside the function, and the traceback table itself. #ifdef __cplusplus extern "C" --- 59,72 ---- #ifdef __cplusplus extern "C" #endif int dladdr(void *addr, Dl_info *info); typedef unsigned int* codeptr_t; + struct tbtable; + // helper function - given a program counter, tries to locate the traceback table and // returns info from it (like, most importantly, function name, displacement of the // pc inside the function, and the traceback table itself. #ifdef __cplusplus extern "C"
*** 85,151 **** int getFuncName( codeptr_t pc, // [in] program counter char* p_name, size_t namelen, // [out] optional: user provided buffer for the function name int* p_displacement, // [out] optional: displacement const struct tbtable** p_tb, // [out] optional: ptr to traceback table to get further information ! char* p_errmsg, size_t errmsglen,// [out] optional: user provided buffer for error messages ! bool demangle = true // [in] whether to demangle the name ); - // ------------------------------------------------------------------------- - - // A simple critical section which shall be based upon OS critical - // sections (CRITICAL_SECTION resp. Posix Mutex) and nothing else. - - #include <pthread.h> - - namespace MiscUtils { - typedef pthread_mutex_t critsect_t; - - inline void init_critsect(MiscUtils::critsect_t* cs) { - pthread_mutex_init(cs, NULL); - } - inline void free_critsect(MiscUtils::critsect_t* cs) { - pthread_mutex_destroy(cs); - } - inline void enter_critsect(MiscUtils::critsect_t* cs) { - pthread_mutex_lock(cs); - } - inline void leave_critsect(MiscUtils::critsect_t* cs) { - pthread_mutex_unlock(cs); - } - - // Need to wrap this in an object because we need to dynamically initialize - // critical section (because of windows, where there is no way to initialize - // a CRITICAL_SECTION statically. On Unix, we could use - // PTHREAD_MUTEX_INITIALIZER) - - // Note: The critical section does NOT get cleaned up in the destructor. That is - // by design: the CritSect class is only ever used as global objects whose - // lifetime spans the whole VM life; in that context we don't want the lock to - // be cleaned up when global C++ objects are destroyed, but to continue to work - // correctly right to the very end of the process life. - class CritSect { - critsect_t _cs; - public: - CritSect() { init_critsect(&_cs); } - //~CritSect() { free_critsect(&_cs); } - void enter() { enter_critsect(&_cs); } - void leave() { leave_critsect(&_cs); } - }; - - class AutoCritSect { - CritSect* const _pcsobj; - public: - AutoCritSect(CritSect* pcsobj) - : _pcsobj(pcsobj) - { - _pcsobj->enter(); - } - ~AutoCritSect() { - _pcsobj->leave(); - } - }; - - } - #endif // OS_AIX_VM_PORTING_AIX_HPP --- 74,84 ---- int getFuncName( codeptr_t pc, // [in] program counter char* p_name, size_t namelen, // [out] optional: user provided buffer for the function name int* p_displacement, // [out] optional: displacement const struct tbtable** p_tb, // [out] optional: ptr to traceback table to get further information ! char* p_errmsg, size_t errmsglen, // [out] optional: user provided buffer for error messages ! bool demangle // [in] whether to demangle the name ); #endif // OS_AIX_VM_PORTING_AIX_HPP +
< prev index next >