#include <assert.h>
#include <string.h>
#include <stdio.h>
+#include <inttypes.h>
//#include <pango/pango.h>
static gint background_ready(void *hook_data, void *call_data)
{
ControlFlowData *resourceview_data = (ControlFlowData *)hook_data;
- LttvTrace *trace = (LttvTrace*)call_data;
resourceview_data->background_info_waiting--;
return 0;
}
+int before_execmode_hook_irq(void *hook_data, void *call_data);
+int before_execmode_hook_soft_irq(void *hook_data, void *call_data);
+int before_execmode_hook_trap(void *hook_data, void *call_data);
+
/* before_execmode_hook
*
* This function basically draw lines and icons. Two types of lines are drawn :
GQuark name;
{
gchar *str;
- str = g_strdup_printf("IRQ %llu [%s]", irq, (char*)g_quark_to_string(ts->irq_names[irq]));
+ str = g_strdup_printf("IRQ %" PRIu64 " [%s]", irq, (char*)g_quark_to_string(ts->irq_names[irq]));
name = g_quark_from_string(str);
g_free(str);
}
/*
* Check for LTT_CHANNEL_KERNEL channel name and event ID
- * corresponding to LTT_EVENT_TRAP_ENTRY or LTT_EVENT_TRAP_EXIT.
+ * corresponding to LTT_EVENT_TRAP/PAGE_FAULT_ENTRY or
+ * LTT_EVENT_TRAP/PAGE_FAULT_EXIT.
*/
if (tfc->tf->name != LTT_CHANNEL_KERNEL)
return 0;
minfo = marker_get_info_from_id(tfc->tf->mdata, e->event_id);
g_assert(minfo != NULL);
- if (minfo->name == LTT_EVENT_TRAP_ENTRY) {
+ if (minfo->name == LTT_EVENT_TRAP_ENTRY
+ || minfo->name == LTT_EVENT_PAGE_FAULT_ENTRY
+ || minfo->name == LTT_EVENT_PAGE_FAULT_NOSEM_ENTRY) {
trap = ltt_event_get_long_unsigned(e, lttv_trace_get_hook_field(th, 0));
- } else if (minfo->name == LTT_EVENT_TRAP_EXIT) {
+ } else if (minfo->name == LTT_EVENT_TRAP_EXIT
+ || minfo->name == LTT_EVENT_PAGE_FAULT_EXIT
+ || minfo->name == LTT_EVENT_PAGE_FAULT_NOSEM_EXIT) {
trap = ts->cpu_states[cpu].last_trap;
+ /* Handle case where a trace starts with a trap exit event */
+ if (trap == -1)
+ return 0;
} else
return 0;
guint nb_trace = lttv_traceset_number(traceset);
/* Only execute when called for the first trace's events request */
- if(!process_list->current_hash_data) return;
+ if(!process_list->current_hash_data)
+ return 0;
for(i = 0 ; i < nb_trace ; i++) {
g_free(process_list->current_hash_data[i]);