< prev index next >

src/jdk.hotspot.agent/linux/native/libsaproc/LinuxDebuggerLocal.c

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. --- 1,7 ---- /* ! * Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation.
*** 64,73 **** --- 64,75 ---- static jmethodID createClosestSymbol_ID = 0; static jmethodID createLoadObject_ID = 0; static jmethodID getThreadForThreadId_ID = 0; static jmethodID listAdd_ID = 0; + static char *saaltroot = NULL; + #define CHECK_EXCEPTION_(value) if ((*env)->ExceptionOccurred(env)) { return value; } #define CHECK_EXCEPTION if ((*env)->ExceptionOccurred(env)) { return;} #define THROW_NEW_DEBUGGER_EXCEPTION_(str, value) { throw_new_debugger_exception(env, str); return value; } #define THROW_NEW_DEBUGGER_EXCEPTION(str) { throw_new_debugger_exception(env, str); return;}
*** 209,233 **** } /* * Class: sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal * Method: attach0 ! * Signature: (I)V */ ! JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_attach0__I ! (JNIEnv *env, jobject this_obj, jint jpid) { // For bitness checking, locate binary at /proc/jpid/exe char buf[PATH_MAX]; snprintf((char *) &buf, PATH_MAX, "/proc/%d/exe", jpid); verifyBitness(env, (char *) &buf); CHECK_EXCEPTION; char err_buf[200]; struct ps_prochandle* ph; ! if ( (ph = Pgrab(jpid, err_buf, sizeof(err_buf))) == NULL) { char msg[230]; snprintf(msg, sizeof(msg), "Can't attach to the process: %s", err_buf); THROW_NEW_DEBUGGER_EXCEPTION(msg); } (*env)->SetLongField(env, this_obj, p_ps_prochandle_ID, (jlong)(intptr_t)ph); --- 211,258 ---- } /* * Class: sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal + * Method: setSAAltRoot0 + * Signature: (Ljava/lang/String;)V + */ + JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_setSAAltRoot0 + (JNIEnv *env, jobject this_obj, jstring altroot) { + if (saaltroot != NULL) { + free(saaltroot); + } + const char *path = (*env)->GetStringUTFChars(env, altroot, JNI_FALSE); + /* + * `saaltroot` is used for putenv(). + * So we need to keep this memory. + */ + static const char *PREFIX = "SA_ALTROOT="; + size_t len = strlen(PREFIX) + strlen(path) + 1; + saaltroot = (char *)malloc(len); + snprintf(saaltroot, len, "%s%s", PREFIX, path); + putenv(saaltroot); + (*env)->ReleaseStringUTFChars(env, altroot, path); + } + + /* + * Class: sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal * Method: attach0 ! * Signature: (IZ)V */ ! JNIEXPORT void JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_attach0__IZ ! (JNIEnv *env, jobject this_obj, jint jpid, jboolean is_in_container) { // For bitness checking, locate binary at /proc/jpid/exe char buf[PATH_MAX]; snprintf((char *) &buf, PATH_MAX, "/proc/%d/exe", jpid); verifyBitness(env, (char *) &buf); CHECK_EXCEPTION; char err_buf[200]; struct ps_prochandle* ph; ! if ( (ph = Pgrab(jpid, err_buf, sizeof(err_buf), is_in_container)) == NULL) { char msg[230]; snprintf(msg, sizeof(msg), "Can't attach to the process: %s", err_buf); THROW_NEW_DEBUGGER_EXCEPTION(msg); } (*env)->SetLongField(env, this_obj, p_ps_prochandle_ID, (jlong)(intptr_t)ph);
*** 274,283 **** --- 299,312 ---- (JNIEnv *env, jobject this_obj) { struct ps_prochandle* ph = get_proc_handle(env, this_obj); if (ph != NULL) { Prelease(ph); } + if (saaltroot != NULL) { + free(saaltroot); + saaltroot = NULL; + } } /* * Class: sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal * Method: lookupByName0
< prev index next >