diff options
author | fche <fche> | 2005-08-02 18:03:17 +0000 |
---|---|---|
committer | fche <fche> | 2005-08-02 18:03:17 +0000 |
commit | a781f4011250a7d6450025a92336250044ab46eb (patch) | |
tree | 83f207ad0014565aeb28b2f5dda7b48e28f8feab | |
parent | 71696fcfa2761a2d09a0538c0101913f1c41925c (diff) | |
download | systemtap-steved-a781f4011250a7d6450025a92336250044ab46eb.tar.gz systemtap-steved-a781f4011250a7d6450025a92336250044ab46eb.tar.xz systemtap-steved-a781f4011250a7d6450025a92336250044ab46eb.zip |
2005-08-02 Frank Ch. Eigler <fche@elastic.org>
* loc2.c (emit_loc_address): Emit interleaved declaration into
its own nested { } block.
* tapsets.cxx (literal_stmt_for_local): Emit deref_fault block
unconditionally.
* tapset/builtin_hexstring.stp: New builtin.
* testsuite/buildok/six.stp: New test.
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | loc2c.c | 2 | ||||
-rw-r--r-- | tapset/builtin_hexstring.stp | 7 | ||||
-rw-r--r-- | tapsets.cxx | 18 | ||||
-rwxr-xr-x | testsuite/buildok/six.stp | 5 |
5 files changed, 33 insertions, 8 deletions
@@ -1,5 +1,14 @@ 2005-08-02 Frank Ch. Eigler <fche@elastic.org> + * loc2.c (emit_loc_address): Emit interleaved declaration into + its own nested { } block. + * tapsets.cxx (literal_stmt_for_local): Emit deref_fault block + unconditionally. + * tapset/builtin_hexstring.stp: New builtin. + * testsuite/buildok/six.stp: New test. + +2005-08-02 Frank Ch. Eigler <fche@elastic.org> + * tapsets.cxx (emit_registrations): Treat module_name="kernel" as if module_name="". @@ -1317,6 +1317,7 @@ emit_loc_address (FILE *out, struct location *loc, unsigned int indent, emit ("%s", loc->address.program); else { + emit ("{\n"); emit ("%*s%s " STACKFMT, (indent + 1) * 2, "", STACK_TYPE, 0); for (unsigned int i = 1; i < loc->address.stack_depth; ++i) emit (", " STACKFMT, i); @@ -1324,6 +1325,7 @@ emit_loc_address (FILE *out, struct location *loc, unsigned int indent, emit ("%s%*s%s = " STACKFMT ";\n", loc->address.program, (indent + 1) * 2, "", target, 0); + emit ("}\n"); } } diff --git a/tapset/builtin_hexstring.stp b/tapset/builtin_hexstring.stp new file mode 100644 index 00000000..c441bbc4 --- /dev/null +++ b/tapset/builtin_hexstring.stp @@ -0,0 +1,7 @@ +function _hexstring (num) %{ + sprintf (THIS->__retvalue, "%llx", (long long) THIS->num); +%} + +function hexstring (num) { + return "" . _hexstring (num + 0) +} diff --git a/tapsets.cxx b/tapsets.cxx index a51efad7..780f4c4f 100644 --- a/tapsets.cxx +++ b/tapsets.cxx @@ -581,15 +581,17 @@ dwflpp assert(memstream); bool deref = c_emit_location (memstream, head, 1); + fprintf(memstream, " goto out;\n"); - fprintf(memstream, "goto out;\n"); - if (deref) - { - fprintf(memstream, - "deref_fault:\n" - " c->errorcount++; \n" - " goto out;\n\n"); - } + // dummy use of deref_fault label, to disable warning if deref() not used + fprintf(memstream, "if (0) goto deref_fault;\n"); + + // XXX: deref flag not reliable; emit fault label unconditionally + if (deref) ; + fprintf(memstream, + "deref_fault:\n" + " c->errorcount++; \n" + " goto out;\n"); fclose (memstream); string result(buf); diff --git a/testsuite/buildok/six.stp b/testsuite/buildok/six.stp new file mode 100755 index 00000000..a63ad99b --- /dev/null +++ b/testsuite/buildok/six.stp @@ -0,0 +1,5 @@ +#! stap -p4 + +probe kernel.function("context_switch") { + log ("switch from=" . hexstring($prev) . " to=" . hexstring($next)) +} |