diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elaborate.cxx | 13 | ||||
-rw-r--r-- | tapset/ChangeLog | 5 | ||||
-rw-r--r-- | tapset/syscalls2.stp | 16 | ||||
-rw-r--r-- | testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | testsuite/systemtap.base/optim_arridx.exp | 2 | ||||
-rw-r--r-- | testsuite/systemtap.base/optim_arridx.stp | 6 |
7 files changed, 45 insertions, 8 deletions
@@ -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 () } |