Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/trace/trace.c

    r28a3e74 r7c014d1  
    5050#include <sys/types.h>
    5151#include <sys/typefmt.h>
     52#include <vfs/vfs.h>
    5253
    5354#include <libc.h>
     
    7273ipc_call_t thread_ipc_req[THBUF_SIZE];
    7374
    74 int phoneid;
     75async_sess_t *sess;
    7576bool abort_trace;
    7677
     
    8182
    8283static bool cev_valid;
    83 static console_event_t cev;
     84static kbd_event_t cev;
    8485
    8586void thread_trace_start(uintptr_t thread_hash);
    8687
    87 static proto_t *proto_console;
    8888static task_id_t task_id;
    8989static loader_t *task_ldr;
     
    146146static int connect_task(task_id_t task_id)
    147147{
    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               
    161159                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);
    169165        if (rc < 0) {
    170166                printf("udebug_begin() -> %d\n", rc);
    171167                return rc;
    172168        }
    173 
    174         rc = udebug_set_evmask(phoneid, UDEBUG_EM_ALL);
     169       
     170        rc = udebug_set_evmask(ksess, UDEBUG_EM_ALL);
    175171        if (rc < 0) {
    176172                printf("udebug_set_evmask(0x%x) -> %d\n ", UDEBUG_EM_ALL, rc);
    177173                return rc;
    178174        }
    179 
     175       
     176        sess = ksess;
    180177        return 0;
    181178}
     
    188185        int i;
    189186
    190         rc = udebug_thread_read(phoneid, thread_hash_buf,
     187        rc = udebug_thread_read(sess, thread_hash_buf,
    191188                THBUF_SIZE*sizeof(unsigned), &tb_copied, &tb_needed);
    192189        if (rc < 0) {
     
    314311
    315312        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));
    317314
    318315        if (rc >= 0) {
     
    325322        ipc_call_t question, reply;
    326323        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];
    331327
    332328        IPC_SET_IMETHOD(question, sc_args[1]);
     
    337333        IPC_SET_ARG5(question, 0);
    338334
    339 //      printf("memset\n");
    340335        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);
    349341}
    350342
     
    355347
    356348        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],
    358350            sizeof(question.args));
    359351
     
    372364
    373365        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],
    375367            sizeof(reply.args));
    376368
     
    391383
    392384        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)
    398388                ipcp_call_in(&call, sc_rc);
    399         }
    400389}
    401390
     
    407396
    408397        /* 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);
    414399
    415400        if (rc < 0) {
    416401                printf("error\n");
    417                 async_serialize_end();
    418402                return;
    419403        }
     
    432416                break;
    433417        }
    434 
    435         async_serialize_end();
    436418}
    437419
     
    444426
    445427        /* 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);
    449429
    450430//      printf("[%d] ", thread_id);
     
    452432        if (rc < 0) {
    453433                printf("error\n");
    454                 async_serialize_end();
    455434                return;
    456435        }
     
    481460                break;
    482461        }
    483 
    484         async_serialize_end();
    485462}
    486463
    487464static void event_thread_b(uintptr_t hash)
    488465{
    489         async_serialize_start();
    490466        printf("New thread, hash %p\n", (void *) hash);
    491         async_serialize_end();
    492 
    493467        thread_trace_start(hash);
    494468}
     
    527501
    528502                /* Run thread until an event occurs */
    529                 rc = udebug_go(phoneid, thread_hash,
     503                rc = udebug_go(sess, thread_hash,
    530504                    &ev_type, &val0, &val1);
    531505
     
    612586
    613587        /* 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) && (fnode(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;
    621595        else
    622596                files[0] = NULL;
    623597       
    624         if ((stdout != NULL) && (fnode(stdout, &stdout_node) == EOK))
    625                 files[1] = &stdout_node;
     598        if ((stdout != NULL) && (fhandle(stdout, &fd_stdout) == EOK))
     599                files[1] = &fd_stdout;
    626600        else
    627601                files[1] = NULL;
    628602       
    629         if ((stderr != NULL) && (fnode(stderr, &stderr_node) == EOK))
    630                 files[2] = &stderr_node;
     603        if ((stderr != NULL) && (fhandle(stderr, &fd_stderr) == EOK))
     604                files[2] = &fd_stderr;
    631605        else
    632606                files[2] = NULL;
     
    656630{
    657631        (void) arg;
    658 
     632       
     633        console_ctrl_t *console = console_init(stdin, stdout);
     634       
    659635        while (true) {
    660636                fibril_mutex_lock(&state_lock);
     
    662638                        fibril_condvar_wait(&state_cv, &state_lock);
    663639                fibril_mutex_unlock(&state_lock);
    664 
    665                 if (!console_get_event(fphone(stdin), &cev))
     640               
     641                if (!console_get_kbd_event(console, &cev))
    666642                        return -1;
    667 
     643               
    668644                fibril_mutex_lock(&state_lock);
    669645                cev_valid = true;
    670646                fibril_condvar_broadcast(&state_cv);
    671                 fibril_mutex_unlock(&state_lock);               
     647                fibril_mutex_unlock(&state_lock);
    672648        }
    673649}
     
    675651static void trace_task(task_id_t task_id)
    676652{
    677         console_event_t ev;
     653        kbd_event_t ev;
    678654        bool done;
    679655        int i;
     
    681657
    682658        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);
    689659
    690660        rc = get_thread_list();
     
    727697                case KC_P:
    728698                        printf("Pause...\n");
    729                         rc = udebug_stop(phoneid, thash);
     699                        rc = udebug_stop(sess, thash);
    730700                        if (rc != EOK)
    731701                                printf("Error: stop -> %d\n", rc);
     
    738708                        printf("Resume...\n");
    739709                        break;
     710                default:
     711                        break;
    740712                }
    741713        }
     
    743715        printf("\nTerminate debugging session...\n");
    744716        abort_trace = true;
    745         udebug_end(phoneid);
    746         async_hangup(phoneid);
     717        udebug_end(sess);
     718        async_hangup(sess);
    747719
    748720        ipcp_cleanup();
     
    785757        o = oper_new("open", 2, arg_def, V_INT_ERRNO, 0, resp_def);
    786758        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);
    789759        o = oper_new("read", 1, arg_def, V_ERRNO, 1, resp_def);
    790760        proto_add_oper(p, VFS_IN_READ, o);
     
    815785
    816786        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);
    853787}
    854788
Note: See TracChangeset for help on using the changeset viewer.