Subversion Repositories HelenOS

Rev

Rev 2817 | Rev 2819 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2817 Rev 2818
Line 274... Line 274...
274
 
274
 
275
    klog_printf("debug_thread_read() done");
275
    klog_printf("debug_thread_read() done");
276
    return 1; /* actually need becksend with retval 0 */
276
    return 1; /* actually need becksend with retval 0 */
277
}
277
}
278
 
278
 
-
 
279
static int udebug_rp_mem_write(call_t *call, phone_t *phone)
-
 
280
{
-
 
281
    void *uspace_data;
-
 
282
    unative_t to_copy;
-
 
283
    int rc;
-
 
284
    void *buffer;
-
 
285
 
-
 
286
    klog_printf("udebug_rp_mem_write()");
-
 
287
    // FIXME: verify task/thread state
-
 
288
 
-
 
289
    uspace_data = (void *)IPC_GET_ARG2(call->data);
-
 
290
    to_copy = IPC_GET_ARG4(call->data);
-
 
291
 
-
 
292
    buffer = malloc(to_copy, 0); // ???
-
 
293
 
-
 
294
    rc = copy_from_uspace(buffer, uspace_data, to_copy);
-
 
295
    if (rc != 0) {
-
 
296
        klog_printf(" - copy failed");
-
 
297
        return rc;
-
 
298
    }
-
 
299
 
-
 
300
    call->buffer = buffer;
-
 
301
 
-
 
302
    klog_printf(" - done");
-
 
303
    return 1; /* actually need becksend with retval 0 */
-
 
304
}
-
 
305
 
-
 
306
 
279
int udebug_request_preprocess(call_t *call, phone_t *phone)
307
int udebug_request_preprocess(call_t *call, phone_t *phone)
280
{
308
{
281
    int rc;
309
    int rc;
282
 
310
 
283
    switch (IPC_GET_ARG1(call->data)) {
311
    switch (IPC_GET_ARG1(call->data)) {
Line 296... Line 324...
296
    case UDEBUG_M_REGS_WRITE:
324
    case UDEBUG_M_REGS_WRITE:
297
        rc = udebug_rp_regs_write(call, phone);
325
        rc = udebug_rp_regs_write(call, phone);
298
        return rc;
326
        return rc;
299
    case UDEBUG_M_THREAD_READ:
327
    case UDEBUG_M_THREAD_READ:
300
        rc = udebug_rp_thread_read(call, phone);
328
        rc = udebug_rp_thread_read(call, phone);
-
 
329
    case UDEBUG_M_MEM_WRITE:
-
 
330
        rc = udebug_rp_mem_write(call, phone);
301
        return rc;
331
        return rc;
302
    default:
332
    default:
303
        break;
333
        break;
304
    }
334
    }
305
 
335
 
Line 341... Line 371...
341
    call->buffer = buffer;
371
    call->buffer = buffer;
342
 
372
 
343
    ipc_answer(&TASK->kernel_box, call);
373
    ipc_answer(&TASK->kernel_box, call);
344
}
374
}
345
 
375
 
-
 
376
static void udebug_receive_mem_write(call_t *call)
-
 
377
{
-
 
378
    void *uspace_dst;
-
 
379
    unsigned size;
-
 
380
    void *buffer;
-
 
381
    int rc;
-
 
382
 
-
 
383
    klog_printf("udebug_receive_mem_write()");
-
 
384
    uspace_dst = (void *)IPC_GET_ARG3(call->data);
-
 
385
    size = IPC_GET_ARG4(call->data);
-
 
386
 
-
 
387
    buffer = call->buffer;
-
 
388
    klog_printf("dst=%u, size=%u", uspace_dst, size);
-
 
389
 
-
 
390
    /* NOTE: this is not strictly from a syscall... but that shouldn't
-
 
391
     * be a problem */
-
 
392
    rc = copy_to_uspace(uspace_dst, buffer, size);
-
 
393
    if (rc) {
-
 
394
        IPC_SET_RETVAL(call->data, rc);
-
 
395
        return;
-
 
396
    }
-
 
397
 
-
 
398
    IPC_SET_RETVAL(call->data, 0);
-
 
399
 
-
 
400
    free(call->buffer);
-
 
401
    call->buffer = NULL;
-
 
402
 
-
 
403
    ipc_answer(&TASK->kernel_box, call);
-
 
404
}
-
 
405
 
-
 
406
 
346
/**
407
/**
347
 * Handle a debug call received on the kernel answerbox.
408
 * Handle a debug call received on the kernel answerbox.
348
 *
409
 *
349
 * This is called by the kbox servicing thread.
410
 * This is called by the kbox servicing thread.
350
 */
411
 */
Line 356... Line 417...
356
 
417
 
357
    switch (debug_method) {
418
    switch (debug_method) {
358
    case UDEBUG_M_MEM_READ:
419
    case UDEBUG_M_MEM_READ:
359
        udebug_receive_mem_read(call);
420
        udebug_receive_mem_read(call);
360
        break;
421
        break;
-
 
422
    case UDEBUG_M_MEM_WRITE:
-
 
423
        udebug_receive_mem_write(call);
-
 
424
        break;
361
    }
425
    }
362
}
426
}
363
 
427
 
364
/** @}
428
/** @}
365
 */
429
 */