< 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 >