Hi,
There is regression for nodwarf testing which only happens on i686
with gcc 3.x. It will result in failure of semok/nodwf2/3/5/6/7.stp.
Problem can be simply reproduced :
stap -p2 --ignore-vmlinux --kmap=/proc/kallsyms -vve 'probe
kernel.function("sys_open"){}'
SystemTap translator/driver (version 0.7.1/0.131 git branch master,
commit 67732804)
Copyright (C) 2005-2008 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
Session arch: i686 release: 2.6.27-rc4
Created temporary directory "/tmp/stapE24aR2"
Searched '/usr/local/share/systemtap/tapset/i686/*.stp', found 2
Searched '/usr/local/share/systemtap/tapset/*.stp', found 41
Pass 1: parsed user script and 43 library script(s) in
380usr/130sys/508real ms.
semantic error: could not find prologue-end for probed function 'sys_open'
semantic error: no match while resolving probe point
kernel.function("sys_open")
semantic error: no probes found
Pass 2: analyzed script: 0 probe(s), 0 function(s), 0 embed(s), 0
global(s) in 80usr/80sys/168real ms.
Pass 2: analysis failed. Try again with more '-v' (verbose) options.
Running rm -rf /tmp/stapE24aR2
So no suitable probe point caught in searching. After some
investigation, found that systemtap default sets enable-prologue in
i686+ gcc <4 if users don't override the option. And this will cause
semantic error in query_func_info.
Saw there were some discussions on this function. And I had the work
around to solve the regression.
diff --git a/tapsets.cxx b/tapsets.cxx
index 289c5fa..79fe6a2 100644
--- a/tapsets.cxx
+++ b/tapsets.cxx
@@ -3449,7 +3449,7 @@ query_func_info (Dwarf_Addr entrypc,
if (q->sess.prologue_searching
&& !q->has_statement_str && !q->has_statement_num) // PR
2608
{
- if (fi.prologue_end == 0)
+ if (fi.prologue_end == 0 && !q->sess.ignore_vmlinux &&
!q->sess.ignore_dwarf)
throw semantic_error("could not find prologue-end "
"for probed function '" + fi.name
+ "'");
query_statement (fi.name, fi.decl_file, fi.decl_line,
Regards,
Wenji