Merge
This commit is contained in:
commit
444fceb59d
@ -95,7 +95,9 @@ static task_t getTask(JNIEnv *env, jobject this_obj) {
|
||||
#define CHECK_EXCEPTION_CLEAR_(value) if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return value; }
|
||||
|
||||
static void throw_new_debugger_exception(JNIEnv* env, const char* errMsg) {
|
||||
(*env)->ThrowNew(env, (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"), errMsg);
|
||||
jclass exceptionClass = (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException");
|
||||
CHECK_EXCEPTION;
|
||||
(*env)->ThrowNew(env, exceptionClass, errMsg);
|
||||
}
|
||||
|
||||
static struct ps_prochandle* get_proc_handle(JNIEnv* env, jobject this_obj) {
|
||||
@ -129,6 +131,7 @@ static struct ps_prochandle* get_proc_handle(JNIEnv* env, jobject this_obj) {
|
||||
JNIEXPORT void JNICALL
|
||||
Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_init0(JNIEnv *env, jclass cls) {
|
||||
symbolicatorID = (*env)->GetFieldID(env, cls, "symbolicator", "J");
|
||||
CHECK_EXCEPTION;
|
||||
taskID = (*env)->GetFieldID(env, cls, "task", "J");
|
||||
CHECK_EXCEPTION;
|
||||
|
||||
@ -236,13 +239,16 @@ JNIEXPORT jobject JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_loo
|
||||
(JNIEnv *env, jobject this_obj, jlong addr) {
|
||||
uintptr_t offset;
|
||||
const char* sym = NULL;
|
||||
jstring sym_string;
|
||||
|
||||
struct ps_prochandle* ph = get_proc_handle(env, this_obj);
|
||||
if (ph != NULL && ph->core != NULL) {
|
||||
sym = symbol_for_pc(ph, (uintptr_t) addr, &offset);
|
||||
if (sym == NULL) return 0;
|
||||
sym_string = (*env)->NewStringUTF(env, sym);
|
||||
CHECK_EXCEPTION_(0);
|
||||
return (*env)->CallObjectMethod(env, this_obj, createClosestSymbol_ID,
|
||||
(*env)->NewStringUTF(env, sym), (jlong)offset);
|
||||
sym_string, (jlong)offset);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -749,11 +755,14 @@ static void fillLoadObjects(JNIEnv* env, jobject this_obj, struct ps_prochandle*
|
||||
const char* name;
|
||||
jobject loadObject;
|
||||
jobject loadObjectList;
|
||||
jstring nameString;
|
||||
|
||||
base = get_lib_base(ph, i);
|
||||
name = get_lib_name(ph, i);
|
||||
nameString = (*env)->NewStringUTF(env, name);
|
||||
CHECK_EXCEPTION;
|
||||
loadObject = (*env)->CallObjectMethod(env, this_obj, createLoadObject_ID,
|
||||
(*env)->NewStringUTF(env, name), (jlong)0, (jlong)base);
|
||||
nameString, (jlong)0, (jlong)base);
|
||||
CHECK_EXCEPTION;
|
||||
loadObjectList = (*env)->GetObjectField(env, this_obj, loadObjectList_ID);
|
||||
CHECK_EXCEPTION;
|
||||
|
@ -101,7 +101,7 @@ CXXFLAGS = \
|
||||
# This is VERY important! The version define must only be supplied to vm_version.o
|
||||
# If not, ccache will not re-use the cache at all, since the version string might contain
|
||||
# a time and date.
|
||||
vm_version.o: CXXFLAGS += ${JRE_VERSION}
|
||||
CXXFLAGS/vm_version.o += ${JRE_VERSION}
|
||||
|
||||
CXXFLAGS/BYFILE = $(CXXFLAGS/$@)
|
||||
|
||||
|
@ -109,6 +109,8 @@
|
||||
|
||||
#define MAX_PATH (2 * K)
|
||||
|
||||
#define MAX_SECS 100000000
|
||||
|
||||
// for timer info max values which include all bits
|
||||
#define ALL_64_BITS CONST64(0xFFFFFFFFFFFFFFFF)
|
||||
|
||||
@ -2434,7 +2436,6 @@ class Semaphore : public StackObj {
|
||||
sem_t _semaphore;
|
||||
};
|
||||
|
||||
|
||||
Semaphore::Semaphore() {
|
||||
sem_init(&_semaphore, 0, 0);
|
||||
}
|
||||
@ -2456,8 +2457,22 @@ bool Semaphore::trywait() {
|
||||
}
|
||||
|
||||
bool Semaphore::timedwait(unsigned int sec, int nsec) {
|
||||
|
||||
struct timespec ts;
|
||||
unpackTime(&ts, false, (sec * NANOSECS_PER_SEC) + nsec);
|
||||
// Semaphore's are always associated with CLOCK_REALTIME
|
||||
os::Linux::clock_gettime(CLOCK_REALTIME, &ts);
|
||||
// see unpackTime for discussion on overflow checking
|
||||
if (sec >= MAX_SECS) {
|
||||
ts.tv_sec += MAX_SECS;
|
||||
ts.tv_nsec = 0;
|
||||
} else {
|
||||
ts.tv_sec += sec;
|
||||
ts.tv_nsec += nsec;
|
||||
if (ts.tv_nsec >= NANOSECS_PER_SEC) {
|
||||
ts.tv_nsec -= NANOSECS_PER_SEC;
|
||||
++ts.tv_sec; // note: this must be <= max_secs
|
||||
}
|
||||
}
|
||||
|
||||
while (1) {
|
||||
int result = sem_timedwait(&_semaphore, &ts);
|
||||
@ -5661,7 +5676,6 @@ void os::PlatformEvent::unpark() {
|
||||
* is no need to track notifications.
|
||||
*/
|
||||
|
||||
#define MAX_SECS 100000000
|
||||
/*
|
||||
* This code is common to linux and solaris and will be moved to a
|
||||
* common place in dolphin.
|
||||
|
@ -531,13 +531,16 @@ jint frame::interpreter_frame_expression_stack_size() const {
|
||||
// Number of elements on the interpreter expression stack
|
||||
// Callers should span by stackElementWords
|
||||
int element_size = Interpreter::stackElementWords;
|
||||
size_t stack_size = 0;
|
||||
if (frame::interpreter_frame_expression_stack_direction() < 0) {
|
||||
return (interpreter_frame_expression_stack() -
|
||||
interpreter_frame_tos_address() + 1)/element_size;
|
||||
stack_size = (interpreter_frame_expression_stack() -
|
||||
interpreter_frame_tos_address() + 1)/element_size;
|
||||
} else {
|
||||
return (interpreter_frame_tos_address() -
|
||||
interpreter_frame_expression_stack() + 1)/element_size;
|
||||
stack_size = (interpreter_frame_tos_address() -
|
||||
interpreter_frame_expression_stack() + 1)/element_size;
|
||||
}
|
||||
assert( stack_size <= (size_t)max_jint, "stack size too big");
|
||||
return ((jint)stack_size);
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user