From: Lukas Berk Date: Fri, 5 Apr 2013 15:50:46 +0000 (-0400) Subject: Optimize the specific mark("X") probe actually specified X-Git-Tag: release-2.2~86 X-Git-Url: https://sourceware.org/git/?a=commitdiff_plain;h=f72c96e9f40e5b8281888a7ce5d655d5a0e9ec1f;p=systemtap.git Optimize the specific mark("X") probe actually specified *java/HelperSDT.c: alter mark names to be more simple/predictable *tapset-method.cxx: add function call to determine which mark name to return --- diff --git a/java/HelperSDT.c b/java/HelperSDT.c index 7e0642509..fb25b3977 100644 --- a/java/HelperSDT.c +++ b/java/HelperSDT.c @@ -150,7 +150,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE0 { char* provider = get_java_string(env, _provider); char* name = get_java_string(env, _name); - STAP_PROBE2(hotspot, method__no__arguments, provider, name); + STAP_PROBE2(hotspot, method__0, provider, name); } @@ -168,7 +168,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE1 arg1 = determine_java_type(env, _arg1, arg1); if(arg1.type == OTHER || arg1.type == NONE) arg1.vartype.c = get_java_string(env, _arg1); // we need to create some type of check for strings - STAP_PROBE3(hotspot, method__one__argument, arg1.vartype.d, provider, name); + STAP_PROBE3(hotspot, method__1, arg1.vartype.d, provider, name); } /* @@ -189,7 +189,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE2 arg1.vartype.c = get_java_string(env, _arg1); // we need to create some type of check for strings if(arg2.type == OTHER || arg2.type == NONE) arg2.vartype.c = get_java_string(env, _arg2); - STAP_PROBE4(hotspot, method__two__arguments, arg1.vartype.d, arg2.vartype.d, provider, name); + STAP_PROBE4(hotspot, method__2, arg1.vartype.d, arg2.vartype.d, provider, name); } @@ -215,7 +215,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE3 arg2.vartype.c = get_java_string(env, _arg2); if(arg3.type == OTHER || arg3.type == NONE) arg3.vartype.c = get_java_string(env, _arg3); - STAP_PROBE5(hotspot, method__three__arguments, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, provider, name); + STAP_PROBE5(hotspot, method__3, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, provider, name); } /* @@ -244,7 +244,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE4 arg3.vartype.c = get_java_string(env, _arg3); if(arg4.type == OTHER || arg4.type == NONE) arg4.vartype.c = get_java_string(env, _arg4); - STAP_PROBE6(hotspot, method__four__arguments, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, provider, name); + STAP_PROBE6(hotspot, method__4, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, provider, name); } @@ -278,7 +278,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE5 arg4.vartype.c = get_java_string(env, _arg4); if(arg5.type == OTHER || arg5.type == NONE) arg5.vartype.c = get_java_string(env, _arg5); - STAP_PROBE7(hotspot, method__five__arguments, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, provider, name); + STAP_PROBE7(hotspot, method__5, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, provider, name); } /* @@ -315,7 +315,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE6 arg5.vartype.c = get_java_string(env, _arg5); if(arg6.type == OTHER || arg6.type == NONE) arg6.vartype.c = get_java_string(env, _arg6); - STAP_PROBE8(hotspot, method__six__arguments, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, provider, name); + STAP_PROBE8(hotspot, method__6, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, provider, name); } /* @@ -356,7 +356,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE7 arg6.vartype.c = get_java_string(env, _arg6); if(arg7.type == OTHER || arg7.type == NONE) arg7.vartype.c = get_java_string(env, _arg7); - STAP_PROBE9(hotspot, method__seven__arguments, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, arg7.vartype.d, provider, name); + STAP_PROBE9(hotspot, method__7, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, arg7.vartype.d, provider, name); } /* @@ -401,7 +401,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE8 arg7.vartype.c = get_java_string(env, _arg7); if(arg8.type == OTHER || arg8.type == NONE) arg8.vartype.c = get_java_string(env, _arg8); - STAP_PROBE10(hotspot, method__eight__arguments, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, arg7.vartype.d, arg8.vartype.d, provider, name); + STAP_PROBE10(hotspot, method__8, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, arg7.vartype.d, arg8.vartype.d, provider, name); } /* @@ -450,7 +450,7 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE9 arg8.vartype.c = get_java_string(env, _arg8); if(arg9.type == OTHER || arg9.type == NONE) arg9.vartype.c = get_java_string(env, _arg9); - STAP_PROBE11(hotspot, method__nine__arguments, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, arg7.vartype.d, arg8.vartype.d, arg9.vartype.d, provider, name); + STAP_PROBE11(hotspot, method__9, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, arg7.vartype.d, arg8.vartype.d, arg9.vartype.d, provider, name); } @@ -504,5 +504,5 @@ JNIEXPORT void JNICALL Java_HelperSDT_METHOD_1STAP_1PROBE10 arg9.vartype.c = get_java_string(env, _arg9); if(arg10.type == OTHER || arg10.type == NONE) arg10.vartype.c = get_java_string(env, _arg10); - STAP_PROBE12(hotspot, method__ten__arguments, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, arg7.vartype.d, arg8.vartype.d, arg9.vartype.d, arg10.vartype.d, provider, name); + STAP_PROBE12(hotspot, method__10, arg1.vartype.d, arg2.vartype.d, arg3.vartype.d, arg4.vartype.d, arg5.vartype.d, arg6.vartype.d, arg7.vartype.d, arg8.vartype.d, arg9.vartype.d, arg10.vartype.d, provider, name); } diff --git a/tapset-method.cxx b/tapset-method.cxx index 6c7c52a7f..2d333282c 100644 --- a/tapset-method.cxx +++ b/tapset-method.cxx @@ -61,6 +61,7 @@ public: std::string& value); void bminstall (systemtap_session & sess, std::string java_proc); + std::string mark_param(int i); }; @@ -105,6 +106,38 @@ java_builder::bminstall (systemtap_session & sess, std::string java_proc) } } +std::string +java_builder::mark_param(int i) +{ + switch (i) + { + case 0: + return "method__0"; + case 1: + return "method__1"; + case 2: + return "method__2"; + case 3: + return "method__3"; + case 4: + return "method__4"; + case 5: + return "method__5"; + case 6: + return "method__6"; + case 7: + return "method__7"; + case 8: + return "method__8"; + case 9: + return "method__9"; + case 10: + return "method__10"; + default: + return "*"; + } +} + void java_builder::build (systemtap_session & sess, probe * base, @@ -311,78 +344,80 @@ java_builder::build (systemtap_session & sess, * redefine functor values with new literal_string("foo") */ //XXX can this be moved into its own function, or after root->bind'ing takes place - probe_point* new_loc = new probe_point (*loc); - vector java_marker; - java_marker.push_back( new probe_point::component - (TOK_PROCESS, new literal_string (HAVE_HELPER))); - java_marker.push_back( new probe_point::component - (TOK_MARK, new literal_string ("*"))); - probe_point * derived_loc = new probe_point (*new_loc); - - block *b = new block; - b->tok = base->body->tok; - - // first half of argument - target_symbol *cc = new target_symbol; - cc->tok = b->tok; - cc->name = "$provider"; - - functioncall *ccus = new functioncall; - ccus->function = "user_string"; - ccus->type = pe_string; - ccus->tok = b->tok; - ccus->args.push_back(cc); + + probe_point* new_loc = new probe_point (*loc); + vector java_marker; + java_marker.push_back( new probe_point::component + (TOK_PROCESS, new literal_string (HAVE_HELPER))); + java_marker.push_back( new probe_point::component + // (TOK_MARK, new literal_string ("*"))); + (TOK_MARK, new literal_string (mark_param(method_params_count)))); + probe_point * derived_loc = new probe_point (*new_loc); + + block *b = new block; + b->tok = base->body->tok; + + // first half of argument + target_symbol *cc = new target_symbol; + cc->tok = b->tok; + cc->name = "$provider"; + + functioncall *ccus = new functioncall; + ccus->function = "user_string"; + ccus->type = pe_string; + ccus->tok = b->tok; + ccus->args.push_back(cc); - // second half of argument - target_symbol *mc = new target_symbol; - mc->tok = b->tok; - mc->name = "$name"; - - functioncall *mcus = new functioncall; - mcus->function = "user_string"; - mcus->type = pe_string; - mcus->tok = b->tok; - mcus->args.push_back(mc); + // second half of argument + target_symbol *mc = new target_symbol; + mc->tok = b->tok; + mc->name = "$name"; + + functioncall *mcus = new functioncall; + mcus->function = "user_string"; + mcus->type = pe_string; + mcus->tok = b->tok; + mcus->args.push_back(mc); - //build if statement - if_statement *ifs = new if_statement; - ifs->thenblock = new next_statement; - ifs->elseblock = NULL; - ifs->tok = b->tok; - ifs->thenblock->tok = b->tok; - - //class comparison - comparison *ce = new comparison; - ce->op = "!="; - ce->tok = b->tok; - ce->left = ccus; - ce->right = new literal_string(class_str_val); - ce->right->tok = b->tok; - ifs->condition = ce; - b->statements.push_back(ifs); - - //method comparision - comparison *me = new comparison; - me->op = "!="; - me->tok = b->tok; - me->left = mcus; - me->right = new literal_string(method_str_val); - me->right->tok = b->tok; - - logical_or_expr *le = new logical_or_expr; - le->op = "||"; - le->tok = b->tok; - le->left = ce; - le->right = me; - ifs->condition = le; - b->statements.push_back(ifs); - - b->statements.push_back(base->body); - base->body = b; - - derived_loc->components = java_marker; - probe *new_mark_probe = base->create_alias (derived_loc, new_loc); - derive_probes (sess, new_mark_probe, finished_results); + //build if statement + if_statement *ifs = new if_statement; + ifs->thenblock = new next_statement; + ifs->elseblock = NULL; + ifs->tok = b->tok; + ifs->thenblock->tok = b->tok; + + //class comparison + comparison *ce = new comparison; + ce->op = "!="; + ce->tok = b->tok; + ce->left = ccus; + ce->right = new literal_string(class_str_val); + ce->right->tok = b->tok; + ifs->condition = ce; + b->statements.push_back(ifs); + + //method comparision + comparison *me = new comparison; + me->op = "!="; + me->tok = b->tok; + me->left = mcus; + me->right = new literal_string(method_str_val); + me->right->tok = b->tok; + + logical_or_expr *le = new logical_or_expr; + le->op = "||"; + le->tok = b->tok; + le->left = ce; + le->right = me; + ifs->condition = le; + b->statements.push_back(ifs); + + b->statements.push_back(base->body); + base->body = b; + + derived_loc->components = java_marker; + probe *new_mark_probe = base->create_alias (derived_loc, new_loc); + derive_probes (sess, new_mark_probe, finished_results); #else cerr << _("Cannot probe java method, configure --with-helper=") << endl;