This is the mail archive of the gcc-bugs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug debug/19192] New: Current development gcc generates incorrect line info for example code



For the supplied example, the current development gcc generates
incorrect line number information for one instruction from the inlined
subroutine.  The Fedora Core 3 gcc, which identifies itself as "gcc
version 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)", generates correct line
information.

Environment:
System: Linux toadfish.ninemoons.com 2.6.9-1.681_FC3.stk16 #1 Mon Nov 22 16:44:32 EST 2004 i686 i686 i386 GNU/Linux
Architecture: i686

	
host: i686-pc-linux-gnu
build: i686-pc-linux-gnu
target: i686-pc-linux-gnu
configured with: /src/sourceware/gcc/gcc/configure -v --prefix=/opt/local/sourceware --with-gcc-version-trigger=/src/sourceware/gcc/gcc/gcc/version.c --enable-languages=c,c++

How-To-Repeat:

For the follow code:

  /*  1 */  int add2 (int a, int b)
  /*  2 */  {
  /*  3 */    return (a + b);
  /*  4 */  }
  /*  5 */  
  /*  6 */  inline int add3 (int a, int b, int c)
  /*  7 */  {
  /*  8 */    return (a + add2 (b , c));
  /*  9 */  }
  /* 10 */  
  /* 11 */  main ()
  /* 12 */  {
  /* 13 */    printf ("%d\n", add3 (2, 3, 4));
  /* 14 */  }

Run:

  gcc -g -O2 --save-temps -o t t.c
  readelf --debug-dump t >t.dwarf
  objdump --disassemble t >t.dis

There relevant line table entries from t.dwarf are:

  Special opcode 36: advance Address by 2 to 0x80483a0 and Line by 3 to 12
  Special opcode 15: advance Address by 1 to 0x80483a1 and Line by -4 to 8
  Special opcode 79: advance Address by 5 to 0x80483a6 and Line by 4 to 12
  Special opcode 75: advance Address by 5 to 0x80483ab and Line by 0 to 12
  Special opcode 85: advance Address by 6 to 0x80483b1 and Line by -4 to 8
  Special opcode 234: advance Address by 16 to 0x80483c1 and Line by 5 to 13
  Advance PC by constant 17 to 0x80483d2
  Special opcode 34: advance Address by 2 to 0x80483d4 and Line by 1 to 14
  Advance PC by 2 to 80483d6

I've annotated the disassembly of main() with the line numbers given by
the above entries:

    12      080483a0 <main>:
    12       80483a0:       55                      push   %ebp
     8       80483a1:       b8 04 00 00 00          mov    $0x4,%eax
    12       80483a6:       89 e5                   mov    %esp,%ebp
    12       80483a8:       83 ec 08                sub    $0x8,%esp
    12       80483ab:       83 e4 f0                and    $0xfffffff0,%esp
    12       80483ae:       83 ec 10                sub    $0x10,%esp
     8       80483b1:       89 44 24 04             mov    %eax,0x4(%esp)
     8       80483b5:       c7 04 24 03 00 00 00    movl   $0x3,(%esp)
     8       80483bc:       e8 af ff ff ff          call   8048370 <add2>
    13       80483c1:       c7 04 24 c8 84 04 08    movl   $0x80484c8,(%esp)
 ** 13       80483c8:       83 c0 02                add    $0x2,%eax
    13       80483cb:       89 44 24 04             mov    %eax,0x4(%esp)
    13       80483cf:       e8 dc fe ff ff          call   80482b0 <printf@plt>
    14       80483d4:       c9                      leave  
    14       80483d5:       c3                      ret    

The "add $0x2,%eax" instruction, marked with '**', is supposed to be at
line 8, not line 13.      

If you go through the same exercise with the Fedora Core 3 compiler, it does
correctly identify this instruction as being at line 8.

-- 
           Summary: Current development gcc generates incorrect line info
                    for example code
           Product: gcc
           Version: 4.0.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: debug
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: fnf at specifixinc dot com
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: i686-pc-linux-gnu


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19192


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]