else
throw parse_error (_("expected '==' or '!='"), op);
+ return result;
+ }
+ else if (l->type == tok_identifier && l->content == "runtime")
+ {
+ if (! (r->type == tok_string))
+ throw parse_error (_("expected string literal"), r);
+
+ string query_runtime = r->content;
+ string target_runtime;
+
+ target_runtime = (s.runtime_mode == systemtap_session::dyninst_runtime
+ ? "dyninst" : "kernel");
+ int nomatch = fnmatch (query_runtime.c_str(),
+ target_runtime.c_str(),
+ FNM_NOESCAPE); // still spooky
+
+ bool result;
+ if (op->type == tok_operator && op->content == "==")
+ result = !nomatch;
+ else if (op->type == tok_operator && op->content == "!=")
+ result = nomatch;
+ else
+ throw parse_error (_("expected '==' or '!='"), op);
+
return result;
}
else if (l->type == tok_identifier && startswith(l->content, "CONFIG_"))
throw parse_error (_("expected number literal as right value"), r);
else
- throw parse_error (_("expected 'arch' or 'kernel_v' or 'kernel_vr' or 'CONFIG_...'\n"
- " or comparison between strings or integers"), l);
+ throw parse_error (_("expected 'arch', 'kernel_v', 'kernel_vr', 'systemtap_v',\n"
+ " 'runtime', 'systemtap_privilege', 'CONFIG_...', or\n"
+ " comparison between strings or integers"), l);
}
# This test works so that if all the preprocessor conditionals
# work as expected, stap will indicate no error.
-set test "preprocessor basic ops"
-spawn stap -p2 -e "probe never {}
-%( kernel_v == \"$kv\" %? %: ERROR %)
-%( kernel_v == \"$kr\" %? %: ERROR %)
-%( kernel_v == \"$krx\" %? ERROR %: %)
-%( kernel_v != \"$kv\" %? ERROR %: %)
-%( kernel_v != \"$kr\" %? ERROR %: %)
-%( kernel_v != \"$krx\" %? %: ERROR %)
-%( kernel_v < \"9.9999\" %? %: ERROR %)
-%( kernel_v <= \"9.9999\" %? %: ERROR %)
-%( kernel_v > \"9.9999\" %? ERROR %: %)
-%( kernel_v >= \"9.9999\" %? ERROR %: %)
-%( kernel_vr == \"$kvr\" %? %: ERROR %)
-%( kernel_vr == \"$kr\" %? %: ERROR %)
-%( kernel_vr == \"$krx\" %? ERROR %: %)
-%( kernel_vr != \"$kvr\" %? ERROR %: %)
-%( kernel_vr != \"$kr\" %? ERROR %: %)
-%( kernel_vr != \"$krx\" %? %: ERROR %)
-%( kernel_vr < \"9.9999\" %? %: ERROR %)
-%( kernel_vr <= \"9.9999\" %? %: ERROR %)
-%( kernel_vr > \"9.9999\" %? ERROR %: %)
-%( kernel_vr >= \"9.9999\" %? ERROR %: %)
-%( arch == \"$arch\" %? %: ERROR %)
-%( arch == \"$ar\" %? %: ERROR %)
-%( arch == \"$arx\" %? ERROR %: %)
-%( arch != \"$arch\" %? ERROR %: %)
-%( arch != \"$ar\" %? ERROR %: %)
-%( arch != \"$arx\" %? %: ERROR %)
-"
-set ok 0
-expect {
- "never" { incr ok }
- eof { }
- timeout { }
+foreach runtime [get_runtime_list] {
+ set test "preprocessor basic ops"
+ if {$runtime != ""} {
+ lappend test "($runtime)"
+ set runtime_arg "--runtime=$runtime"
+ } else {
+ set runtime "kernel"
+ set runtime_arg ""
+ }
+
+ spawn stap -w -p2 ${runtime_arg} -e "probe never {}
+ %( kernel_v == \"$kv\" %? %: ERROR %)
+ %( kernel_v == \"$kr\" %? %: ERROR %)
+ %( kernel_v == \"$krx\" %? ERROR %: %)
+ %( kernel_v != \"$kv\" %? ERROR %: %)
+ %( kernel_v != \"$kr\" %? ERROR %: %)
+ %( kernel_v != \"$krx\" %? %: ERROR %)
+ %( kernel_v < \"9.9999\" %? %: ERROR %)
+ %( kernel_v <= \"9.9999\" %? %: ERROR %)
+ %( kernel_v > \"9.9999\" %? ERROR %: %)
+ %( kernel_v >= \"9.9999\" %? ERROR %: %)
+ %( kernel_vr == \"$kvr\" %? %: ERROR %)
+ %( kernel_vr == \"$kr\" %? %: ERROR %)
+ %( kernel_vr == \"$krx\" %? ERROR %: %)
+ %( kernel_vr != \"$kvr\" %? ERROR %: %)
+ %( kernel_vr != \"$kr\" %? ERROR %: %)
+ %( kernel_vr != \"$krx\" %? %: ERROR %)
+ %( kernel_vr < \"9.9999\" %? %: ERROR %)
+ %( kernel_vr <= \"9.9999\" %? %: ERROR %)
+ %( kernel_vr > \"9.9999\" %? ERROR %: %)
+ %( kernel_vr >= \"9.9999\" %? ERROR %: %)
+ %( arch == \"$arch\" %? %: ERROR %)
+ %( arch == \"$ar\" %? %: ERROR %)
+ %( arch == \"$arx\" %? ERROR %: %)
+ %( arch != \"$arch\" %? ERROR %: %)
+ %( arch != \"$ar\" %? ERROR %: %)
+ %( arch != \"$arx\" %? %: ERROR %)
+ %( runtime == \"$runtime\" %? %: ERROR %)
+ %( runtime != \"$runtime\" %? ERROR %: %)
+ %( runtime == \"noSuchRuntime\" %? ERROR %: %)
+ %( runtime != \"noSuchRuntime\" %? %: ERROR %)
+ "
+ set ok 0
+ expect {
+ "never" { incr ok }
+ eof { }
+ timeout { }
+ }
+ catch {close}; catch {wait}
+ if {$ok == 1} { pass $test } { fail $test }
}
-catch {close; wait}
-if {$ok == 1} { pass $test } { fail $test }