Changes in uspace/app/trace/trace.c [28a3e74:7c014d1] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/trace/trace.c
r28a3e74 r7c014d1 50 50 #include <sys/types.h> 51 51 #include <sys/typefmt.h> 52 #include <vfs/vfs.h> 52 53 53 54 #include <libc.h> … … 72 73 ipc_call_t thread_ipc_req[THBUF_SIZE]; 73 74 74 int phoneid;75 async_sess_t *sess; 75 76 bool abort_trace; 76 77 … … 81 82 82 83 static bool cev_valid; 83 static console_event_t cev;84 static kbd_event_t cev; 84 85 85 86 void thread_trace_start(uintptr_t thread_hash); 86 87 87 static proto_t *proto_console;88 88 static task_id_t task_id; 89 89 static loader_t *task_ldr; … … 146 146 static int connect_task(task_id_t task_id) 147 147 { 148 int rc; 149 150 rc = async_connect_kbox(task_id); 151 152 if (rc == ENOTSUP) { 153 printf("You do not have userspace debugging support " 154 "compiled in the kernel.\n"); 155 printf("Compile kernel with 'Support for userspace debuggers' " 156 "(CONFIG_UDEBUG) enabled.\n"); 157 return rc; 158 } 159 160 if (rc < 0) { 148 async_sess_t *ksess = async_connect_kbox(task_id); 149 150 if (!ksess) { 151 if (errno == ENOTSUP) { 152 printf("You do not have userspace debugging support " 153 "compiled in the kernel.\n"); 154 printf("Compile kernel with 'Support for userspace debuggers' " 155 "(CONFIG_UDEBUG) enabled.\n"); 156 return errno; 157 } 158 161 159 printf("Error connecting\n"); 162 printf("ipc_connect_task(%" PRIu64 ") -> %d ", task_id, rc); 163 return rc; 164 } 165 166 phoneid = rc; 167 168 rc = udebug_begin(phoneid); 160 printf("ipc_connect_task(%" PRIu64 ") -> %d ", task_id, errno); 161 return errno; 162 } 163 164 int rc = udebug_begin(ksess); 169 165 if (rc < 0) { 170 166 printf("udebug_begin() -> %d\n", rc); 171 167 return rc; 172 168 } 173 174 rc = udebug_set_evmask( phoneid, UDEBUG_EM_ALL);169 170 rc = udebug_set_evmask(ksess, UDEBUG_EM_ALL); 175 171 if (rc < 0) { 176 172 printf("udebug_set_evmask(0x%x) -> %d\n ", UDEBUG_EM_ALL, rc); 177 173 return rc; 178 174 } 179 175 176 sess = ksess; 180 177 return 0; 181 178 } … … 188 185 int i; 189 186 190 rc = udebug_thread_read( phoneid, thread_hash_buf,187 rc = udebug_thread_read(sess, thread_hash_buf, 191 188 THBUF_SIZE*sizeof(unsigned), &tb_copied, &tb_needed); 192 189 if (rc < 0) { … … 314 311 315 312 memset(&call, 0, sizeof(call)); 316 rc = udebug_mem_read( phoneid, &call.args, sc_args[1], sizeof(call.args));313 rc = udebug_mem_read(sess, &call.args, sc_args[1], sizeof(call.args)); 317 314 318 315 if (rc >= 0) { … … 325 322 ipc_call_t question, reply; 326 323 int rc; 327 int phoneidx; 328 329 // printf("sc_ipc_call_sync_fast()\n"); 330 phoneidx = sc_args[0]; 324 int phoneid; 325 326 phoneid = sc_args[0]; 331 327 332 328 IPC_SET_IMETHOD(question, sc_args[1]); … … 337 333 IPC_SET_ARG5(question, 0); 338 334 339 // printf("memset\n");340 335 memset(&reply, 0, sizeof(reply)); 341 // printf("udebug_mem_read(phone=%d, buffer_ptr=%u, src_addr=%d, n=%d\n", 342 // phoneid, &reply.args, sc_args[5], sizeof(reply.args)); 343 rc = udebug_mem_read(phoneid, &reply.args, sc_args[5], sizeof(reply.args)); 344 // printf("dmr->%d\n", rc); 345 if (rc < 0) return; 346 347 // printf("call ipc_call_sync\n"); 348 ipcp_call_sync(phoneidx, &question, &reply); 336 rc = udebug_mem_read(sess, &reply.args, sc_args[5], sizeof(reply.args)); 337 if (rc < 0) 338 return; 339 340 ipcp_call_sync(phoneid, &question, &reply); 349 341 } 350 342 … … 355 347 356 348 memset(&question, 0, sizeof(question)); 357 rc = udebug_mem_read( phoneid, &question.args, sc_args[1],349 rc = udebug_mem_read(sess, &question.args, sc_args[1], 358 350 sizeof(question.args)); 359 351 … … 372 364 373 365 memset(&reply, 0, sizeof(reply)); 374 rc = udebug_mem_read( phoneid, &reply.args, sc_args[2],366 rc = udebug_mem_read(sess, &reply.args, sc_args[2], 375 367 sizeof(reply.args)); 376 368 … … 391 383 392 384 memset(&call, 0, sizeof(call)); 393 rc = udebug_mem_read(phoneid, &call, sc_args[0], sizeof(call)); 394 // printf("udebug_mem_read(phone %d, dest %d, app-mem src %d, size %d -> %d\n", 395 // phoneid, (int)&call, sc_args[0], sizeof(call), rc); 396 397 if (rc >= 0) { 385 rc = udebug_mem_read(sess, &call, sc_args[0], sizeof(call)); 386 387 if (rc >= 0) 398 388 ipcp_call_in(&call, sc_rc); 399 }400 389 } 401 390 … … 407 396 408 397 /* Read syscall arguments */ 409 rc = udebug_args_read(phoneid, thread_hash, sc_args); 410 411 async_serialize_start(); 412 413 // printf("[%d] ", thread_id); 398 rc = udebug_args_read(sess, thread_hash, sc_args); 414 399 415 400 if (rc < 0) { 416 401 printf("error\n"); 417 async_serialize_end();418 402 return; 419 403 } … … 432 416 break; 433 417 } 434 435 async_serialize_end();436 418 } 437 419 … … 444 426 445 427 /* Read syscall arguments */ 446 rc = udebug_args_read(phoneid, thread_hash, sc_args); 447 448 async_serialize_start(); 428 rc = udebug_args_read(sess, thread_hash, sc_args); 449 429 450 430 // printf("[%d] ", thread_id); … … 452 432 if (rc < 0) { 453 433 printf("error\n"); 454 async_serialize_end();455 434 return; 456 435 } … … 481 460 break; 482 461 } 483 484 async_serialize_end();485 462 } 486 463 487 464 static void event_thread_b(uintptr_t hash) 488 465 { 489 async_serialize_start();490 466 printf("New thread, hash %p\n", (void *) hash); 491 async_serialize_end();492 493 467 thread_trace_start(hash); 494 468 } … … 527 501 528 502 /* Run thread until an event occurs */ 529 rc = udebug_go( phoneid, thread_hash,503 rc = udebug_go(sess, thread_hash, 530 504 &ev_type, &val0, &val1); 531 505 … … 612 586 613 587 /* Send default files */ 614 fdi_node_t *files[4];615 fdi_node_t stdin_node;616 fdi_node_t stdout_node;617 fdi_node_t stderr_node;618 619 if ((stdin != NULL) && (f node(stdin, &stdin_node) == EOK))620 files[0] = & stdin_node;588 int *files[4]; 589 int fd_stdin; 590 int fd_stdout; 591 int fd_stderr; 592 593 if ((stdin != NULL) && (fhandle(stdin, &fd_stdin) == EOK)) 594 files[0] = &fd_stdin; 621 595 else 622 596 files[0] = NULL; 623 597 624 if ((stdout != NULL) && (f node(stdout, &stdout_node) == EOK))625 files[1] = & stdout_node;598 if ((stdout != NULL) && (fhandle(stdout, &fd_stdout) == EOK)) 599 files[1] = &fd_stdout; 626 600 else 627 601 files[1] = NULL; 628 602 629 if ((stderr != NULL) && (f node(stderr, &stderr_node) == EOK))630 files[2] = & stderr_node;603 if ((stderr != NULL) && (fhandle(stderr, &fd_stderr) == EOK)) 604 files[2] = &fd_stderr; 631 605 else 632 606 files[2] = NULL; … … 656 630 { 657 631 (void) arg; 658 632 633 console_ctrl_t *console = console_init(stdin, stdout); 634 659 635 while (true) { 660 636 fibril_mutex_lock(&state_lock); … … 662 638 fibril_condvar_wait(&state_cv, &state_lock); 663 639 fibril_mutex_unlock(&state_lock); 664 665 if (!console_get_ event(fphone(stdin), &cev))640 641 if (!console_get_kbd_event(console, &cev)) 666 642 return -1; 667 643 668 644 fibril_mutex_lock(&state_lock); 669 645 cev_valid = true; 670 646 fibril_condvar_broadcast(&state_cv); 671 fibril_mutex_unlock(&state_lock); 647 fibril_mutex_unlock(&state_lock); 672 648 } 673 649 } … … 675 651 static void trace_task(task_id_t task_id) 676 652 { 677 console_event_t ev;653 kbd_event_t ev; 678 654 bool done; 679 655 int i; … … 681 657 682 658 ipcp_init(); 683 684 /*685 * User apps now typically have console on phone 3.686 * (Phones 1 and 2 are used by the loader).687 */688 ipcp_connection_set(3, 0, proto_console);689 659 690 660 rc = get_thread_list(); … … 727 697 case KC_P: 728 698 printf("Pause...\n"); 729 rc = udebug_stop( phoneid, thash);699 rc = udebug_stop(sess, thash); 730 700 if (rc != EOK) 731 701 printf("Error: stop -> %d\n", rc); … … 738 708 printf("Resume...\n"); 739 709 break; 710 default: 711 break; 740 712 } 741 713 } … … 743 715 printf("\nTerminate debugging session...\n"); 744 716 abort_trace = true; 745 udebug_end( phoneid);746 async_hangup( phoneid);717 udebug_end(sess); 718 async_hangup(sess); 747 719 748 720 ipcp_cleanup(); … … 785 757 o = oper_new("open", 2, arg_def, V_INT_ERRNO, 0, resp_def); 786 758 proto_add_oper(p, VFS_IN_OPEN, o); 787 o = oper_new("open_node", 4, arg_def, V_INT_ERRNO, 0, resp_def);788 proto_add_oper(p, VFS_IN_OPEN_NODE, o);789 759 o = oper_new("read", 1, arg_def, V_ERRNO, 1, resp_def); 790 760 proto_add_oper(p, VFS_IN_READ, o); … … 815 785 816 786 proto_register(SERVICE_VFS, p); 817 818 p = proto_new("console");819 820 o = oper_new("write", 1, arg_def, V_ERRNO, 1, resp_def);821 proto_add_oper(p, VFS_IN_WRITE, o);822 823 resp_def[0] = V_INTEGER; resp_def[1] = V_INTEGER;824 resp_def[2] = V_INTEGER; resp_def[3] = V_CHAR;825 o = oper_new("getkey", 0, arg_def, V_ERRNO, 4, resp_def);826 827 arg_def[0] = V_CHAR;828 o = oper_new("clear", 0, arg_def, V_VOID, 0, resp_def);829 proto_add_oper(p, CONSOLE_CLEAR, o);830 831 arg_def[0] = V_INTEGER; arg_def[1] = V_INTEGER;832 o = oper_new("goto", 2, arg_def, V_VOID, 0, resp_def);833 proto_add_oper(p, CONSOLE_GOTO, o);834 835 resp_def[0] = V_INTEGER; resp_def[1] = V_INTEGER;836 o = oper_new("getsize", 0, arg_def, V_INTEGER, 2, resp_def);837 proto_add_oper(p, CONSOLE_GET_SIZE, o);838 839 arg_def[0] = V_INTEGER;840 o = oper_new("set_style", 1, arg_def, V_VOID, 0, resp_def);841 proto_add_oper(p, CONSOLE_SET_STYLE, o);842 arg_def[0] = V_INTEGER; arg_def[1] = V_INTEGER; arg_def[2] = V_INTEGER;843 o = oper_new("set_color", 3, arg_def, V_VOID, 0, resp_def);844 proto_add_oper(p, CONSOLE_SET_COLOR, o);845 arg_def[0] = V_INTEGER; arg_def[1] = V_INTEGER;846 o = oper_new("set_rgb_color", 2, arg_def, V_VOID, 0, resp_def);847 proto_add_oper(p, CONSOLE_SET_RGB_COLOR, o);848 o = oper_new("cursor_visibility", 1, arg_def, V_VOID, 0, resp_def);849 proto_add_oper(p, CONSOLE_CURSOR_VISIBILITY, o);850 851 proto_console = p;852 proto_register(SERVICE_CONSOLE, p);853 787 } 854 788
Note:
See TracChangeset
for help on using the changeset viewer.