Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

8257988: Remove JNF dependency from libsaproc/MacosxDebuggerLocal.m #14

Closed
Changes from all commits
Commits
File filter
Filter file types
Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.

Always

Just for now

@@ -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, \
))
@@ -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 @@ jlong lookupByNameIncore(

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 @@ jlong lookupByNameIncore(
}

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 @@ static bool wait_for_exception() {
{
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 @@ static bool wait_for_exception() {
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 @@ static void detach_cleanup(task_t gTask, JNIEnv *env, jobject this_obj, bool thr
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 @@ static void detach_cleanup(task_t gTask, JNIEnv *env, jobject this_obj, bool thr

detach_cleanup(gTask, env, this_obj, false);

JNF_COCOA_EXIT(env);
JNI_COCOA_EXIT(env);
}
ProTip! Use n and p to navigate between commits in a pull request.