Mercurial > hg > truffle
comparison agent/src/os/bsd/MacosxDebuggerLocal.m @ 18041:52b4284cb496
Merge with jdk8u20-b26
author | Gilles Duboscq <duboscq@ssw.jku.at> |
---|---|
date | Wed, 15 Oct 2014 16:02:50 +0200 |
parents | f2294a37e723 |
children |
comparison
equal
deleted
inserted
replaced
17606:45d7b2c7029d | 18041:52b4284cb496 |
---|---|
93 #define CHECK_EXCEPTION_CLEAR if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); } | 93 #define CHECK_EXCEPTION_CLEAR if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); } |
94 #define CHECK_EXCEPTION_CLEAR_VOID if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return; } | 94 #define CHECK_EXCEPTION_CLEAR_VOID if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return; } |
95 #define CHECK_EXCEPTION_CLEAR_(value) if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return value; } | 95 #define CHECK_EXCEPTION_CLEAR_(value) if ((*env)->ExceptionOccurred(env)) { (*env)->ExceptionClear(env); return value; } |
96 | 96 |
97 static void throw_new_debugger_exception(JNIEnv* env, const char* errMsg) { | 97 static void throw_new_debugger_exception(JNIEnv* env, const char* errMsg) { |
98 (*env)->ThrowNew(env, (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"), errMsg); | 98 jclass exceptionClass = (*env)->FindClass(env, "sun/jvm/hotspot/debugger/DebuggerException"); |
99 CHECK_EXCEPTION; | |
100 (*env)->ThrowNew(env, exceptionClass, errMsg); | |
99 } | 101 } |
100 | 102 |
101 static struct ps_prochandle* get_proc_handle(JNIEnv* env, jobject this_obj) { | 103 static struct ps_prochandle* get_proc_handle(JNIEnv* env, jobject this_obj) { |
102 jlong ptr = (*env)->GetLongField(env, this_obj, p_ps_prochandle_ID); | 104 jlong ptr = (*env)->GetLongField(env, this_obj, p_ps_prochandle_ID); |
103 return (struct ps_prochandle*)(intptr_t)ptr; | 105 return (struct ps_prochandle*)(intptr_t)ptr; |
127 * Signature: ()V | 129 * Signature: ()V |
128 */ | 130 */ |
129 JNIEXPORT void JNICALL | 131 JNIEXPORT void JNICALL |
130 Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_init0(JNIEnv *env, jclass cls) { | 132 Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_init0(JNIEnv *env, jclass cls) { |
131 symbolicatorID = (*env)->GetFieldID(env, cls, "symbolicator", "J"); | 133 symbolicatorID = (*env)->GetFieldID(env, cls, "symbolicator", "J"); |
134 CHECK_EXCEPTION; | |
132 taskID = (*env)->GetFieldID(env, cls, "task", "J"); | 135 taskID = (*env)->GetFieldID(env, cls, "task", "J"); |
133 CHECK_EXCEPTION; | 136 CHECK_EXCEPTION; |
134 | 137 |
135 // for core file | 138 // for core file |
136 p_ps_prochandle_ID = (*env)->GetFieldID(env, cls, "p_ps_prochandle", "J"); | 139 p_ps_prochandle_ID = (*env)->GetFieldID(env, cls, "p_ps_prochandle", "J"); |
234 */ | 237 */ |
235 JNIEXPORT jobject JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByAddress0 | 238 JNIEXPORT jobject JNICALL Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByAddress0 |
236 (JNIEnv *env, jobject this_obj, jlong addr) { | 239 (JNIEnv *env, jobject this_obj, jlong addr) { |
237 uintptr_t offset; | 240 uintptr_t offset; |
238 const char* sym = NULL; | 241 const char* sym = NULL; |
242 jstring sym_string; | |
239 | 243 |
240 struct ps_prochandle* ph = get_proc_handle(env, this_obj); | 244 struct ps_prochandle* ph = get_proc_handle(env, this_obj); |
241 if (ph != NULL && ph->core != NULL) { | 245 if (ph != NULL && ph->core != NULL) { |
242 sym = symbol_for_pc(ph, (uintptr_t) addr, &offset); | 246 sym = symbol_for_pc(ph, (uintptr_t) addr, &offset); |
243 if (sym == NULL) return 0; | 247 if (sym == NULL) return 0; |
248 sym_string = (*env)->NewStringUTF(env, sym); | |
249 CHECK_EXCEPTION_(0); | |
244 return (*env)->CallObjectMethod(env, this_obj, createClosestSymbol_ID, | 250 return (*env)->CallObjectMethod(env, this_obj, createClosestSymbol_ID, |
245 (*env)->NewStringUTF(env, sym), (jlong)offset); | 251 sym_string, (jlong)offset); |
246 } | 252 } |
247 return 0; | 253 return 0; |
248 } | 254 } |
249 | 255 |
250 /** called from Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_readBytesFromProcess0 */ | 256 /** called from Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_readBytesFromProcess0 */ |
747 for (i = 0; i < n; i++) { | 753 for (i = 0; i < n; i++) { |
748 uintptr_t base; | 754 uintptr_t base; |
749 const char* name; | 755 const char* name; |
750 jobject loadObject; | 756 jobject loadObject; |
751 jobject loadObjectList; | 757 jobject loadObjectList; |
758 jstring nameString; | |
752 | 759 |
753 base = get_lib_base(ph, i); | 760 base = get_lib_base(ph, i); |
754 name = get_lib_name(ph, i); | 761 name = get_lib_name(ph, i); |
762 nameString = (*env)->NewStringUTF(env, name); | |
763 CHECK_EXCEPTION; | |
755 loadObject = (*env)->CallObjectMethod(env, this_obj, createLoadObject_ID, | 764 loadObject = (*env)->CallObjectMethod(env, this_obj, createLoadObject_ID, |
756 (*env)->NewStringUTF(env, name), (jlong)0, (jlong)base); | 765 nameString, (jlong)0, (jlong)base); |
757 CHECK_EXCEPTION; | 766 CHECK_EXCEPTION; |
758 loadObjectList = (*env)->GetObjectField(env, this_obj, loadObjectList_ID); | 767 loadObjectList = (*env)->GetObjectField(env, this_obj, loadObjectList_ID); |
759 CHECK_EXCEPTION; | 768 CHECK_EXCEPTION; |
760 (*env)->CallBooleanMethod(env, loadObjectList, listAdd_ID, loadObject); | 769 (*env)->CallBooleanMethod(env, loadObjectList, listAdd_ID, loadObject); |
761 CHECK_EXCEPTION; | 770 CHECK_EXCEPTION; |