summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Ch. Eigler <fche@elastic.org>2008-05-21 11:43:53 -0400
committerFrank Ch. Eigler <fche@elastic.org>2008-05-21 11:43:53 -0400
commit8fa48434a2fa7cd0302ed5d45d0cf5506796d9f9 (patch)
treef39c9c722c76603f4f5514d3092c74b3abfc5478
parentd0c4107b0e02c31acb062de829c6d104cb6918df (diff)
parente483d9dfa614ee17b488df7224ee22a0f7dc9386 (diff)
downloadsystemtap-steved-8fa48434a2fa7cd0302ed5d45d0cf5506796d9f9.tar.gz
systemtap-steved-8fa48434a2fa7cd0302ed5d45d0cf5506796d9f9.tar.xz
systemtap-steved-8fa48434a2fa7cd0302ed5d45d0cf5506796d9f9.zip
Merge branch 'master' of ssh://sources.redhat.com/git/systemtap
* 'master' of ssh://sources.redhat.com/git/systemtap: Use pointer_arg to fetch arguments for syscall.utime and compat_utime. Optimize compound and binary expression assignments.
-rw-r--r--ChangeLog5
-rw-r--r--elaborate.cxx13
-rw-r--r--tapset/ChangeLog5
-rw-r--r--tapset/syscalls2.stp16
-rw-r--r--testsuite/ChangeLog6
-rw-r--r--testsuite/systemtap.base/optim_arridx.exp2
-rw-r--r--testsuite/systemtap.base/optim_arridx.stp6
7 files changed, 45 insertions, 8 deletions
diff --git a/ChangeLog b/ChangeLog
index d6fd5c80..38d28928 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,11 @@
globals.
(visit_foreach_loop): Belatedly recognize index symbols as lvalues.
+2008-05-21 Stan Cox <scox@redhat.com>
+
+ * elaborate.cxx (dead_assignment_remover::visit_binary_expression): New.
+ (dead_assignment_remover::visit_assignment): Allow rhs simplification.
+
2008-05-20 Tim Moore <timoore@redhat.com>
* configure.ac: Check for tr1/unordered_map header.
diff --git a/elaborate.cxx b/elaborate.cxx
index 26786c00..2f246e2c 100644
--- a/elaborate.cxx
+++ b/elaborate.cxx
@@ -1713,6 +1713,7 @@ struct dead_assignment_remover: public traversing_visitor
// called with null current_expr.
void visit_assignment (assignment* e);
+ void visit_binary_expression (binary_expression* e);
void visit_arrayindex (arrayindex* e);
void visit_functioncall (functioncall* e);
void visit_if_statement (if_statement* e);
@@ -1743,6 +1744,7 @@ dead_assignment_remover::visit_assignment (assignment* e)
{
expression** last_expr = current_expr;
e->left->visit (this);
+ current_expr = &e->right;
e->right->visit (this);
current_expr = last_expr;
if (vut.read.find(leftvar) == vut.read.end()) // var never read?
@@ -1776,6 +1778,17 @@ dead_assignment_remover::visit_assignment (assignment* e)
}
void
+dead_assignment_remover::visit_binary_expression (binary_expression* e)
+{
+ expression** last_expr = current_expr;
+ current_expr = &e->left;
+ e->left->visit (this);
+ current_expr = &e->right;
+ e->right->visit (this);
+ current_expr = last_expr;
+}
+
+void
dead_assignment_remover::visit_arrayindex (arrayindex *e)
{
symbol *array = NULL;
diff --git a/tapset/ChangeLog b/tapset/ChangeLog
index 3afc7aa3..75baad0a 100644
--- a/tapset/ChangeLog
+++ b/tapset/ChangeLog
@@ -6,6 +6,11 @@
* vfs.stp (__find_bdevname): Rewrite.
* x86_64/syscalls.stp (syscall.pipe32): Fix argstr.
+2008-05-21 Mark Wielaard <mwielaard@redhat.com>
+
+ * syscalls2.stp (syscall.utime): Use pointer_arg to fetch arguments.
+ (syscall.compat_utime): Likewise.
+
2008-05-20 Mark Wielaard <mwielaard@redhat.com>
PR 5001
diff --git a/tapset/syscalls2.stp b/tapset/syscalls2.stp
index 344396f4..0db50347 100644
--- a/tapset/syscalls2.stp
+++ b/tapset/syscalls2.stp
@@ -2897,12 +2897,12 @@ probe syscall.ustat.return =
# long sys_utime(char __user * filename, struct utimbuf __user * times)
probe syscall.utime = kernel.function("sys_utime") ? {
name = "utime"
- filename_uaddr = $filename
- filename = user_string($filename)
- buf_uaddr = $times
+ filename_uaddr = pointer_arg(1)
+ filename = user_string_quoted(filename_uaddr)
+ buf_uaddr = pointer_arg(2)
actime = _struct_utimbuf_actime(buf_uaddr)
modtime = _struct_utimbuf_modtime(buf_uaddr)
- argstr = sprintf("%s, [%s, %s]", user_string_quoted($filename),
+ argstr = sprintf("%s, [%s, %s]", filename,
ctime(actime), ctime(modtime))
}
probe syscall.utime.return = kernel.function("sys_utime").return ? {
@@ -2913,12 +2913,12 @@ probe syscall.utime.return = kernel.function("sys_utime").return ? {
# long compat_sys_utime(char __user *filename, struct compat_utimbuf __user *t)
probe syscall.compat_utime = kernel.function("compat_sys_utime") ? {
name = "utime"
- filename_uaddr = $filename
- filename = user_string($filename)
- buf_uaddr = $t
+ filename_uaddr = pointer_arg(1)
+ filename = user_string_quoted(filename_uaddr)
+ buf_uaddr = pointer_arg(2)
actime = _struct_compat_utimbuf_actime(buf_uaddr)
modtime = _struct_compat_utimbuf_modtime(buf_uaddr)
- argstr = sprintf("%s, [%s, %s]", user_string_quoted($filename),
+ argstr = sprintf("%s, [%s, %s]", filename,
ctime(actime), ctime(modtime))
}
probe syscall.compat_utime.return = kernel.function("compat_sys_utime").return ? {
diff --git a/testsuite/ChangeLog b/testsuite/ChangeLog
index 80f2ae78..9396fe18 100644
--- a/testsuite/ChangeLog
+++ b/testsuite/ChangeLog
@@ -5,6 +5,12 @@
* buildok/eleven.stp, systemtap.examples/disktop.stp,
transok/three.stp: Adapt to new warnings.
+2008-05-21 Stan Cox <scox@redhat.com>
+
+ * systemtap.base/optim_arridx.stp: Test compound assignment and
+ binary expression.
+ * systemtap.base/optim_arridx.exp: Likewise.
+
2008-05-21 Mark Wielaard <mwielaard@redhat.com>
* buildok/aux_syscalls-embedded.stp: Don't check _struct_utimbuf_u
diff --git a/testsuite/systemtap.base/optim_arridx.exp b/testsuite/systemtap.base/optim_arridx.exp
index 447ad1f4..b7c5c360 100644
--- a/testsuite/systemtap.base/optim_arridx.exp
+++ b/testsuite/systemtap.base/optim_arridx.exp
@@ -45,6 +45,8 @@ for (1; (bb) < (10); (bb)++) (cc) += (bb)
for ((dd) = (1); (dd) < (10); 1) (dd) += (1)
if (1) (ee) = (1)
+(cc) = ((dd) = (5))
+(cc) = ((4) + ((cc) = (1)))
printf("%d %d %d %d %d", aa, bb, cc, dd, ee)
exit()
}
diff --git a/testsuite/systemtap.base/optim_arridx.stp b/testsuite/systemtap.base/optim_arridx.stp
index 4551bb3e..20710c7f 100644
--- a/testsuite/systemtap.base/optim_arridx.stp
+++ b/testsuite/systemtap.base/optim_arridx.stp
@@ -34,6 +34,12 @@ probe begin {
if (elide_global_b = 1)
ee = 1
+ // compound assignment
+ cc = elide_gg=dd=5
+
+ // binary expression
+ cc = ((elide_hh = 4) + (cc = 1))
+
printf("%d %d %d %d %d", aa, bb, cc, dd, ee)
exit ()
}