summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--tapset/aux_syscalls.stp2
-rw-r--r--tapset/inet_sock.stp50
-rw-r--r--tapset/networking.stp4
-rw-r--r--tapsets.cxx4
-rw-r--r--translate.cxx32
5 files changed, 46 insertions, 46 deletions
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp
index 42b2abf8..d2e43903 100644
--- a/tapset/aux_syscalls.stp
+++ b/tapset/aux_syscalls.stp
@@ -1790,6 +1790,7 @@ function _struct_sigaction_u:string(uaddr:long)
function _struct_sigaction32_u:string(uaddr:long)
%{ /* pure */
+#ifdef CONFIG_COMPAT
#include <linux/compat.h>
// There seems to be no public cross arch header that defines this.
@@ -1831,4 +1832,5 @@ function _struct_sigaction32_u:string(uaddr:long)
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
+#endif
%}
diff --git a/tapset/inet_sock.stp b/tapset/inet_sock.stp
index 59ce7fea..f889ccd7 100644
--- a/tapset/inet_sock.stp
+++ b/tapset/inet_sock.stp
@@ -1,42 +1,42 @@
// inet_sock information tapset
// Copyright (C) 2006 IBM Corp.
// Copyright (C) 2006 Intel Corporation.
+// Copyright (C) 2009 Red Hat, Inc.
//
// This file is part of systemtap, and is free software. You can
// redistribute it and/or modify it under the terms of the GNU General
// Public License (GPL); either version 2, or (at your option) any
// later version.
-%{
-#include <linux/version.h>
-#include <net/sock.h>
-#include <net/tcp.h>
-#include <net/ip.h>
-
-#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)
-#define LPORT (inet->inet.num)
-#define DADDR (&inet->inet.daddr)
-#else
-#define LPORT (inet->num)
-#define DADDR (&inet->daddr)
-#endif
-%}
-
-// Get local port number
+// Get local port number given a pointer to a kernel socket,
+// as for example kernel.function("tcp_accept").return will
+// return.
function inet_get_local_port:long(sock:long)
-%{ /* pure */
- struct inet_sock *inet = (struct inet_sock *) (long) THIS->sock;
- THIS->__retvalue = kread(&(LPORT));
- CATCH_DEREF_FAULT();
-%}
+{
+%(kernel_v < "2.6.21" %?
+ port = @cast(sock, "inet_sock", "kernel")->inet->num;
+%:
+ port = @cast(sock, "inet_sock", "kernel")->num;
+%)
+ return port;
+}
-// Get IP source address string
+// Get IP source address string given a pointer to a kernel socket.
function inet_get_ip_source:string(sock:long)
+{
+%(kernel_v < "2.6.21" %?
+ daddr = @cast(sock, "inet_sock", "kernel")->inet->daddr;
+%:
+ daddr = @cast(sock, "inet_sock", "kernel")->daddr;
+%)
+ return daddr_to_string(daddr);
+}
+
+// Turns a daddr as found in an inet_sock into a dotted ip string.
+function daddr_to_string:string(daddr:long)
%{ /* pure */
- struct inet_sock *inet = (struct inet_sock *) (long) THIS->sock;
union { __u32 d; unsigned char addr[4]; } u;
- u.d = kread(DADDR);
+ u.d = THIS->daddr;
sprintf(THIS->__retvalue, "%d.%d.%d.%d",
u.addr[0], u.addr[1], u.addr[2], u.addr[3]);
- CATCH_DEREF_FAULT();
%}
diff --git a/tapset/networking.stp b/tapset/networking.stp
index d6e90259..a147441a 100644
--- a/tapset/networking.stp
+++ b/tapset/networking.stp
@@ -6,10 +6,6 @@
// Public License (GPL); either version 2, or (at your option) any
// later version.
-%{
-#include <linux/netdevice.h>
-%}
-
/**
* probe netdev.receive - Data recieved from network device.
* @dev_name: The name of the device. e.g: eth0, ath1.
diff --git a/tapsets.cxx b/tapsets.cxx
index e5efa153..74a22480 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -2296,9 +2296,9 @@ struct dwflpp
assert(memstream);
fprintf(memstream, "{\n");
- fprintf(memstream, prelude.c_str());
+ fprintf(memstream, "%s", prelude.c_str());
bool deref = c_emit_location (memstream, head, 1);
- fprintf(memstream, postlude.c_str());
+ fprintf(memstream, "%s", postlude.c_str());
fprintf(memstream, " goto out;\n");
// dummy use of deref_fault label, to disable warning if deref() not used
diff --git a/translate.cxx b/translate.cxx
index 135830df..655937d7 100644
--- a/translate.cxx
+++ b/translate.cxx
@@ -4954,21 +4954,23 @@ translate_pass (systemtap_session& s)
s.op->newline() << s.embeds[i]->code << "\n";
}
- s.op->newline() << "static struct {";
- s.op->indent(1);
- for (unsigned i=0; i<s.globals.size(); i++)
- {
- s.up->emit_global (s.globals[i]);
- }
- s.op->newline(-1) << "} global = {";
- s.op->newline(1);
- for (unsigned i=0; i<s.globals.size(); i++)
- {
- if (pending_interrupts) return 1;
- s.up->emit_global_init (s.globals[i]);
- }
- s.op->newline(-1) << "};";
- s.op->assert_0_indent();
+ if (s.globals.size()>0) {
+ s.op->newline() << "static struct {";
+ s.op->indent(1);
+ for (unsigned i=0; i<s.globals.size(); i++)
+ {
+ s.up->emit_global (s.globals[i]);
+ }
+ s.op->newline(-1) << "} global = {";
+ s.op->newline(1);
+ for (unsigned i=0; i<s.globals.size(); i++)
+ {
+ if (pending_interrupts) return 1;
+ s.up->emit_global_init (s.globals[i]);
+ }
+ s.op->newline(-1) << "};";
+ s.op->assert_0_indent();
+ }
for (map<string,functiondecl*>::iterator it = s.functions.begin(); it != s.functions.end(); it++)
{