Ignore:
File:
1 edited

Legend:

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

    r79ae36dd r28a3e74  
    7272ipc_call_t thread_ipc_req[THBUF_SIZE];
    7373
    74 async_sess_t *sess;
     74int phoneid;
    7575bool abort_trace;
    7676
     
    8181
    8282static bool cev_valid;
    83 static kbd_event_t cev;
     83static console_event_t cev;
    8484
    8585void thread_trace_start(uintptr_t thread_hash);
     
    146146static int connect_task(task_id_t task_id)
    147147{
    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                
     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) {
    159161                printf("Error connecting\n");
    160                 printf("ipc_connect_task(%" PRIu64 ") -> %d ", task_id, errno);
    161                 return errno;
    162         }
    163        
    164         int rc = udebug_begin(ksess);
     162                printf("ipc_connect_task(%" PRIu64 ") -> %d ", task_id, rc);
     163                return rc;
     164        }
     165
     166        phoneid = rc;
     167
     168        rc = udebug_begin(phoneid);
    165169        if (rc < 0) {
    166170                printf("udebug_begin() -> %d\n", rc);
    167171                return rc;
    168172        }
    169        
    170         rc = udebug_set_evmask(ksess, UDEBUG_EM_ALL);
     173
     174        rc = udebug_set_evmask(phoneid, UDEBUG_EM_ALL);
    171175        if (rc < 0) {
    172176                printf("udebug_set_evmask(0x%x) -> %d\n ", UDEBUG_EM_ALL, rc);
    173177                return rc;
    174178        }
    175        
    176         sess = ksess;
     179
    177180        return 0;
    178181}
     
    185188        int i;
    186189
    187         rc = udebug_thread_read(sess, thread_hash_buf,
     190        rc = udebug_thread_read(phoneid, thread_hash_buf,
    188191                THBUF_SIZE*sizeof(unsigned), &tb_copied, &tb_needed);
    189192        if (rc < 0) {
     
    311314
    312315        memset(&call, 0, sizeof(call));
    313         rc = udebug_mem_read(sess, &call.args, sc_args[1], sizeof(call.args));
     316        rc = udebug_mem_read(phoneid, &call.args, sc_args[1], sizeof(call.args));
    314317
    315318        if (rc >= 0) {
     
    322325        ipc_call_t question, reply;
    323326        int rc;
    324         int phoneid;
    325 
    326         phoneid = sc_args[0];
     327        int phoneidx;
     328
     329//      printf("sc_ipc_call_sync_fast()\n");
     330        phoneidx = sc_args[0];
    327331
    328332        IPC_SET_IMETHOD(question, sc_args[1]);
     
    333337        IPC_SET_ARG5(question, 0);
    334338
     339//      printf("memset\n");
    335340        memset(&reply, 0, sizeof(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);
     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);
    341349}
    342350
     
    347355
    348356        memset(&question, 0, sizeof(question));
    349         rc = udebug_mem_read(sess, &question.args, sc_args[1],
     357        rc = udebug_mem_read(phoneid, &question.args, sc_args[1],
    350358            sizeof(question.args));
    351359
     
    364372
    365373        memset(&reply, 0, sizeof(reply));
    366         rc = udebug_mem_read(sess, &reply.args, sc_args[2],
     374        rc = udebug_mem_read(phoneid, &reply.args, sc_args[2],
    367375            sizeof(reply.args));
    368376
     
    383391
    384392        memset(&call, 0, sizeof(call));
    385         rc = udebug_mem_read(sess, &call, sc_args[0], sizeof(call));
    386        
    387         if (rc >= 0)
     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) {
    388398                ipcp_call_in(&call, sc_rc);
     399        }
    389400}
    390401
     
    396407
    397408        /* Read syscall arguments */
    398         rc = udebug_args_read(sess, thread_hash, sc_args);
     409        rc = udebug_args_read(phoneid, thread_hash, sc_args);
     410
     411        async_serialize_start();
     412
     413//      printf("[%d] ", thread_id);
    399414
    400415        if (rc < 0) {
    401416                printf("error\n");
     417                async_serialize_end();
    402418                return;
    403419        }
     
    416432                break;
    417433        }
     434
     435        async_serialize_end();
    418436}
    419437
     
    426444
    427445        /* Read syscall arguments */
    428         rc = udebug_args_read(sess, thread_hash, sc_args);
     446        rc = udebug_args_read(phoneid, thread_hash, sc_args);
     447
     448        async_serialize_start();
    429449
    430450//      printf("[%d] ", thread_id);
     
    432452        if (rc < 0) {
    433453                printf("error\n");
     454                async_serialize_end();
    434455                return;
    435456        }
     
    460481                break;
    461482        }
     483
     484        async_serialize_end();
    462485}
    463486
    464487static void event_thread_b(uintptr_t hash)
    465488{
     489        async_serialize_start();
    466490        printf("New thread, hash %p\n", (void *) hash);
     491        async_serialize_end();
     492
    467493        thread_trace_start(hash);
    468494}
     
    501527
    502528                /* Run thread until an event occurs */
    503                 rc = udebug_go(sess, thread_hash,
     529                rc = udebug_go(phoneid, thread_hash,
    504530                    &ev_type, &val0, &val1);
    505531
     
    630656{
    631657        (void) arg;
    632        
    633         console_ctrl_t *console = console_init(stdin, stdout);
    634        
     658
    635659        while (true) {
    636660                fibril_mutex_lock(&state_lock);
     
    638662                        fibril_condvar_wait(&state_cv, &state_lock);
    639663                fibril_mutex_unlock(&state_lock);
    640                
    641                 if (!console_get_kbd_event(console, &cev))
     664
     665                if (!console_get_event(fphone(stdin), &cev))
    642666                        return -1;
    643                
     667
    644668                fibril_mutex_lock(&state_lock);
    645669                cev_valid = true;
    646670                fibril_condvar_broadcast(&state_cv);
    647                 fibril_mutex_unlock(&state_lock);
     671                fibril_mutex_unlock(&state_lock);               
    648672        }
    649673}
     
    651675static void trace_task(task_id_t task_id)
    652676{
    653         kbd_event_t ev;
     677        console_event_t ev;
    654678        bool done;
    655679        int i;
     
    703727                case KC_P:
    704728                        printf("Pause...\n");
    705                         rc = udebug_stop(sess, thash);
     729                        rc = udebug_stop(phoneid, thash);
    706730                        if (rc != EOK)
    707731                                printf("Error: stop -> %d\n", rc);
     
    719743        printf("\nTerminate debugging session...\n");
    720744        abort_trace = true;
    721         udebug_end(sess);
    722         async_hangup(sess);
     745        udebug_end(phoneid);
     746        async_hangup(phoneid);
    723747
    724748        ipcp_cleanup();
Note: See TracChangeset for help on using the changeset viewer.