[Bug translator/12609] New: Cannot see variable values in partial inlined functions with gcc 4.6

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

[Bug translator/12609] New: Cannot see variable values in partial inlined functions with gcc 4.6

glaubitz at physik dot fu-berlin.de
http://sourceware.org/bugzilla/show_bug.cgi?id=12609

           Summary: Cannot see variable values in partial inlined
                    functions with gcc 4.6
           Product: systemtap
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: translator
        AssignedTo: [hidden email]
        ReportedBy: [hidden email]


Take the following program foo.c:

$ cat foo.c
/* { dg-options "-g -O2" } */

extern void abort (void);
volatile int v;
#define V1 v++; v++; v++; v++; v++; v++; v++; v++; v++; v++;
#define V2 V1 V1 V1 V1 V1 V1 V1 V1 V1 V1
static int
foo (int x)
{
  int a = 2 * x + 4;
  int b = 6;
  if (x < 30)
    {
      int c = 8;
      int d = 8 * x;
      return 6;
    }
  else
    {
      int e = 134;
      int f = 9 * x;
      V2
      return v + 17;
    }
}

int
main (void)
{
  if (foo (v) > 10000)
    abort ();
  foo (70);
  return 0;
}

Compiled with gcc 4.5 -g -O2 -o foo.old foo.c systemtap is happy to probe the
(inlined) foo and variables:

$ stap -e 'probe process ("./foo.old").function("foo") { printf("%s@0x%x\n",
pp(), uaddr()); log ($$vars) }' -c ./foo.old
process("/tmp/foo.old").function("foo@/tmp/foo.c:8")@0x4004d0
x=0x0 a=0x4 b=0x6
process("/tmp/foo.old").function("foo@/tmp/foo.c:8")@0x4004d0
x=0x46 a=0x90 b=0x6

But compiled with gcc 4.6 (actually my test was with gcc trunk, but that is
still fairly similar) -g -O2 -o foo.new foo.c systemtap is unable to find the
value of most variables:

$ stap -e 'probe process ("./foo.new").function("foo") { printf("%s@0x%x\n",
pp(), uaddr()); log ($$vars) }' -c ./foo.new
process("/tmp/foo.new").function("foo@/tmp/foo.c:8")@0x400aaa
x=0x0
process("/tmp/foo.new").function("foo@/tmp/foo.c:8")@0x4004b0
a=? x=? b=?

--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug translator/12609] Cannot see variable values in partial inlined functions with gcc 4.6

glaubitz at physik dot fu-berlin.de
http://sourceware.org/bugzilla/show_bug.cgi?id=12609

Frank Ch. Eigler <fche at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |fche at redhat dot com

--- Comment #1 from Frank Ch. Eigler <fche at redhat dot com> 2011-05-16 21:28:44 UTC ---
Mark, is there reason to suspect systemtap here, or is this a pure gcc
"guality" regression?

--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug translator/12609] Cannot see variable values in partial inlined functions with gcc 4.6

glaubitz at physik dot fu-berlin.de
In reply to this post by glaubitz at physik dot fu-berlin.de
http://sourceware.org/bugzilla/show_bug.cgi?id=12609

--- Comment #2 from Mark Wielaard <mjw at redhat dot com> 2011-05-17 09:21:09 UTC ---
(In reply to comment #1)
> Mark, is there reason to suspect systemtap here, or is this a pure gcc
> "guality" regression?

A quick looks shows gcc doing partial inlining of foo. Some of the variables
might indeed not be available in the partial inlined version of foo that stap
probes. So it might actually reflect reality in this case of where the probe
gets placed. I think I just filed the testcase to do a deeper analysis of what
is going on.

--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug translator/12609] Cannot see variable values in partial inlined functions with gcc 4.6

glaubitz at physik dot fu-berlin.de
In reply to this post by glaubitz at physik dot fu-berlin.de
http://sourceware.org/bugzilla/show_bug.cgi?id=12609

--- Comment #3 from Frank Ch. Eigler <fche at redhat dot com> 2011-05-17 09:27:40 UTC ---

> A quick looks shows gcc doing partial inlining of foo. Some of the variables
> might indeed not be available in the partial inlined version of foo that stap
> probes.

That may be, but the vta code has the capability to synthesize dwarf for some
no-longer-existent variables, if their value may be derived from constants
or other variables.

--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug translator/12609] Cannot see variable values in partial inlined functions with gcc 4.6

glaubitz at physik dot fu-berlin.de
In reply to this post by glaubitz at physik dot fu-berlin.de
http://sourceware.org/bugzilla/show_bug.cgi?id=12609

--- Comment #4 from Mark Wielaard <mjw at redhat dot com> 2011-05-17 09:31:30 UTC ---
Looking at the debug_info shows some of these variables are available as
const_value at other addresses. It might just be that staps heuristic of
choosing the probe address doesn't match up with where gcc expects these
constant values to materialize. This is a very synthetic testcase though.

--
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug translator/12609] Cannot see variable values in partial inlined functions with gcc 4.6

Sourceware - systemtap mailing list
In reply to this post by glaubitz at physik dot fu-berlin.de
https://sourceware.org/bugzilla/show_bug.cgi?id=12609

Frank Ch. Eigler <fche at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|---                         |WORKSFORME

--- Comment #5 from Frank Ch. Eigler <fche at redhat dot com> ---
with gcc 9.3.1 and current systemtap, the stap -v -L shows:

process("foo").function("[hidden email]:9") /* pc=.absolute+0x1170 */ $x:int
process("foo").function("[hidden email]:9") /* pc=.absolute+0x105a */ $b:int
process("foo").function("[hidden email]:9") /* pc=.absolute+0x106f */ $x:int $a:int
$b:int

so different variables in different inlined variants of the function.  That
seems about right.

--
You are receiving this mail because:
You are the assignee for the bug.
Reply | Threaded
Open this post in threaded view
|

[Bug translator/12609] Cannot see variable values in partial inlined functions with gcc 4.6

Sourceware - systemtap mailing list
In reply to this post by glaubitz at physik dot fu-berlin.de
https://sourceware.org/bugzilla/show_bug.cgi?id=12609

Frank Ch. Eigler <fche at redhat dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|WORKSFORME                  |FIXED

--- Comment #6 from Frank Ch. Eigler <fche at redhat dot com> ---

commit 13d1ba6b86e806097e8c70777474f76cee182a25
Author: Frank Ch. Eigler <[hidden email]>
Date:   Fri Apr 10 20:37:06 2020 -0400

    PR12609 redux: filter out duplicate probes due to partial-inining

--
You are receiving this mail because:
You are the assignee for the bug.