regression for nodwarf testing on i686+gcc 3.x

Wenji Huang wenji.huang@oracle.com
Tue Aug 26 04:47:00 GMT 2008


Addition:
This problem also happens in any environments if we enable -P option in 
stap command.

Regards,
Wenji

Wenji Huang wrote:
> 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



More information about the Systemtap mailing list