AC_PREREQ(2.57)
AC_INIT(FULL-PACKAGE-NAME, VERSION, BUG-REPORT-ADDRESS)
#AC_WITH_LTDL # not needed ?
-AM_INIT_AUTOMAKE(LinuxTraceToolkitViewer,0.8.27-05032006)
+AM_INIT_AUTOMAKE(LinuxTraceToolkitViewer,0.8.28-09032006)
AM_CONFIG_HEADER(config.h)
AM_PROG_LIBTOOL
</enum>
</type>
+ <type name=interface_state>
+ <enum>
+ <label name=UP value=0/> <description></description>
+ <label name=DOWN value=1/> <description></description>
+ </enum>
+ </type>
+
<event name=enumerate_file_descriptors>
<description>List of open file descriptors</description>
<field name="name"><description>File name</description><string/></field>
<field name="status"> <description>Process status</description> <typeref name=process_status/> </field>
</event>
+ <event name=enumerate_network_ip_interface>
+ <description>List of each IP interface up</description>
+ <field name="name"> <description>Interface name</description><string/></field>
+ <field name="addr"> <description>IP address</description> <uint size=4 network/> </field>
+ <field name="status"> <description>Status of the interface</description> <typeref name=interface_state/> </field>
+ </event>
+
<event name=statedump_end>
<description>Kernel state dump complete</description>
</event>
typedef struct _LttvNameTables {
// FIXME GQuark *eventtype_names;
GQuark *syscall_names;
+ guint nb_syscalls;
GQuark *trap_names;
GQuark *irq_names;
GQuark *soft_irq_names;
lttv_trace_hook_destroy(&h);
name_tables->syscall_names = g_new(GQuark, nb);
+ name_tables->nb_syscalls = nb;
for(i = 0 ; i < nb ; i++) {
name_tables->syscall_names[i] = ltt_enum_string_get(t, i);
name_tables = (LttvNameTables *)*(v.v_pointer);
//tcs->eventtype_names = name_tables->eventtype_names;
tcs->syscall_names = name_tables->syscall_names;
+ tcs->nb_syscalls = name_tables->nb_syscalls;
tcs->trap_names = name_tables->trap_names;
tcs->irq_names = name_tables->irq_names;
tcs->soft_irq_names = name_tables->soft_irq_names;
LttvExecutionSubmode submode;
- submode = ((LttvTraceState *)(s->parent.t_context))->syscall_names[
- ltt_event_get_unsigned(e, f)];
+ guint nb_syscalls = ((LttvTraceState *)(s->parent.t_context))->nb_syscalls;
+ guint syscall = ltt_event_get_unsigned(e, f);
+
+ if(syscall < nb_syscalls) {
+ submode = ((LttvTraceState *)(s->parent.t_context))->syscall_names[
+ syscall];
+ } else {
+ /* Fixup an incomplete syscall table */
+ GString *string = g_string_new("");
+ g_string_printf(string, "syscall %u", syscall);
+ submode = g_quark_from_string(string->str);
+ g_string_free(string, TRUE);
+ }
push_state(s, LTTV_STATE_SYSCALL, submode);
return FALSE;
}