The fib.exp testcase works on RHEL6, but is broken on RHEL7 and f20, since print_ubacktrace{,_brief}() doesn't return expected output there. It looks like the user-level root cause is simply presence of the .return probe: 7.0 S x86_64 # cat test.c void f3(void){} void f2(void){f3();} void f1(void){f2();} void f0(void){f1();} int main() { f0(); return 0; } 7.0 S x86_64 # gcc -g test.c 7.0 S x86_64 # stap -e 'probe process.function("f3") {print_ubacktrace_brief(); printf("\n")} probe process.function("f3").return {log("hey")}' -c './a.out' f3+0x4 0x7fffffffe000 hey 7.0 S x86_64 # stap -e 'probe process.function("f3") {print_ubacktrace_brief(); printf("\n")}' -c './a.out' f3+0x4 f2+0x9 f1+0x9 f0+0x9 main+0x9 0x7fc7930beaf5 WARNING: Missing unwind data for module, rerun with 'stap -d /usr/lib64/libc-2.17.so' 7.0 S x86_64 #
This appears to be a limitation of the in-kernel inode-uprobes implementation. It does not supply uretprobe_instance information to the runtime to assist tracebacks over uretprobe-modified frames.