X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Fstate.c;h=0721f7c9ba92eceb2b8166c0f65b95e237dd6ca0;hb=7b1435808100639cc2168529954d2a4c8bdc325b;hp=52815dd922dfd4335c287f5e974c74934ad6e944;hpb=791dffa6f060fe553546337fde7ed58a16f41178;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/state.c b/ltt/branches/poly/lttv/lttv/state.c index 52815dd9..0721f7c9 100644 --- a/ltt/branches/poly/lttv/lttv/state.c +++ b/ltt/branches/poly/lttv/lttv/state.c @@ -35,6 +35,7 @@ GQuark LTT_FACILITY_KERNEL, + LTT_FACILITY_ASM_I386_KERNEL, LTT_FACILITY_PROCESS, LTT_FACILITY_FS; @@ -768,7 +769,7 @@ create_name_tables(LttvTraceState *tcs) } #endif //0 if(lttv_trace_find_hook(tcs->parent.t, - LTT_FACILITY_KERNEL, LTT_EVENT_SYSCALL_ENTRY, + LTT_FACILITY_ASM_I386_KERNEL, LTT_EVENT_SYSCALL_ENTRY, LTT_FIELD_SYSCALL_ID, 0, 0, NULL, NULL, &h)) return; @@ -776,7 +777,7 @@ create_name_tables(LttvTraceState *tcs) thf = lttv_trace_hook_get_first(&h); t = ltt_field_type(thf->f1); - nb = ltt_type_element_number(t); + //nb = ltt_type_element_number(t); lttv_trace_hook_destroy(&h); @@ -804,7 +805,7 @@ create_name_tables(LttvTraceState *tcs) thf = lttv_trace_hook_get_first(&h); t = ltt_field_type(thf->f1); - nb = ltt_type_element_number(t); + //nb = ltt_type_element_number(t); lttv_trace_hook_destroy(&h); @@ -831,7 +832,7 @@ create_name_tables(LttvTraceState *tcs) thf = lttv_trace_hook_get_first(&h); t = ltt_field_type(thf->f1); - nb = ltt_type_element_number(t); + //nb = ltt_type_element_number(t); lttv_trace_hook_destroy(&h); @@ -1375,15 +1376,22 @@ static gboolean process_exec(void *hook_data, void *call_data) LttvTraceState *ts = (LttvTraceState*)s->parent.t_context; LttEvent *e = ltt_tracefile_get_event(s->parent.tf); LttvTraceHookByFacility *thf = (LttvTraceHookByFacility *)hook_data; - gchar *name; + //gchar *name; guint cpu = ltt_tracefile_num(s->parent.tf); LttvProcessState *process = ts->running_process[cpu]; /* PID of the process to release */ - name = ltt_event_get_string(e, thf->f1); - - process->name = g_quark_from_string(name); - + guint64 name_len = ltt_event_field_element_number(e, thf->f1); + //name = ltt_event_get_string(e, thf->f1); + LttField *child = ltt_event_field_element_select(e, thf->f1, 0); + gchar *name_begin = + (gchar*)(ltt_event_data(e)+ltt_event_field_offset(e, child)); + gchar *null_term_name = g_new(gchar, name_len+1); + memcpy(null_term_name, name_begin, name_len); + null_term_name[name_len] = '\0'; + + process->name = g_quark_from_string(null_term_name); + g_free(null_term_name); return FALSE; } @@ -1430,13 +1438,13 @@ void lttv_state_add_event_hooks(LttvTracesetState *self) hooks = g_array_set_size(hooks, 11); ret = lttv_trace_find_hook(ts->parent.t, - LTT_FACILITY_KERNEL, LTT_EVENT_SYSCALL_ENTRY, + LTT_FACILITY_ASM_I386_KERNEL, LTT_EVENT_SYSCALL_ENTRY, LTT_FIELD_SYSCALL_ID, 0, 0, syscall_entry, NULL, &g_array_index(hooks, LttvTraceHook, 0)); g_assert(!ret); ret = lttv_trace_find_hook(ts->parent.t, - LTT_FACILITY_KERNEL, LTT_EVENT_SYSCALL_EXIT, + LTT_FACILITY_ASM_I386_KERNEL, LTT_EVENT_SYSCALL_EXIT, 0, 0, 0, syscall_exit, NULL, &g_array_index(hooks, LttvTraceHook, 1)); g_assert(!ret); @@ -1866,7 +1874,7 @@ void lttv_state_save_remove_event_hooks(LttvTracesetState *self) ts = (LttvTraceState *)self->parent.traces[i]; nb_tracefile = ts->parent.tracefiles->len; - guint *event_count; + guint *event_count = NULL; for(j = 0 ; j < nb_tracefile ; j++) { tfs = @@ -1875,7 +1883,7 @@ void lttv_state_save_remove_event_hooks(LttvTracesetState *self) event_count = lttv_hooks_remove(tfs->parent.event, state_save_event_hook); } - g_free(event_count); + if(event_count) g_free(event_count); } } @@ -2148,6 +2156,7 @@ static void module_init() LTT_FACILITY_KERNEL = g_quark_from_string("kernel"); + LTT_FACILITY_ASM_I386_KERNEL = g_quark_from_string("asm_i386_kernel"); LTT_FACILITY_PROCESS = g_quark_from_string("process"); LTT_FACILITY_FS = g_quark_from_string("fs");