324 * Signature: (JJ)Lsun/jvm/hotspot/debugger/ReadResult;
325 */
326 JNIEXPORT jbyteArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_readBytesFromProcess0
327 (JNIEnv *env, jobject this_obj, jlong addr, jlong numBytes) {
328
329 jboolean isCopy;
330 jbyteArray array;
331 jbyte *bufPtr;
332 ps_err_e err;
333
334 array = (*env)->NewByteArray(env, numBytes);
335 CHECK_EXCEPTION_(0);
336 bufPtr = (*env)->GetByteArrayElements(env, array, &isCopy);
337 CHECK_EXCEPTION_(0);
338
339 err = ps_pdread(get_proc_handle(env, this_obj), (psaddr_t) (uintptr_t)addr, bufPtr, numBytes);
340 (*env)->ReleaseByteArrayElements(env, array, bufPtr, 0);
341 return (err == PS_OK)? array : 0;
342 }
343
344 #if defined(i386) || defined(amd64) || defined(sparc) || defined(sparcv9)
345 JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getThreadIntegerRegisterSet0
346 (JNIEnv *env, jobject this_obj, jint lwp_id) {
347
348 struct user_regs_struct gregs;
349 jboolean isCopy;
350 jlongArray array;
351 jlong *regs;
352 int i;
353
354 struct ps_prochandle* ph = get_proc_handle(env, this_obj);
355 if (get_lwp_regs(ph, lwp_id, &gregs) != true) {
356 THROW_NEW_DEBUGGER_EXCEPTION_("get_thread_regs failed for a lwp", 0);
357 }
358
359 #undef NPRGREG
360 #ifdef i386
361 #define NPRGREG sun_jvm_hotspot_debugger_x86_X86ThreadContext_NPRGREG
362 #endif
363 #ifdef amd64
364 #define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
365 #endif
366 #if defined(sparc) || defined(sparcv9)
367 #define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
368 #endif
369
370 array = (*env)->NewLongArray(env, NPRGREG);
371 CHECK_EXCEPTION_(0);
372 regs = (*env)->GetLongArrayElements(env, array, &isCopy);
373
374 #undef REG_INDEX
375
376 #ifdef i386
377 #define REG_INDEX(reg) sun_jvm_hotspot_debugger_x86_X86ThreadContext_##reg
378
379 regs[REG_INDEX(GS)] = (uintptr_t) gregs.xgs;
380 regs[REG_INDEX(FS)] = (uintptr_t) gregs.xfs;
381 regs[REG_INDEX(ES)] = (uintptr_t) gregs.xes;
382 regs[REG_INDEX(DS)] = (uintptr_t) gregs.xds;
383 regs[REG_INDEX(EDI)] = (uintptr_t) gregs.edi;
384 regs[REG_INDEX(ESI)] = (uintptr_t) gregs.esi;
385 regs[REG_INDEX(FP)] = (uintptr_t) gregs.ebp;
440 regs[REG_INDEX(R_nPC)] = gregs.npc;
441 regs[REG_INDEX(R_Y)] = gregs.y;
442 #endif
443 regs[REG_INDEX(R_G0)] = 0 ;
444 regs[REG_INDEX(R_G1)] = gregs.u_regs[0];
445 regs[REG_INDEX(R_G2)] = gregs.u_regs[1];
446 regs[REG_INDEX(R_G3)] = gregs.u_regs[2];
447 regs[REG_INDEX(R_G4)] = gregs.u_regs[3];
448 regs[REG_INDEX(R_G5)] = gregs.u_regs[4];
449 regs[REG_INDEX(R_G6)] = gregs.u_regs[5];
450 regs[REG_INDEX(R_G7)] = gregs.u_regs[6];
451 regs[REG_INDEX(R_O0)] = gregs.u_regs[7];
452 regs[REG_INDEX(R_O1)] = gregs.u_regs[8];
453 regs[REG_INDEX(R_O2)] = gregs.u_regs[ 9];
454 regs[REG_INDEX(R_O3)] = gregs.u_regs[10];
455 regs[REG_INDEX(R_O4)] = gregs.u_regs[11];
456 regs[REG_INDEX(R_O5)] = gregs.u_regs[12];
457 regs[REG_INDEX(R_O6)] = gregs.u_regs[13];
458 regs[REG_INDEX(R_O7)] = gregs.u_regs[14];
459 #endif /* sparc */
460
461
462 (*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
463 return array;
464 }
465 #endif
|
324 * Signature: (JJ)Lsun/jvm/hotspot/debugger/ReadResult;
325 */
326 JNIEXPORT jbyteArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_readBytesFromProcess0
327 (JNIEnv *env, jobject this_obj, jlong addr, jlong numBytes) {
328
329 jboolean isCopy;
330 jbyteArray array;
331 jbyte *bufPtr;
332 ps_err_e err;
333
334 array = (*env)->NewByteArray(env, numBytes);
335 CHECK_EXCEPTION_(0);
336 bufPtr = (*env)->GetByteArrayElements(env, array, &isCopy);
337 CHECK_EXCEPTION_(0);
338
339 err = ps_pdread(get_proc_handle(env, this_obj), (psaddr_t) (uintptr_t)addr, bufPtr, numBytes);
340 (*env)->ReleaseByteArrayElements(env, array, bufPtr, 0);
341 return (err == PS_OK)? array : 0;
342 }
343
344 #if defined(i386) || defined(amd64) || defined(sparc) || defined(sparcv9) || defined(aarch64)
345 JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getThreadIntegerRegisterSet0
346 (JNIEnv *env, jobject this_obj, jint lwp_id) {
347
348 struct user_regs_struct gregs;
349 jboolean isCopy;
350 jlongArray array;
351 jlong *regs;
352 int i;
353
354 struct ps_prochandle* ph = get_proc_handle(env, this_obj);
355 if (get_lwp_regs(ph, lwp_id, &gregs) != true) {
356 THROW_NEW_DEBUGGER_EXCEPTION_("get_thread_regs failed for a lwp", 0);
357 }
358
359 #undef NPRGREG
360 #ifdef i386
361 #define NPRGREG sun_jvm_hotspot_debugger_x86_X86ThreadContext_NPRGREG
362 #endif
363 #ifdef amd64
364 #define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
365 #endif
366 #ifdef aarch64
367 #define NPRGREG 32
368 #endif
369 #if defined(sparc) || defined(sparcv9)
370 #define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
371 #endif
372
373 array = (*env)->NewLongArray(env, NPRGREG);
374 CHECK_EXCEPTION_(0);
375 regs = (*env)->GetLongArrayElements(env, array, &isCopy);
376
377 #undef REG_INDEX
378
379 #ifdef i386
380 #define REG_INDEX(reg) sun_jvm_hotspot_debugger_x86_X86ThreadContext_##reg
381
382 regs[REG_INDEX(GS)] = (uintptr_t) gregs.xgs;
383 regs[REG_INDEX(FS)] = (uintptr_t) gregs.xfs;
384 regs[REG_INDEX(ES)] = (uintptr_t) gregs.xes;
385 regs[REG_INDEX(DS)] = (uintptr_t) gregs.xds;
386 regs[REG_INDEX(EDI)] = (uintptr_t) gregs.edi;
387 regs[REG_INDEX(ESI)] = (uintptr_t) gregs.esi;
388 regs[REG_INDEX(FP)] = (uintptr_t) gregs.ebp;
443 regs[REG_INDEX(R_nPC)] = gregs.npc;
444 regs[REG_INDEX(R_Y)] = gregs.y;
445 #endif
446 regs[REG_INDEX(R_G0)] = 0 ;
447 regs[REG_INDEX(R_G1)] = gregs.u_regs[0];
448 regs[REG_INDEX(R_G2)] = gregs.u_regs[1];
449 regs[REG_INDEX(R_G3)] = gregs.u_regs[2];
450 regs[REG_INDEX(R_G4)] = gregs.u_regs[3];
451 regs[REG_INDEX(R_G5)] = gregs.u_regs[4];
452 regs[REG_INDEX(R_G6)] = gregs.u_regs[5];
453 regs[REG_INDEX(R_G7)] = gregs.u_regs[6];
454 regs[REG_INDEX(R_O0)] = gregs.u_regs[7];
455 regs[REG_INDEX(R_O1)] = gregs.u_regs[8];
456 regs[REG_INDEX(R_O2)] = gregs.u_regs[ 9];
457 regs[REG_INDEX(R_O3)] = gregs.u_regs[10];
458 regs[REG_INDEX(R_O4)] = gregs.u_regs[11];
459 regs[REG_INDEX(R_O5)] = gregs.u_regs[12];
460 regs[REG_INDEX(R_O6)] = gregs.u_regs[13];
461 regs[REG_INDEX(R_O7)] = gregs.u_regs[14];
462 #endif /* sparc */
463
464 #if defined(aarch64)
465
466 #define REG_INDEX(reg) sun_jvm_hotspot_debugger_aarch64_AARCH64ThreadContext_##reg
467
468 #endif /* aarch64 */
469
470
471 (*env)->ReleaseLongArrayElements(env, array, regs, JNI_COMMIT);
472 return array;
473 }
474 #endif
|