#! stap -p2
@define STUFF %(
// precheck, it should work with @cast
if (!@defined(@task(0)->mm)) {
println($cast_failed_mm)
}
if (@defined(@task(0)->systemtap)) {
println($cast_succeeded_systemtap)
}
// Test that autocast values can be checked by @defined
if (!@defined(task_current()->mm)) {
println($autocast_failed_mm)
}
if (@defined(task_current()->systemtap)) {
println($autocast_succeeded_systemtap)
}
// Test that autocast can resolve on the results of @defined
mm1 = @choose_defined($nonsense, task_current())->mm;
mm2 = @choose_defined(task_current(), $nonsense)->mm;
println(mm1 == mm2)
// Test an even deeper level of @defined
if (!@defined(mm1->mmap) || !@defined(mm2->mmap)) {
println($autocast_failed_mm_mmap)
}
if (@defined(mm1->systemtap) || @defined(mm2->systemtap)) {
println($autocast_succeeded_mm_systemtap)
}
// Test that autocast can resolve through nested @defined
// (especially that the ternary isn't automatically "defined")
mm3 = @choose_defined(@choose_defined($nonsense, $wut), task_current())->mm;
mm4 = @choose_defined(@choose_defined($nonsense, task_current()), $wut)->mm;
mm5 = @choose_defined(@choose_defined(task_current(), $nonsense), $wut)->mm;
println(mm3 == mm4 && mm4 == mm5)
%)
probe oneshot
{
@STUFF
foo() // from a function too, to test PR18079 function processing
}
function foo ()
{
@STUFF
}