agent/src/os/linux/LinuxDebuggerLocal.c

Print this page
rev 7258 : 8064611: AARCH64: Changes to HotSpot shared code
Summary: Everything except cpu/ and os_cpu/.
Reviewed-by: kvn


 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