Use different event name for compat syscalls
authorMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sat, 17 Sep 2011 17:28:35 +0000 (13:28 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Sat, 17 Sep 2011 17:28:35 +0000 (13:28 -0400)
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
instrumentation/syscalls/headers/syscalls_unknown.h
ltt-events.h
lttng-syscalls.c

index 4b82f15ddd7920ea512e18c31b73f0f917b6ebfb..7050387fa7657347aeaa0b58d6df5cad49bb4316 100644 (file)
@@ -22,6 +22,19 @@ TRACE_EVENT(sys_unknown,
        ),
        TP_printk()
 )
+TRACE_EVENT(compat_sys_unknown,
+       TP_PROTO(unsigned int id, unsigned long *args),
+       TP_ARGS(id, args),
+       TP_STRUCT__entry(
+               __field(unsigned int, id)
+               __array(unsigned long, args, UNKNOWN_SYSCALL_NRARGS)
+       ),
+       TP_fast_assign(
+               tp_assign(id, id)
+               tp_memcpy(args, args, UNKNOWN_SYSCALL_NRARGS * sizeof(*args))
+       ),
+       TP_printk()
+)
 /* 
  * This is going to hook on sys_exit in the kernel.
  * We change the name so we don't clash with the sys_exit syscall entry
index dfab9a5ffe5c8f3d443da293e0db845e3d87d9f9..e00714d0e0526aee3e23257d15575a8a499449cb 100644 (file)
@@ -243,6 +243,7 @@ struct ltt_channel {
        struct ltt_transport *transport;
        struct ltt_event **sc_table;    /* for syscall tracing */
        struct ltt_event *sc_unknown;   /* for unknown syscalls */
+       struct ltt_event *sc_compat_unknown;
        struct ltt_event *sc_exit;      /* for syscall exit */
        int header_type;                /* 0: unset, 1: compact, 2: large */
        int metadata_dumped:1;
index 40bf9575ddbb071dc923542803e74a9d1e88437e..b712502b362d6f68942d57cfff5ce9928e344df1 100644 (file)
@@ -77,13 +77,11 @@ static struct trace_syscall_entry sc_table[] = {
 
 #undef CREATE_SYSCALL_TABLE
 
-static void syscall_entry_unknown(struct ltt_channel *chan,
+static void syscall_entry_unknown(struct ltt_event *event,
        struct pt_regs *regs, unsigned int id)
 {
        unsigned long args[UNKNOWN_SYSCALL_NRARGS];
-       struct ltt_event *event;
 
-       event = chan->sc_unknown;
        syscall_get_arguments(current, regs, 0, UNKNOWN_SYSCALL_NRARGS, args);
        __event_probe__sys_unknown(event, id, args);
 }
@@ -99,13 +97,17 @@ static void syscall_entry_probe(void *__data, struct pt_regs *regs, long id)
        struct ltt_channel *chan = __data;
        struct ltt_event *event;
 
-       if (unlikely(is_compat_task() || id >= ARRAY_SIZE(sc_table))) {
-               syscall_entry_unknown(chan, regs, id);
+       if (unlikely(is_compat_task())) {
+               syscall_entry_unknown(chan->sc_compat_unknown, regs, id);
+               return;
+       }
+       if (unlikely(id >= ARRAY_SIZE(sc_table))) {
+               syscall_entry_unknown(chan->sc_unknown, regs, id);
                return;
        }
        event = chan->sc_table[id];
        if (unlikely(!event)) {
-               syscall_entry_unknown(chan, regs, id);
+               syscall_entry_unknown(chan->sc_unknown, regs, id);
                return;
        }
        entry = &sc_table[id];
@@ -230,6 +232,22 @@ int lttng_syscalls_register(struct ltt_channel *chan, void *filter)
                }
        }
 
+       if (!chan->sc_compat_unknown) {
+               struct lttng_kernel_event ev;
+               const struct lttng_event_desc *desc =
+                       &__event_desc___compat_sys_unknown;
+
+               memset(&ev, 0, sizeof(ev));
+               strncpy(ev.name, desc->name, LTTNG_SYM_NAME_LEN);
+               ev.name[LTTNG_SYM_NAME_LEN - 1] = '\0';
+               ev.instrumentation = LTTNG_KERNEL_NOOP;
+               chan->sc_compat_unknown = ltt_event_create(chan, &ev, filter,
+                                                          desc);
+               if (!chan->sc_compat_unknown) {
+                       return -EINVAL;
+               }
+       }
+
        if (!chan->sc_exit) {
                struct lttng_kernel_event ev;
                const struct lttng_event_desc *desc =
This page took 0.028191 seconds and 4 git commands to generate.