* translate.cxx (itervar): New class.
(*::visit_foreach_loop): Implement.
Various bug fixes.
* staptree.cxx (deep_copy_visitor::*): Copy tok fields.
* elaborate.cxx (lvalue_aware_traversing_visitor):
(mutated_map_collector):
(no_map_mutation_during_iteration_check): New classes.
(semantic_pass_maps): New function to check map usage.
(semantic_pass): Call it.
* testsuite/transok/eight.stp: Test 'foreach' loop translation.
* testsuite/semko/{thirteen,fourteen,fifteen}.stp:
Test prohibited forms of foreach loops.
* buildrun.cxx (compile_pass, run_pass): Get closer to a working
test_mode.
* translate.cxx (emit_module_init, emit_common_header): Ditto.
(translate_pass): Ditto.
* bench/run_bench (do_time): Use ttest instead of "time".
Fix processor computation.
* bench/ttest.c: Like "time.c" except takes an argument
to adjust loop size. Also computes system time + user time
instead of real time. Added a warmup loop to get
consistent results from cpus which adjust speed based on load.
* elaborate.cxx
(semantic_pass_symbols): Only enter body if non-null.
(semantic_pass_types): Likewise.
(semantic_pass): Pass session to register_standard_tapsets.
* translate.cxx
(builtin_collector): New struct.
(hookup_builtins): New function.
(translate_pass): Only translate functions with bodies.
(c_unparser::emit_common_header): Likewise, and call hookup_builtins.
* tapsets.hh (builtin_function): New class.
(register_standard_tapsets): Change parameter to session.
* tapsets.cc (bultin_function::*): Implement class.
(register_standard_tapsets): Register printk, log, warn.
* testsuite/transok/six.stp: New test.
* transport.c: Rename pid to _stp_pid.
Rename t to _stp_tport.
(_stp_cleanup_and_exit): New internal function.
(stp_exit_helper): Call _stp_cleanup_and_exit().
(_stp_transport_cleanup): New function.
(_stp_cmd_handler): Remove handler for STP_TRANSPORT_MODE.
The transport now notifies the daemon of the transport.
(_stp_transport_close): No longer calls _stp_exit_helper().
That is done by _stp_transport_cleanup().
(_stp_transport_open): When done, call _stp_handle_transport()
to notify the daemon what our transport is.
(_stp_transport_send): Put a retry limit on sends.
* transport.h: Rename pid to _stp_pid.
(_stp_transport_cleanup): Add prototype.
* librelay.c (sigchld): Signal handler to detect
completion of module loading.
(init_stp): Use fork/exec instead of system() so
we can get async signal of module load success/failure.
(cleanup_and_exit): New function.
(sigproc): If module is not loaded, don't send message to it.
(stp_main_loop): Call cleanup_and_exit() when STP_EXIT
is received. Don't send a request for the transport
mode. The module will send notification to the daemon
when it is ready.
* stpd.c (main): Don't print message until module
is loaded.
* staptree.{h,cxx} (deep_copy_visitor): New visitor.
* elaborate.cxx
(derived_probe::derived_probe):
(alias_expansion_builder::build): Use it.
* testsuite/semok/fifteen.stp: New test which relies on deep copy.
* Makefile.am (dist): Package up the source tree, including
testsuite and runtime.
* main.cxx: Use clog instead of cerr for logging messages.
* buildrun.cxx: Ditto.
(compile_pass): Add -Iruntime/user for test mode.
* translate.cxx (*): Commonalize test/real mode output.
* Makefile.in: Regenerated.
* elaborate.{h,cxx}: Revert previous changes.
* tapsets.{h,cxx}: Adapt to verbose as a member of session.
* elaborate.cxx (alias_expansion_builder::build): Avoid copying
locals between alias definition and use.
* testsuite/semok/{twelve,thirteen,fourteen}.stp: New tests.
* staptree.cxx (probe_alias::printsig): Print equals sign.
* elaborate.h (systemtap_session): Add more command-line arguments.
* staptree.h (verbose): Bad global, no donut.
* elaborate.cxx: Temporarily disable verbose variable access.
* main.cxx: Support more arguments, build/run passes. Revamp
temporary file generation and partial-pass output generation.
* tapsets.cxx, translate.cxx: Emit just enough extra punctuation
and fluff to make generated probe pass -Werror.
* buildrun.cxx, buildrun.h: New files for passes 4/5. Partial
support for build pass, nothing on probe execution yet.
* testsuite/transok/*.stp: Force just -p3, now that -p4/5 exist.
* Makefile.am, Makefile.in: Corresponding changes.
* elaborate.h (systemtap_session): Add more command-line arguments.
* staptree.h (verbose): Bad global, no donut.
* elaborate.cxx: Temporarily disable verbose variable access.
* main.cxx: Support more arguments, build/run passes. Revamp
temporary file generation and partial-pass output generation.
* tapsets.cxx, translate.cxx: Emit just enough extra punctuation
and fluff to make generated probe pass -Werror.
* buildrun.cxx, buildrun.h: New files for passes 4/5. Partial
support for build pass, nothing on probe execution yet.
* testsuite/transok/*.stp: Force just -p3, now that -p4/5 exist.
* Makefile.am, Makefile.in: Corresponding changes.
* elaborate.h (symresolution_info::current_derived_probe): New field.
(symresolution_info::current_probe): Change type.
* elaborate.cxx (semantic_pass_symbols): Add passes for resolving
locals in pre-derivation base probes and pre-expansion aliases.
(symresolution_info::visit_symbol):
(symresolution_info::find_scalar): Update to match new field.
fche [Thu, 16 Jun 2005 14:59:17 +0000 (14:59 +0000)]
2005-06-14 Graydon Hoare <graydon@redhat.com>
* tapsets.h: New file.
(derived_probe_builder): Callback for making derived probes.
(match_key): Component of pattern-matching tree.
(match_node): Other component of pattern-matching tree.
* tapsets.cxx: Add pattern-matching system for probes.
(alias_derived_probe): Skeleton for alias probes.
(dwarf_derived_probe): Skeleton for dwarf probes.
(register_standard_tapsets): Registry for standard tapsets.
fche [Mon, 13 Jun 2005 14:27:49 +0000 (14:27 +0000)]
2005-06-13 Frank Ch. Eigler <fche@redhat.com>
Start separating out translator-side probe point recognition.
* tapsets.cxx: New file.
(be_derived_probe): Support for begin/end probes.
(derive_probe): Ditto. Reject anything unrecognized.
* translator.cxx: Move out old code.
* Makefile.am: Add new source file.
* testsuite/semok/*: Switch to begin/end probes only.
fche [Wed, 8 Jun 2005 22:02:09 +0000 (22:02 +0000)]
2005-06-08 Frank Ch. Eigler <fche@redhat.com>
systemtap/916
Implement all basic scalar operators, including modify-assignment.
* parse.cxx (lexer): Allow multi-character lookahead in order to
scan 1/2/3-character operators.
(parse_boolean_or/and/xor/shift): New routines.
* translate.cxx (visit_assignment, visit_binary_expression,
visit_*_crement): Generally rewrote.
(visit_*): Added more parentheses in output.
(emit_module_init): Initialize globals.
* staptree.h, elaborate.cxx, elaborate.h: Remove exponentiation.
* main.cxx (main): Add an end-of-line to output file.
* testsuite/*: Several new tests.
fche [Sat, 4 Jun 2005 02:35:18 +0000 (02:35 +0000)]
2005-06-03 Frank Ch. Eigler <fche@elastic.org>
* elaborate.cxx (find_*): Remove arity checks from here ...
* staptree.cxx (set_arity): Put arity match assertion here.
* testsuite/semko/{six,nine}.stp: Confirm logic.
* testsuite/transko/one.stp: First translation-time ko test.