dwarves/ctracer.c

426 lines
11 KiB
C
Raw Normal View History

/*
Copyright (C) 2006 Mandriva Conectiva S.A.
Copyright (C) 2006 Arnaldo Carvalho de Melo <acme@mandriva.com>
This program is free software; you can redistribute it and/or modify it
under the terms of version 2 of the GNU General Public License as
published by the Free Software Foundation.
*/
#include <getopt.h>
#include <limits.h>
#include <search.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include "dwarves.h"
static struct cus *cus;
static struct cus *kprobes_cus;
static LIST_HEAD(cus__definitions);
static LIST_HEAD(cus__fwd_decls);
static void *jprobes_emitted;
static void *kretprobes_emitted;
static int methods__compare(const void *a, const void *b)
{
return strcmp(a, b);
}
static int methods__add(void **table, const char *str)
{
char **s = tsearch(str, table, methods__compare);
if (s != NULL) {
if (*s == str) {
char *dup = strdup(str);
if (dup != NULL)
*s = dup;
else {
tdelete(str, table, methods__compare);
return -1;
}
} else
return -1;
} else
return -1;
return 0;
}
static void method__add(struct cu *cu, struct function *function)
{
list_add(&function->tool_node, &cu->tool_list);
}
static struct tag *function__filter(struct tag *tag, struct cu *cu, void *cookie)
{
struct function *function;
if (tag->tag != DW_TAG_subprogram)
return NULL;
function = tag__function(tag);
if (function__inlined(function) ||
function->abstract_origin != 0 ||
!ftype__has_parm_of_type(&function->proto, cookie, cu))
return NULL;
return tag;
}
static int find_methods_iterator(struct tag *tag, struct cu *cu, void *cookie)
{
if (tag->tag == DW_TAG_subprogram) {
struct function *function = tag__function(tag);
method__add(cu, function);
}
return 0;
}
static int cu_find_methods_iterator(struct cu *cu, void *cookie)
{
struct tag *target = cu__find_struct_by_name(cu, cookie);
if (target == NULL)
return 0;
return cu__for_each_tag(cu, find_methods_iterator, target, function__filter);
}
static int function__emit_kprobes(struct function *self, const struct cu *cu,
const struct tag *target)
{
char bf[2048];
char jprobe_name[256];
struct parameter *pos;
const char *name = function__name(self, cu);
snprintf(jprobe_name, sizeof(jprobe_name), "jprobe_entry__%s", name);
ftype__snprintf(&self->proto, cu, bf, sizeof(bf), jprobe_name, 0, 0, 0);
printf("static %s\n"
"{\n", bf);
list_for_each_entry(pos, &self->proto.parms, tag.node) {
struct tag *type = cu__find_tag_by_id(cu, pos->tag.type);
if (type->tag != DW_TAG_pointer_type)
continue;
type = cu__find_tag_by_id(cu, type->type);
if (type == NULL || type->id != target->id)
continue;
printf("\tprintk(\"-> %s: %s=%%p\\n\", %s);\n",
name, pos->name, pos->name);
}
printf("\n\tjprobe_return();\n"
"\t/* NOTREACHED */%s\n}\n\n",
self->proto.tag.type != 0 ? "\n\treturn 0;" : "");
printf("static struct jprobe jprobe__%s = {\n"
"\t.kp = { .symbol_name = \"%s\", },\n"
"\t.entry = (kprobe_opcode_t *)jprobe_entry__%s,\n"
"};\n\n", name, name, name);
return 0;
}
static int cu_emit_kprobes_iterator(struct cu *cu, void *cookie)
{
struct tag *target = cu__find_struct_by_name(cu, cookie);
struct function *pos;
list_for_each_entry(pos, &cu->tool_list, tool_node) {
if (methods__add(&jprobes_emitted, function__name(pos, cu)) != 0)
continue;
pos->priv = (void *)1; /* Mark as visited, for the table iterator */
cus__emit_ftype_definitions(cus, cu, &pos->proto);
function__emit_kprobes(pos, cu, target);
}
return 0;
}
static int cu_emit_kprobes_table_iterator(struct cu *cu, void *cookie)
{
struct function *pos;
list_for_each_entry(pos, &cu->tool_list, tool_node)
if (pos->priv != NULL)
printf("\t&jprobe__%s,\n", function__name(pos, cu));
return 0;
}
static int function__emit_kretprobes(struct function *self,
const struct cu *cu)
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
{
const char *name = function__name(self, cu);
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
printf("static int kretprobe_handler__%s(struct kretprobe_instance *ri, "
"struct pt_regs *regs)\n"
"{\n"
"\tprintk(\"<- %s\\n\");\n"
"\treturn 0;\n"
"}\n\n", name, name);
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
printf("static struct kretprobe kretprobe__%s = {\n"
"\t.kp = { .symbol_name = \"%s\", },\n"
"\t.handler = (kretprobe_handler_t)kretprobe_handler__%s,\n"
"\t.maxactive = -1,\n\n"
"};\n\n", name, name, name);
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
}
static int cu_emit_kretprobes_iterator(struct cu *cu, void *cookie)
{
struct function *pos;
list_for_each_entry(pos, &cu->tool_list, tool_node) {
if (methods__add(&kretprobes_emitted,
function__name(pos, cu)) != 0)
continue;
pos->priv = (void *)1; /* Mark as visited, for the table iterator */
function__emit_kretprobes(pos, cu);
}
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
return 0;
}
static int cu_emit_kretprobes_table_iterator(struct cu *cu, void *cookie)
{
struct function *pos;
list_for_each_entry(pos, &cu->tool_list, tool_node)
if (pos->priv != NULL)
printf("\t&kretprobe__%s,\n", function__name(pos, cu));
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
return 0;
}
static void emit_function_defs(const char *fn)
{
struct cu *cu;
struct tag *f = cus__find_function_by_name(kprobes_cus, &cu, fn);
if (f != NULL) {
cus__emit_ftype_definitions(kprobes_cus, cu,
&tag__function(f)->proto);
tag__print(f, cu, NULL, NULL);
puts(";\n");
}
}
static void emit_struct_defs(const char *name)
{
struct cu *cu;
struct tag *c = cus__find_struct_by_name(kprobes_cus, &cu, name);
if (c != NULL) {
cus__emit_type_definitions(kprobes_cus, cu, c);
type__emit(c, cu, NULL, NULL);
}
}
static void emit_class_fwd_decl(const char *name)
{
struct cu *cu;
struct tag *c = cus__find_struct_by_name(kprobes_cus, &cu, name);
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
if (c != NULL)
cus__emit_fwd_decl(kprobes_cus, tag__type(c));
}
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
static void emit_module_preamble(void)
{
emit_struct_defs("jprobe");
emit_struct_defs("kretprobe");
emit_class_fwd_decl("pt_regs");
emit_class_fwd_decl("kretprobe_instance");
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
emit_function_defs("yield");
emit_function_defs("printk");
emit_function_defs("register_jprobe");
emit_function_defs("unregister_jprobe");
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
emit_function_defs("register_kretprobe");
emit_function_defs("unregister_kretprobe");
emit_function_defs("jprobe_return");
}
static void emit_module_initcall(const char *fn)
{
printf("int init_module(void) __attribute__((alias(\"%s\")));\n\n", fn);
}
static void emit_module_exitcall(const char *fn)
{
printf("int cleanup_module(void) __attribute__((alias(\"%s\")));\n\n", fn);
}
static void emit_module_license(const char *license)
{
printf("static const char __mod_license[] "
"__attribute__((__used__)) \n"
"\t__attribute__((section(\".modinfo\"),unused)) = "
"\"license=%s\";\n\n", license);
}
static void emit_module_init(void)
{
printf("static int __attribute__ "
"((__section__ (\".init.text\"))) jprobe_init(void)\n"
"{\n"
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
" unsigned int i = 0, nj = 0, nr = 0;\n"
" while (jprobes[i] != (void *)0) {\n"
" int err = register_jprobe(jprobes[i]);\n"
" if (err != 0)\n"
" printk(\"register_jprobe(%%s) failed, "
"returned %%d\\n\",\n"
" jprobes[i]->kp.symbol_name, err);\n"
" else\n"
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
" ++nj;\n"
" err = register_kretprobe(kretprobes[i]);\n"
" if (err != 0)\n"
" printk(\"register_kretprobe(%%s) failed, "
"returned %%d\\n\",\n"
" kretprobes[i]->kp.symbol_name, err);\n"
" else\n"
" ++nr;\n"
" ++i;\n"
" if ((i % 5) == 0)\n"
" yield();"
" }\n\n"
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
" printk(\"ctracer: registered %%u entry probes\\n\", nj);\n"
" printk(\"ctracer: registered %%u exit probes\\n\", nr);\n"
"\n"
" return 0;\n"
"}\n\n");
emit_module_initcall("jprobe_init");
}
static void emit_module_exit(void)
{
printf("static void __attribute__ "
"((__section__ (\".exit.text\"))) jprobe_exit(void)\n"
"{\n"
" int i = 0;\n"
" while (jprobes[i] != (void *)0) {\n"
" unregister_jprobe(jprobes[i]);\n"
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
" unregister_kretprobe(kretprobes[i]);\n"
" ++i;\n"
" if ((i % 5) == 0)\n"
" yield();"
" }\n\n"
"}\n\n");
emit_module_exitcall("jprobe_exit");
}
static struct option long_options[] = {
{ "dir", required_argument, NULL, 'D' },
{ "glob", required_argument, NULL, 'g' },
{ "kprobes", required_argument, NULL, 'k' },
{ "recursive", no_argument, NULL, 'r' },
{ "help", no_argument, NULL, 'h' },
{ NULL, 0, NULL, 0, }
};
static void usage(void)
{
fprintf(stdout,
"usage: ctracer [options] <filename> <class_name>\n"
" where: \n"
" -D, --dir load files in this directory\n"
" -g, --glob file mask to load\n"
" -k, --kprobes kprobes object file\n"
" -r, --recursive recursively load files\n"
" -h, --help show this help message\n");
}
int main(int argc, char *argv[])
{
int option, option_index, recursive = 0;
const char *filename = NULL, *dirname = NULL, *glob = NULL,
*kprobes_filename = NULL;
char *class_name = NULL;
while ((option = getopt_long(argc, argv, "D:g:k:rh",
long_options, &option_index)) >= 0)
switch (option) {
case 'D': dirname = optarg; break;
case 'g': glob = optarg; break;
case 'k': kprobes_filename = optarg; break;
case 'r': recursive = 1; break;
case 'h': usage(); return EXIT_SUCCESS;
default: usage(); return EXIT_FAILURE;
}
if (optind < argc) {
switch (argc - optind) {
case 1: if (kprobes_filename == NULL) {
usage();
return EXIT_FAILURE;
}
class_name = argv[optind++]; break;
case 2: filename = argv[optind++];
class_name = argv[optind++]; break;
default: usage(); return EXIT_FAILURE;
}
} else {
usage();
return EXIT_FAILURE;
}
dwarves__init(0);
cus = cus__new(&cus__definitions, &cus__fwd_decls);
if (cus == NULL) {
out_enomem:
fputs("ctracer: insufficient memory\n", stderr);
return EXIT_FAILURE;
}
if (kprobes_filename != NULL) {
kprobes_cus = cus__new(&cus__definitions, &cus__fwd_decls);
if (kprobes_cus == NULL)
goto out_enomem;
if (cus__load(kprobes_cus, kprobes_filename) != 0) {
filename = kprobes_filename;
goto out_dwarf_err;
}
} else
kprobes_cus = cus;
if (dirname != NULL && cus__load_dir(cus, dirname, glob,
recursive) != 0) {
fprintf(stderr, "ctracer: couldn't load DWARF info "
"from %s dir with glob %s\n",
dirname, glob);
return EXIT_FAILURE;
}
if (filename != NULL && cus__load(cus, filename) != 0) {
out_dwarf_err:
fprintf(stderr, "ctracer: couldn't load DWARF info from %s\n",
filename);
return EXIT_FAILURE;
}
emit_module_preamble();
cus__for_each_cu(cus, cu_find_methods_iterator, class_name, NULL);
cus__for_each_cu(cus, cu_emit_kprobes_iterator, class_name, NULL);
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
cus__for_each_cu(cus, cu_emit_kretprobes_iterator, NULL, NULL);
puts("static struct jprobe *jprobes[] = {");
cus__for_each_cu(cus, cu_emit_kprobes_table_iterator, NULL, NULL);
puts("\t(void *)0,\n};\n");
[CTRACER]: Emit kretprobes too Now we get this using 'ctracer vmlinux sk_buff', for just one ping packet: [14402.349410] -> ne2k_pci_block_input: skb=cea97c00 [14402.351310] <- ne2k_pci_block_input [14402.352712] -> eth_type_trans: skb=cea97c00 [14402.353909] <- eth_type_trans [14402.354721] -> netif_rx: skb=cea97c00 [14402.355682] <- netif_rx [14402.356691] -> netif_receive_skb: skb=cea97c00 [14402.358007] -> arp_rcv: skb=cea97c00 [14402.359023] -> arp_process: skb=cea97c00 [14402.360152] -> ip_route_input: skb=cea97c00 [14402.361980] <- ip_route_input [14402.369199] -> eth_header: skb=cea97b40 [14402.370336] <- eth_header [14402.371159] -> arp_xmit: skb=cea97b40 [14402.372580] -> dev_queue_xmit: skb=cea97b40 [14402.373742] -> pfifo_fast_enqueue: skb=cea97b40 [14402.374849] <- pfifo_fast_enqueue [14402.375827] -> dev_hard_start_xmit: skb=cea97b40 [14402.377021] -> ei_start_xmit: skb=cea97b40 [14402.378759] -> kfree_skb: skb=cea97b40 [14402.379783] -> __kfree_skb: skb=cea97b40 [14402.380854] -> kfree_skbmem: skb=cea97b40 [14402.382675] -> ne2k_pci_block_input: skb=cea97a80 [14402.383816] <- ne2k_pci_block_input [14402.384656] -> eth_type_trans: skb=cea97a80 [14402.385632] <- eth_type_trans [14402.386366] -> netif_rx: skb=cea97a80 [14402.387220] <- netif_rx [14402.387949] -> skb_release_data: skb=cea97b40 [14402.389069] <- skb_release_data [14402.389856] <- kfree_skbmem [14402.390715] <- __kfree_skb [14402.391761] <- kfree_skb [14402.392875] <- ei_start_xmit [14402.393594] <- dev_hard_start_xmit [14402.394459] <- dev_queue_xmit [14402.395169] <- arp_xmit [14402.395852] -> kfree_skb: skb=cea97c00 [14402.396764] -> __kfree_skb: skb=cea97c00 [14402.397717] -> kfree_skbmem: skb=cea97c00 [14402.398677] -> skb_release_data: skb=cea97c00 [14402.399909] <- skb_release_data [14402.400637] <- kfree_skbmem [14402.401267] <- __kfree_skb [14402.401875] <- kfree_skb [14402.402489] <- arp_process [14402.403156] <- arp_rcv [14402.403757] <- netif_receive_skb [14402.404674] -> netif_receive_skb: skb=cea97a80 [14402.405789] -> ip_rcv: skb=cea97a80 [14402.406837] -> ip_route_input: skb=cea97a80 [14402.407845] <- ip_route_input [14402.408654] -> ip_local_deliver: skb=cea97a80 [14402.410031] -> icmp_rcv: skb=cea97a80 [14402.411105] -> __skb_checksum_complete: skb=cea97a80 [14402.412397] <- __skb_checksum_complete [14402.413512] -> icmp_echo: skb=cea97a80 [14402.414584] -> icmp_reply: skb=cea97a80 [14402.415665] -> ip_options_echo: skb=cea97a80 [14402.416827] <- ip_options_echo [14402.418188] -> dummy_xfrm_decode_session: skb=cea97a80 [14402.419426] <- dummy_xfrm_decode_session [14402.422520] -> icmp_glue_bits: skb=cea97c00 [14402.424001] <- icmp_glue_bits [14402.426607] -> ip_output: skb=cea97c00 [14402.428314] -> neigh_resolve_output: skb=cea97c00 [14402.429559] -> __neigh_event_send: skb=cea97c00 [14402.430747] <- __neigh_event_send [14402.432143] -> eth_header: skb=cea97c00 [14402.433059] <- eth_header [14402.433754] -> dev_queue_xmit: skb=cea97c00 [14402.434763] -> pfifo_fast_enqueue: skb=cea97c00 [14402.435782] <- pfifo_fast_enqueue [14402.437177] -> dev_hard_start_xmit: skb=cea97c00 [14402.438281] -> ei_start_xmit: skb=cea97c00 [14402.439634] -> kfree_skb: skb=cea97c00 [14402.440543] -> __kfree_skb: skb=cea97c00 [14402.441530] -> sock_wfree: skb=cea97c00 [14402.442730] <- sock_wfree [14402.443433] -> kfree_skbmem: skb=cea97c00 [14402.444383] -> skb_release_data: skb=cea97c00 [14402.445628] <- skb_release_data [14402.446370] <- kfree_skbmem [14402.447004] <- __kfree_skb [14402.447613] <- kfree_skb [14402.448207] <- ei_start_xmit [14402.448862] <- dev_hard_start_xmit [14402.449627] <- dev_queue_xmit [14402.450328] <- neigh_resolve_output [14402.451159] <- ip_output [14402.451987] <- icmp_reply [14402.452639] <- icmp_echo [14402.453326] -> kfree_skb: skb=cea97a80 [14402.454220] -> __kfree_skb: skb=cea97a80 [14402.601772] -> kfree_skbmem: skb=cea97a80 [14402.602809] -> skb_release_data: skb=cea97a80 [14402.603762] <- skb_release_data [14402.604479] <- kfree_skbmem [14402.605072] <- __kfree_skb [14402.605646] <- kfree_skb [14402.606392] <- icmp_rcv [14402.606996] <- ip_local_deliver [14402.607694] <- ip_rcv [14402.608236] <- netif_receive_skb [14408.809296] -> arp_solicit: skb=00000000 [14408.811051] -> eth_header: skb=cea97a80 [14408.811977] <- eth_header [14408.812845] -> arp_xmit: skb=cea97a80 [14408.813765] -> dev_queue_xmit: skb=cea97a80 [14408.814760] -> pfifo_fast_enqueue: skb=cea97a80 [14408.815763] <- pfifo_fast_enqueue [14408.816657] -> dev_hard_start_xmit: skb=cea97a80 [14408.817730] -> ei_start_xmit: skb=cea97a80 [14408.818989] -> kfree_skb: skb=cea97a80 [14408.819892] -> __kfree_skb: skb=cea97a80 [14408.821529] -> ne2k_pci_block_input: skb=cea97c00 [14408.822605] <- ne2k_pci_block_input [14408.823442] -> eth_type_trans: skb=cea97c00 [14408.824454] <- eth_type_trans [14408.825198] -> netif_rx: skb=cea97c00 [14408.826049] <- netif_rx [14408.826732] -> kfree_skbmem: skb=cea97a80 [14408.827681] -> skb_release_data: skb=cea97a80 [14408.828755] <- skb_release_data [14408.829482] <- kfree_skbmem [14408.830111] <- __kfree_skb [14408.830720] <- kfree_skb [14408.831312] <- ei_start_xmit [14408.835039] <- dev_hard_start_xmit [14408.835864] <- dev_queue_xmit [14408.836495] <- arp_xmit [14408.837114] <- arp_solicit [14408.837889] -> netif_receive_skb: skb=cea97c00 [14408.838897] -> arp_rcv: skb=cea97c00 [14408.839933] -> arp_process: skb=cea97c00 [14408.841326] -> kfree_skb: skb=cea97c00 [14408.842194] -> __kfree_skb: skb=cea97c00 [14408.843070] -> kfree_skbmem: skb=cea97c00 [14408.844025] -> skb_release_data: skb=cea97c00 [14408.844932] <- skb_release_data [14408.845595] <- kfree_skbmem [14408.846181] <- __kfree_skb [14408.846749] <- kfree_skb [14408.847299] <- arp_process [14408.847944] <- arp_rcv [14408.848473] <- netif_receive_skb Now we're getting to the point where a better, non printk based relaying module is in demand, will look at blktrace relayfs stuff. Getting access to the traced parameter at kretprobes time is badly needed, so that we can correlate the exit calls with the entry ones. Signed-off-by: Arnaldo Carvalho de Melo <acme@mandriva.com> [14385.224958] ctracer: registered 331 entry probes [14385.248000] ctracer: registered 331 exit probes
2006-12-24 02:42:39 +01:00
puts("static struct kretprobe *kretprobes[] = {");
cus__for_each_cu(cus, cu_emit_kretprobes_table_iterator, NULL, NULL);
puts("\t(void *)0,\n};\n\n");
emit_module_init();
emit_module_exit();
emit_module_license("GPL");
return EXIT_SUCCESS;
}