From b0e006368c80bf63fc24032d774d9653ebf2eda0 Mon Sep 17 00:00:00 2001 From: compudj Date: Thu, 20 Dec 2007 19:09:06 +0000 Subject: [PATCH] update version git-svn-id: http://ltt.polymtl.ca/svn@2796 04897980-b3bd-0310-b5e0-8ef037075253 --- ltt/branches/poly/configure.in | 2 +- .../developer/lttng-lttv-compatibility.html | 1 + ltt/branches/poly/lttv/lttv/state.c | 239 +++++++++--------- 3 files changed, 117 insertions(+), 125 deletions(-) diff --git a/ltt/branches/poly/configure.in b/ltt/branches/poly/configure.in index c75529d2..a742f152 100644 --- a/ltt/branches/poly/configure.in +++ b/ltt/branches/poly/configure.in @@ -23,7 +23,7 @@ AC_PREREQ(2.57) AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS) #AC_WITH_LTDL # not needed ? -AM_INIT_AUTOMAKE(lttv,0.10.0-pre7-20122007) +AM_INIT_AUTOMAKE(lttv,0.10.0-pre8-20122007) AM_CONFIG_HEADER(config.h) AM_PROG_LIBTOOL diff --git a/ltt/branches/poly/doc/developer/lttng-lttv-compatibility.html b/ltt/branches/poly/doc/developer/lttng-lttv-compatibility.html index b6ae4b5c..8f95aaff 100644 --- a/ltt/branches/poly/doc/developer/lttng-lttv-compatibility.html +++ b/ltt/branches/poly/doc/developer/lttng-lttv-compatibility.html @@ -2613,6 +2613,7 @@ sparc, sparc64.
0.10.0-pre5
0.10.0-pre6
0.10.0-pre7
+0.10.0-pre8
0.10.0-pre37
diff --git a/ltt/branches/poly/lttv/lttv/state.c b/ltt/branches/poly/lttv/lttv/state.c index ecbf7ec5..a0186e04 100644 --- a/ltt/branches/poly/lttv/lttv/state.c +++ b/ltt/branches/poly/lttv/lttv/state.c @@ -268,6 +268,105 @@ gboolean rettrue(gpointer key, gpointer value, gpointer user_data) return TRUE; } +static guint check_expand(nb, id) +{ + if(likely(nb > id)) + return nb; + else + return max(id + 1, nb * 2); +} + +static void expand_name_table(LttvTraceState *ts, GQuark **table, + guint nb, guint new_nb) +{ + /* Expand an incomplete table */ + GQuark *old_table = *table; + *table = g_new(GQuark, new_nb); + memcpy(*table, old_table, nb * sizeof(GQuark)); +} + +static void fill_name_table(LttvTraceState *ts, GQuark *table, guint nb, + guint new_nb, const char *def_string) +{ + guint i; + GString *fe_name = g_string_new(""); + for(i = nb; i < new_nb; i++) { + g_string_printf(fe_name, "%s %d", def_string, i); + table[i] = g_quark_from_string(fe_name->str); + } + g_string_free(fe_name, TRUE); +} + +static void expand_syscall_table(LttvTraceState *ts, int id) +{ + guint new_nb = check_expand(ts->nb_syscalls, id); + if(likely(new_nb == ts->nb_syscalls)) + return; + expand_name_table(ts, &ts->syscall_names, ts->nb_syscalls, id); + fill_name_table(ts, ts->syscall_names, ts->nb_syscalls, new_nb, "syscall"); + /* Update the table size */ + ts->nb_syscalls = new_nb; +} + +static void expand_trap_table(LttvTraceState *ts, int id) +{ + guint new_nb = check_expand(ts->nb_traps, id); + guint i; + if(likely(new_nb == ts->nb_traps)) + return; + expand_name_table(ts, &ts->trap_names, ts->nb_traps, new_nb); + fill_name_table(ts, ts->trap_names, ts->nb_traps, new_nb, "trap"); + /* Update the table size */ + ts->nb_traps = new_nb; + + LttvTrapState *old_table = ts->trap_states; + ts->trap_states = g_new(LttvTrapState, new_nb); + memcpy(ts->trap_states, old_table, + ts->nb_traps * sizeof(LttvTrapState)); + for(i = ts->nb_traps; i < new_nb; i++) + ts->trap_states[i].running = 0; +} + +static void expand_irq_table(LttvTraceState *ts, int id) +{ + guint new_nb = check_expand(ts->nb_irqs, id); + guint i; + if(likely(new_nb == ts->nb_irqs)) + return; + expand_name_table(ts, &ts->irq_names, ts->nb_irqs, new_nb); + fill_name_table(ts, ts->irq_names, ts->nb_irqs, new_nb, "irq"); + + LttvIRQState *old_table = ts->irq_states; + ts->irq_states = g_new(LttvIRQState, new_nb); + memcpy(ts->irq_states, old_table, ts->nb_irqs * sizeof(LttvIRQState)); + for(i = ts->nb_irqs; i < new_nb; i++) { + ts->irq_states[i].mode_stack = g_array_new(FALSE, FALSE, sizeof(LttvIRQMode)); + } + + /* Update the table size */ + ts->nb_irqs = new_nb; +} + +static void expand_soft_irq_table(LttvTraceState *ts, int id) +{ + guint new_nb = check_expand(ts->nb_soft_irqs, id); + guint i; + if(likely(new_nb == ts->nb_soft_irqs)) + return; + expand_name_table(ts, &ts->soft_irq_names, ts->nb_soft_irqs, new_nb); + fill_name_table(ts, ts->soft_irq_names, ts->nb_soft_irqs, new_nb, "softirq"); + + LttvSoftIRQState *old_table = ts->soft_irq_states; + ts->soft_irq_states = g_new(LttvSoftIRQState, new_nb); + memcpy(ts->soft_irq_states, old_table, + ts->nb_soft_irqs * sizeof(LttvSoftIRQState)); + for(i = ts->nb_soft_irqs; i < new_nb; i++) + ts->soft_irq_states[i].running = 0; + + /* Update the table size */ + ts->nb_soft_irqs = new_nb; +} + static void restore_init_state(LttvTraceState *self) { @@ -1171,7 +1270,7 @@ static LttvCPUState *lttv_state_copy_cpu_states(LttvCPUState *states, guint n) guint i,j; LttvCPUState *retval; - retval = g_malloc(n*sizeof(LttvCPUState)); + retval = g_new(LttvCPUState, n); for(i=0; ibdev_states, &devcode_gint); if(bdev == NULL) { - LttvBdevState *bdevstate = g_malloc(sizeof(LttvBdevState)); + LttvBdevState *bdevstate = g_new(LttvBdevState, 1); bdevstate->mode_stack = g_array_new(FALSE, FALSE, sizeof(GQuark)); - gint * key = g_malloc(sizeof(gint)); + gint * key = g_new(gint, 1); *key = devcode; g_hash_table_insert(ts->bdev_states, key, bdevstate); @@ -1286,7 +1385,7 @@ static LttvBdevState *get_hashed_bdevstate(LttvTraceState *ts, guint16 devcode) static LttvBdevState *bdevstate_new(void) { LttvBdevState *retval; - retval = g_malloc(sizeof(LttvBdevState)); + retval = g_new(LttvBdevState, 1); retval->mode_stack = g_array_new(FALSE, FALSE, sizeof(GQuark)); return retval; @@ -2290,28 +2389,10 @@ static gboolean syscall_entry(void *hook_data, void *call_data) LttEvent *e = ltt_tracefile_get_event(s->parent.tf); LttvTraceHook *th = (LttvTraceHook *)hook_data; struct marker_field *f = lttv_trace_get_hook_field(th, 0); - LttvExecutionSubmode submode; - guint nb_syscalls = ((LttvTraceState *)(s->parent.t_context))->nb_syscalls; guint syscall = ltt_event_get_unsigned(e, f); - - if(nb_syscalls <= syscall) { - /* Fixup an incomplete syscall table */ - GQuark *old_names = ts->syscall_names; - guint new_nb_syscalls = max(syscall + 1, ts->nb_syscalls * 2); - guint i; - GString *fe_name = g_string_new(""); - ts->syscall_names = g_new(GQuark, new_nb_syscalls); - memcpy(ts->syscall_names, old_names, - ts->nb_syscalls * sizeof(GQuark)); - for(i = ts->nb_syscalls ; i < new_nb_syscalls ; i++) { - g_string_printf(fe_name, "syscall %d", i); - ts->syscall_names[i] = g_quark_from_string(fe_name->str); - } - g_string_free(fe_name, TRUE); - ts->nb_syscalls = new_nb_syscalls; - } + expand_syscall_table(ts, syscall); submode = ((LttvTraceState *)(s->parent.t_context))->syscall_names[syscall]; /* There can be no system call from PID 0 : unknown state */ if(process->pid != 0) @@ -2346,22 +2427,8 @@ static gboolean trap_entry(void *hook_data, void *call_data) guint64 trap = ltt_event_get_long_unsigned(e, f); - if (unlikely(ts->nb_traps <= trap)) { - /* Fixup an incomplete trap table */ - GQuark *old_names = ts->trap_names; - guint new_nb_traps = max(trap + 1, ts->nb_traps * 2); - guint i; - GString *fe_name = g_string_new(""); - ts->trap_names = g_new(GQuark, new_nb_traps); - memcpy(ts->trap_names, old_names, - ts->nb_traps * sizeof(GQuark)); - for(i = ts->nb_traps ; i < new_nb_traps ; i++) { - g_string_printf(fe_name, "trap %d", i); - ts->trap_names[i] = g_quark_from_string(fe_name->str); - } - g_string_free(fe_name, TRUE); - ts->nb_traps = new_nb_traps; - } + expand_trap_table(ts, trap); + submode = ((LttvTraceState *)(s->parent.t_context))->trap_names[trap]; push_state(s, LTTV_STATE_TRAP, submode); @@ -2406,22 +2473,8 @@ static gboolean irq_entry(void *hook_data, void *call_data) LttvExecutionSubmode submode; guint64 irq = ltt_event_get_long_unsigned(e, f); - if (unlikely(ts->nb_irqs <= irq)) { - /* Fixup an incomplete irq table */ - GQuark *old_names = ts->irq_names; - guint new_nb_irqs = max(irq + 1, ts->nb_irqs * 2); - guint i; - GString *fe_name = g_string_new(""); - ts->irq_names = g_new(GQuark, new_nb_irqs); - memcpy(ts->irq_names, old_names, - ts->nb_irqs * sizeof(GQuark)); - for(i = ts->nb_irqs ; i < new_nb_irqs ; i++) { - g_string_printf(fe_name, "irq %d", i); - ts->irq_names[i] = g_quark_from_string(fe_name->str); - } - g_string_free(fe_name, TRUE); - ts->nb_irqs = new_nb_irqs; - } + expand_irq_table(ts, irq); + submode = ((LttvTraceState *)(s->parent.t_context))->irq_names[irq]; /* Do something with the info about being in user or system mode when int? */ @@ -2479,27 +2532,9 @@ static gboolean soft_irq_entry(void *hook_data, void *call_data) //guint8 ev_id = ltt_event_eventtype_id(e); LttvTraceHook *th = (LttvTraceHook *)hook_data; struct marker_field *f = lttv_trace_get_hook_field(th, 0); - LttvExecutionSubmode submode; guint64 softirq = ltt_event_get_long_unsigned(e, f); - guint64 nb_softirqs = ((LttvTraceState *)(s->parent.t_context))->nb_soft_irqs; - - if (unlikely(nb_softirqs <= softirq)) { - /* Fixup an incomplete softirq table */ - GQuark *old_names = ts->soft_irq_names; - guint new_nb_soft_irqs = max(softirq + 1, ts->nb_soft_irqs * 2); - guint i; - GString *fe_name = g_string_new(""); - ts->soft_irq_names = g_new(GQuark, new_nb_soft_irqs); - memcpy(ts->soft_irq_names, old_names, - ts->nb_soft_irqs * sizeof(GQuark)); - for(i = ts->nb_soft_irqs ; i < new_nb_soft_irqs ; i++) { - g_string_printf(fe_name, "softirq %d", i); - ts->soft_irq_names[i] = g_quark_from_string(fe_name->str); - } - g_string_free(fe_name, TRUE); - ts->nb_soft_irqs = new_nb_soft_irqs; - } + expand_soft_irq_table(ts, softirq); submode = ((LttvTraceState *)(s->parent.t_context))->soft_irq_names[softirq]; /* Do something with the info about being in user or system mode when int? */ @@ -2527,21 +2562,7 @@ static gboolean enum_interrupt(void *hook_data, void *call_data) lttv_trace_get_hook_field(th, 0))); guint irq = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 1)); - if (ts->nb_irqs <= irq) { - GQuark *old_names = ts->irq_names; - guint new_nb_irqs = max(irq + 1, ts->nb_irqs * 2); - guint i; - GString *fe_name = g_string_new(""); - ts->irq_names = g_new(GQuark, new_nb_irqs); - memcpy(ts->irq_names, old_names, - ts->nb_irqs * sizeof(GQuark)); - for(i = ts->nb_irqs ; i < new_nb_irqs ; i++) { - g_string_printf(fe_name, "irq %d", i); - ts->irq_names[i] = g_quark_from_string(fe_name->str); - } - g_string_free(fe_name, TRUE); - ts->nb_irqs = new_nb_irqs; - } + expand_irq_table(ts, irq); ts->irq_names[irq] = action; return FALSE; @@ -2691,21 +2712,7 @@ static gboolean dump_syscall(void *hook_data, void *call_data) address = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 1)); symbol = ltt_event_get_string(e, lttv_trace_get_hook_field(th, 2)); - if (ts->nb_syscalls <= id) { - GQuark *old_names = ts->syscall_names; - guint new_nb_syscalls = max(id + 1, ts->nb_syscalls * 2); - guint i; - GString *fe_name = g_string_new(""); - ts->syscall_names = g_new(GQuark, new_nb_syscalls); - memcpy(ts->syscall_names, old_names, - ts->nb_syscalls * sizeof(GQuark)); - for(i = ts->nb_syscalls ; i < new_nb_syscalls ; i++) { - g_string_printf(fe_name, "syscall %d", i); - ts->syscall_names[i] = g_quark_from_string(fe_name->str); - } - g_string_free(fe_name, TRUE); - ts->nb_syscalls = new_nb_syscalls; - } + expand_syscall_table(ts, id); ts->syscall_names[id] = g_quark_from_string(symbol); return FALSE; @@ -2725,23 +2732,7 @@ static gboolean dump_softirq(void *hook_data, void *call_data) address = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 1)); symbol = ltt_event_get_string(e, lttv_trace_get_hook_field(th, 2)); - if (ts->nb_soft_irqs <= id) { - /* Fixup an incomplete softirq table */ - GQuark *old_names = ts->soft_irq_names; - guint new_nb_soft_irqs = max(id + 1, ts->nb_soft_irqs * 2); - guint i; - GString *fe_name = g_string_new(""); - ts->soft_irq_names = g_new(GQuark, new_nb_soft_irqs); - memcpy(ts->soft_irq_names, old_names, - ts->nb_soft_irqs * sizeof(GQuark)); - for(i = ts->nb_soft_irqs ; i < new_nb_soft_irqs ; i++) { - g_string_printf(fe_name, "softirq %d", i); - ts->soft_irq_names[i] = g_quark_from_string(fe_name->str); - } - g_string_free(fe_name, TRUE); - ts->nb_soft_irqs = new_nb_soft_irqs; - } - + expand_soft_irq_table(ts, id); ts->soft_irq_names[id] = g_quark_from_string(symbol); return FALSE; -- 2.34.1