8257988: Remove JNF dependency from libsaproc/MacosxDebuggerLocal.m

Backport-of: 2be60e37e0e433141b2e3d3e32f8e638a4888e3a
This commit is contained in:
Vladimir Kempik 2021-04-02 11:54:28 +00:00
parent 4c917209bd
commit 5bfa1547e6
2 changed files with 43 additions and 10 deletions

View File

@ -67,7 +67,7 @@ $(eval $(call SetupJdkLibrary, BUILD_LIBSA, \
EXTRA_SRC := $(LIBSA_EXTRA_SRC), \
LDFLAGS := $(LDFLAGS_JDKLIB), \
LIBS_linux := $(LIBDL), \
LIBS_macosx := -framework Foundation -framework JavaNativeFoundation \
LIBS_macosx := -framework Foundation \
-framework JavaRuntimeSupport -framework Security -framework CoreFoundation, \
LIBS_windows := dbgeng.lib, \
))

View File

@ -24,8 +24,6 @@
#include <objc/objc-runtime.h>
#import <Foundation/Foundation.h>
#import <JavaNativeFoundation/JavaNativeFoundation.h>
#import <JavaRuntimeSupport/JavaRuntimeSupport.h>
#include <jni.h>
@ -260,6 +258,39 @@ jlong lookupByNameIncore(
return addr;
}
/* Create a pool and initiate a try block to catch any exception */
#define JNI_COCOA_ENTER(env) \
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; \
@try {
/* Don't allow NSExceptions to escape to Java.
* If there is a Java exception that has been thrown that should escape.
* And ensure we drain the auto-release pool.
*/
#define JNI_COCOA_EXIT(env) \
} \
@catch (NSException *e) { \
NSLog(@"%@", [e callStackSymbols]); \
} \
@finally { \
[pool drain]; \
};
static NSString* JavaStringToNSString(JNIEnv *env, jstring jstr) {
if (jstr == NULL) {
return NULL;
}
jsize len = (*env)->GetStringLength(env, jstr);
const jchar *chars = (*env)->GetStringChars(env, jstr, NULL);
if (chars == NULL) {
return NULL;
}
NSString *result = [NSString stringWithCharacters:(UniChar *)chars length:len];
(*env)->ReleaseStringChars(env, jstr, chars);
return result;
}
/*
* Class: sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal
* Method: lookupByName0
@ -277,8 +308,9 @@ Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_lookupByName0(
jlong address = 0;
JNF_COCOA_ENTER(env);
NSString *symbolNameString = JNFJavaToNSString(env, symbolName);
JNI_COCOA_ENTER(env);
NSString *symbolNameString = JavaStringToNSString(env, symbolName);
print_debug("lookupInProcess called for %s\n", [symbolNameString UTF8String]);
@ -289,7 +321,7 @@ JNF_COCOA_ENTER(env);
}
print_debug("address of symbol %s = %llx\n", [symbolNameString UTF8String], address);
JNF_COCOA_EXIT(env);
JNI_COCOA_EXIT(env);
return address;
}
@ -806,7 +838,7 @@ Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_attach0__I(
{
print_debug("attach0 called for jpid=%d\n", (int)jpid);
JNF_COCOA_ENTER(env);
JNI_COCOA_ENTER(env);
kern_return_t result;
task_t gTask = 0;
@ -920,7 +952,7 @@ JNF_COCOA_ENTER(env);
THROW_NEW_DEBUGGER_EXCEPTION("Can't attach symbolicator to the process");
}
JNF_COCOA_EXIT(env);
JNI_COCOA_EXIT(env);
}
/** For core file,
@ -1014,7 +1046,8 @@ Java_sun_jvm_hotspot_debugger_bsd_BsdDebuggerLocal_detach0(
Prelease(ph);
return;
}
JNF_COCOA_ENTER(env);
JNI_COCOA_ENTER(env);
task_t gTask = getTask(env, this_obj);
kern_return_t k_res = 0;
@ -1065,5 +1098,5 @@ JNF_COCOA_ENTER(env);
detach_cleanup(gTask, env, this_obj, false);
JNF_COCOA_EXIT(env);
JNI_COCOA_EXIT(env);
}