Rev 2913 | Rev 3013 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2913 | Rev 2919 | ||
---|---|---|---|
Line 413... | Line 413... | ||
413 | 413 | ||
414 | *buffer = arg_buffer; |
414 | *buffer = arg_buffer; |
415 | return 0; |
415 | return 0; |
416 | } |
416 | } |
417 | 417 | ||
418 | int udebug_regs_read(thread_t *t, void **buffer, size_t *n) |
418 | int udebug_regs_read(thread_t *t, void *buffer) |
419 | { |
419 | { |
420 | istate_t *state; |
420 | istate_t *state; |
421 | void *regs_buffer; |
- | |
422 | int rc; |
421 | int rc; |
423 | ipl_t ipl; |
422 | ipl_t ipl; |
424 | 423 | ||
425 | klog_printf("udebug_regs_read()"); |
424 | klog_printf("udebug_regs_read()"); |
426 | 425 | ||
427 | /* Prepare a buffer to hold the registers */ |
- | |
428 | regs_buffer = malloc(sizeof(istate_t), 0); |
- | |
429 | - | ||
430 | ipl = interrupts_disable(); |
426 | ipl = interrupts_disable(); |
431 | 427 | ||
432 | /* On success, this will lock t->debug_lock */ |
428 | /* On success, this will lock t->debug_lock */ |
433 | rc = _thread_op_begin(t, false); |
429 | rc = _thread_op_begin(t, false); |
434 | if (rc != EOK) { |
430 | if (rc != EOK) { |
Line 443... | Line 439... | ||
443 | klog_printf("udebug_regs_read() - istate not available"); |
439 | klog_printf("udebug_regs_read() - istate not available"); |
444 | return EBUSY; |
440 | return EBUSY; |
445 | } |
441 | } |
446 | 442 | ||
447 | /* Copy to the allocated buffer */ |
443 | /* Copy to the allocated buffer */ |
448 | memcpy(regs_buffer, state, sizeof(istate_t)); |
444 | memcpy(buffer, state, sizeof(istate_t)); |
449 | 445 | ||
450 | _thread_op_end(t); |
446 | _thread_op_end(t); |
451 | interrupts_restore(ipl); |
447 | interrupts_restore(ipl); |
452 | 448 | ||
453 | *buffer = regs_buffer; |
- | |
454 | *n = sizeof(istate_t); |
- | |
455 | - | ||
456 | return 0; |
449 | return 0; |
457 | } |
450 | } |
458 | 451 | ||
459 | int udebug_regs_write(thread_t *t, void *buffer) |
452 | int udebug_regs_write(thread_t *t, void *buffer) |
460 | { |
453 | { |
Line 469... | Line 462... | ||
469 | ipl = interrupts_disable(); |
462 | ipl = interrupts_disable(); |
470 | 463 | ||
471 | /* On success, this will lock t->debug_lock */ |
464 | /* On success, this will lock t->debug_lock */ |
472 | rc = _thread_op_begin(t, false); |
465 | rc = _thread_op_begin(t, false); |
473 | if (rc != EOK) { |
466 | if (rc != EOK) { |
- | 467 | klog_printf("error locking thread"); |
|
474 | interrupts_restore(ipl); |
468 | interrupts_restore(ipl); |
475 | return rc; |
469 | return rc; |
476 | } |
470 | } |
477 | 471 | ||
478 | state = t->uspace_state; |
472 | state = t->uspace_state; |
Line 482... | Line 476... | ||
482 | klog_printf("udebug_regs_write() - istate not available"); |
476 | klog_printf("udebug_regs_write() - istate not available"); |
483 | 477 | ||
484 | return EBUSY; |
478 | return EBUSY; |
485 | } |
479 | } |
486 | 480 | ||
487 | memcpy(t->uspace_state, buffer, sizeof(t->uspace_state)); |
481 | memcpy(t->uspace_state, buffer, sizeof(istate_t)); |
488 | 482 | ||
489 | _thread_op_end(t); |
483 | _thread_op_end(t); |
490 | interrupts_restore(ipl); |
484 | interrupts_restore(ipl); |
491 | 485 | ||
492 | return 0; |
486 | return 0; |