This is wrong: % stap -r /sdfijsdfoidf -L 'kernel.function("*")' % echo $? 0 This is more like it, though the "pass 2..." line is probably unhelpful. % stap -r /sdfijsdfoidf -e 'probe kernel.function("*") {}' semantic error: libdwfl failure (missing kernel /sdfijsdfoidf x86_64 debuginfo): No such file or directory while resolving probe point kernel.function("*") semantic error: no probes found Pass 2: analysis failed. Try again with more '-v' (verbose) options. % echo $? 1
Current listing_mode (-l or -L) blocks all the errors. We can make -L out of this restriction. stap -r /sdfijsdfoidf -l 'kernel.function("*")' will still return 0. stap -r /sdfijsdfoidf -L 'kernel.function("*")' will print error and return 1. stap -r /sdfijsdfoidf -ul 'kernel.function("*")' will print error and return 1. stap -L 'kernel.function("abcdef")' will print error and return 1. diff --git a/elaborate.cxx b/elaborate.cxx index 7cbac31..def4846 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -1446,8 +1446,8 @@ systemtap_session::print_error (const semantic_error& e) string message_str[2]; string align_semantic_error (" "); - // NB: we don't print error messages during listing mode. - if (listing_mode) return; + // NB: we don't print error messages during listing mode -l but during -L. + if (listing_mode && !unoptimized) return; // We generate two messages. The second one ([1]) is printed // without token compression, for purposes of duplicate elimination.
Error printing should probably work the same way with -l and -L.
Seems the return value depended on number_errors affected by print_error.So, all the error will be printed and correct value can be returned. diff --git a/elaborate.cxx b/elaborate.cxx index 7cbac31..def4846 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -1446,8 +1446,8 @@ systemtap_session::print_error (const semantic_error& e) string message_str[2]; string align_semantic_error (" "); - // NB: we don't print error messages during listing mode. - if (listing_mode) return; // We generate two messages. The second one ([1]) is printed // without token compression, for purposes of duplicate elimination.
Update the patch to block "Pass x:" message. Now $ stap -rafda -l 'kernel.function("*")' semantic error: libdwfl failure (missing kernel afda i686 debuginfo): No such file or directory while resolving probe point kernel.function("*") $ stap -L 'kernel.function("abcde")' semantic error: no match while resolving probe point kernel.function("abcde") Patch: diff --git a/elaborate.cxx b/elaborate.cxx index 7cbac31..0dd8062 100644 --- a/elaborate.cxx +++ b/elaborate.cxx @@ -1446,9 +1446,6 @@ systemtap_session::print_error (const semantic_error& e) string message_str[2]; string align_semantic_error (" "); - // NB: we don't print error messages during listing mode. - if (listing_mode) return; - // We generate two messages. The second one ([1]) is printed // without token compression, for purposes of duplicate elimination. // This way, the same message that may be generated once with a diff --git a/main.cxx b/main.cxx index 406228a..40dbeec 100644 --- a/main.cxx +++ b/main.cxx @@ -937,7 +937,7 @@ main (int argc, char * const argv []) << endl; } - if (rc) + if (rc && !s.listing_mode) cerr << "Pass 1: parse failed. " << "Try again with more '-v' (verbose) options." << endl; @@ -965,7 +965,7 @@ main (int argc, char * const argv []) << TIMESPRINT << endl; - if (rc) + if (rc && !s.listing_mode) cerr << "Pass 2: analysis failed. " << "Try again with more '-v' (verbose) options." << endl;
commit 708ce1f, thanks!