agent/src/os/linux/LinuxDebuggerLocal.c
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File 6518907 Sdiff agent/src/os/linux

agent/src/os/linux/LinuxDebuggerLocal.c

Print this page




 263  * Signature: (JJ)Lsun/jvm/hotspot/debugger/ReadResult;
 264  */
 265 JNIEXPORT jbyteArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_readBytesFromProcess0
 266   (JNIEnv *env, jobject this_obj, jlong addr, jlong numBytes) {
 267 
 268   jboolean isCopy;
 269   jbyteArray array;
 270   jbyte *bufPtr;
 271   ps_err_e err;
 272 
 273   array = (*env)->NewByteArray(env, numBytes);
 274   CHECK_EXCEPTION_(0);
 275   bufPtr = (*env)->GetByteArrayElements(env, array, &isCopy);
 276   CHECK_EXCEPTION_(0);
 277 
 278   err = ps_pdread(get_proc_handle(env, this_obj), (psaddr_t) (uintptr_t)addr, bufPtr, numBytes);
 279   (*env)->ReleaseByteArrayElements(env, array, bufPtr, 0);
 280   return (err == PS_OK)? array : 0;
 281 }
 282 
 283 #if defined(i386) || defined(ia64) || defined(amd64) || defined(sparc) || defined(sparcv9)
 284 JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getThreadIntegerRegisterSet0
 285   (JNIEnv *env, jobject this_obj, jint lwp_id) {
 286 
 287   struct user_regs_struct gregs;
 288   jboolean isCopy;
 289   jlongArray array;
 290   jlong *regs;
 291   int i;
 292 
 293   struct ps_prochandle* ph = get_proc_handle(env, this_obj);
 294   if (get_lwp_regs(ph, lwp_id, &gregs) != true) {
 295      THROW_NEW_DEBUGGER_EXCEPTION_("get_thread_regs failed for a lwp", 0);
 296   }
 297 
 298 #undef NPRGREG
 299 #ifdef i386
 300 #define NPRGREG sun_jvm_hotspot_debugger_x86_X86ThreadContext_NPRGREG
 301 #endif
 302 #ifdef ia64
 303 #define NPRGREG IA64_REG_COUNT
 304 #endif
 305 #ifdef amd64
 306 #define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
 307 #endif
 308 #if defined(sparc) || defined(sparcv9)
 309 #define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
 310 #endif
 311 
 312   array = (*env)->NewLongArray(env, NPRGREG);
 313   CHECK_EXCEPTION_(0);
 314   regs = (*env)->GetLongArrayElements(env, array, &isCopy);
 315 
 316 #undef REG_INDEX
 317 
 318 #ifdef i386
 319 #define REG_INDEX(reg) sun_jvm_hotspot_debugger_x86_X86ThreadContext_##reg
 320 
 321   regs[REG_INDEX(GS)]  = (uintptr_t) gregs.xgs;
 322   regs[REG_INDEX(FS)]  = (uintptr_t) gregs.xfs;
 323   regs[REG_INDEX(ES)]  = (uintptr_t) gregs.xes;
 324   regs[REG_INDEX(DS)]  = (uintptr_t) gregs.xds;
 325   regs[REG_INDEX(EDI)] = (uintptr_t) gregs.edi;
 326   regs[REG_INDEX(ESI)] = (uintptr_t) gregs.esi;
 327   regs[REG_INDEX(FP)] = (uintptr_t) gregs.ebp;
 328   regs[REG_INDEX(SP)] = (uintptr_t) gregs.esp;
 329   regs[REG_INDEX(EBX)] = (uintptr_t) gregs.ebx;
 330   regs[REG_INDEX(EDX)] = (uintptr_t) gregs.edx;
 331   regs[REG_INDEX(ECX)] = (uintptr_t) gregs.ecx;
 332   regs[REG_INDEX(EAX)] = (uintptr_t) gregs.eax;
 333   regs[REG_INDEX(PC)] = (uintptr_t) gregs.eip;
 334   regs[REG_INDEX(CS)]  = (uintptr_t) gregs.xcs;
 335   regs[REG_INDEX(SS)]  = (uintptr_t) gregs.xss;
 336 
 337 #endif /* i386 */
 338 
 339 #if ia64
 340   regs = (*env)->GetLongArrayElements(env, array, &isCopy);
 341   for (i = 0; i < NPRGREG; i++ ) {
 342     regs[i] = 0xDEADDEAD;
 343   }
 344 #endif /* ia64 */
 345 
 346 #ifdef amd64
 347 #define REG_INDEX(reg) sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_##reg
 348 
 349   regs[REG_INDEX(R15)] = gregs.r15;
 350   regs[REG_INDEX(R14)] = gregs.r14;
 351   regs[REG_INDEX(R13)] = gregs.r13;
 352   regs[REG_INDEX(R12)] = gregs.r12;
 353   regs[REG_INDEX(RBP)] = gregs.rbp;
 354   regs[REG_INDEX(RBX)] = gregs.rbx;
 355   regs[REG_INDEX(R11)] = gregs.r11;
 356   regs[REG_INDEX(R10)] = gregs.r10;
 357   regs[REG_INDEX(R9)] = gregs.r9;
 358   regs[REG_INDEX(R8)] = gregs.r8;
 359   regs[REG_INDEX(RAX)] = gregs.rax;
 360   regs[REG_INDEX(RCX)] = gregs.rcx;
 361   regs[REG_INDEX(RDX)] = gregs.rdx;
 362   regs[REG_INDEX(RSI)] = gregs.rsi;
 363   regs[REG_INDEX(RDI)] = gregs.rdi;
 364   regs[REG_INDEX(RIP)] = gregs.rip;
 365   regs[REG_INDEX(CS)] = gregs.cs;




 263  * Signature: (JJ)Lsun/jvm/hotspot/debugger/ReadResult;
 264  */
 265 JNIEXPORT jbyteArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_readBytesFromProcess0
 266   (JNIEnv *env, jobject this_obj, jlong addr, jlong numBytes) {
 267 
 268   jboolean isCopy;
 269   jbyteArray array;
 270   jbyte *bufPtr;
 271   ps_err_e err;
 272 
 273   array = (*env)->NewByteArray(env, numBytes);
 274   CHECK_EXCEPTION_(0);
 275   bufPtr = (*env)->GetByteArrayElements(env, array, &isCopy);
 276   CHECK_EXCEPTION_(0);
 277 
 278   err = ps_pdread(get_proc_handle(env, this_obj), (psaddr_t) (uintptr_t)addr, bufPtr, numBytes);
 279   (*env)->ReleaseByteArrayElements(env, array, bufPtr, 0);
 280   return (err == PS_OK)? array : 0;
 281 }
 282 
 283 #if defined(i386) || defined(amd64) || defined(sparc) || defined(sparcv9)
 284 JNIEXPORT jlongArray JNICALL Java_sun_jvm_hotspot_debugger_linux_LinuxDebuggerLocal_getThreadIntegerRegisterSet0
 285   (JNIEnv *env, jobject this_obj, jint lwp_id) {
 286 
 287   struct user_regs_struct gregs;
 288   jboolean isCopy;
 289   jlongArray array;
 290   jlong *regs;
 291   int i;
 292 
 293   struct ps_prochandle* ph = get_proc_handle(env, this_obj);
 294   if (get_lwp_regs(ph, lwp_id, &gregs) != true) {
 295      THROW_NEW_DEBUGGER_EXCEPTION_("get_thread_regs failed for a lwp", 0);
 296   }
 297 
 298 #undef NPRGREG
 299 #ifdef i386
 300 #define NPRGREG sun_jvm_hotspot_debugger_x86_X86ThreadContext_NPRGREG
 301 #endif



 302 #ifdef amd64
 303 #define NPRGREG sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_NPRGREG
 304 #endif
 305 #if defined(sparc) || defined(sparcv9)
 306 #define NPRGREG sun_jvm_hotspot_debugger_sparc_SPARCThreadContext_NPRGREG
 307 #endif
 308 
 309   array = (*env)->NewLongArray(env, NPRGREG);
 310   CHECK_EXCEPTION_(0);
 311   regs = (*env)->GetLongArrayElements(env, array, &isCopy);
 312 
 313 #undef REG_INDEX
 314 
 315 #ifdef i386
 316 #define REG_INDEX(reg) sun_jvm_hotspot_debugger_x86_X86ThreadContext_##reg
 317 
 318   regs[REG_INDEX(GS)]  = (uintptr_t) gregs.xgs;
 319   regs[REG_INDEX(FS)]  = (uintptr_t) gregs.xfs;
 320   regs[REG_INDEX(ES)]  = (uintptr_t) gregs.xes;
 321   regs[REG_INDEX(DS)]  = (uintptr_t) gregs.xds;
 322   regs[REG_INDEX(EDI)] = (uintptr_t) gregs.edi;
 323   regs[REG_INDEX(ESI)] = (uintptr_t) gregs.esi;
 324   regs[REG_INDEX(FP)] = (uintptr_t) gregs.ebp;
 325   regs[REG_INDEX(SP)] = (uintptr_t) gregs.esp;
 326   regs[REG_INDEX(EBX)] = (uintptr_t) gregs.ebx;
 327   regs[REG_INDEX(EDX)] = (uintptr_t) gregs.edx;
 328   regs[REG_INDEX(ECX)] = (uintptr_t) gregs.ecx;
 329   regs[REG_INDEX(EAX)] = (uintptr_t) gregs.eax;
 330   regs[REG_INDEX(PC)] = (uintptr_t) gregs.eip;
 331   regs[REG_INDEX(CS)]  = (uintptr_t) gregs.xcs;
 332   regs[REG_INDEX(SS)]  = (uintptr_t) gregs.xss;
 333 
 334 #endif /* i386 */
 335 







 336 #ifdef amd64
 337 #define REG_INDEX(reg) sun_jvm_hotspot_debugger_amd64_AMD64ThreadContext_##reg
 338 
 339   regs[REG_INDEX(R15)] = gregs.r15;
 340   regs[REG_INDEX(R14)] = gregs.r14;
 341   regs[REG_INDEX(R13)] = gregs.r13;
 342   regs[REG_INDEX(R12)] = gregs.r12;
 343   regs[REG_INDEX(RBP)] = gregs.rbp;
 344   regs[REG_INDEX(RBX)] = gregs.rbx;
 345   regs[REG_INDEX(R11)] = gregs.r11;
 346   regs[REG_INDEX(R10)] = gregs.r10;
 347   regs[REG_INDEX(R9)] = gregs.r9;
 348   regs[REG_INDEX(R8)] = gregs.r8;
 349   regs[REG_INDEX(RAX)] = gregs.rax;
 350   regs[REG_INDEX(RCX)] = gregs.rcx;
 351   regs[REG_INDEX(RDX)] = gregs.rdx;
 352   regs[REG_INDEX(RSI)] = gregs.rsi;
 353   regs[REG_INDEX(RDI)] = gregs.rdi;
 354   regs[REG_INDEX(RIP)] = gregs.rip;
 355   regs[REG_INDEX(CS)] = gregs.cs;


agent/src/os/linux/LinuxDebuggerLocal.c
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File