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;
|