Re: optimization/10877: [3.3/3.4 regression] miscompilation with -O3 -fPIC on x86

Andrew Pinski <[email protected]>
Newsgroups gmane.comp.gcc.prs
Message-ID <[email protected]>
The following reply was made to PR optimization/10877; it has been noted by GNATS.

From: Andrew Pinski <[email protected]>
To: Wolfgang Bangerth <[email protected]>
Cc: Andrew Pinski <[email protected]>,
   Christian Ehrhardt <[email protected]>, <[email protected]>,
   <[email protected]>, <[email protected]>
Subject: Re: optimization/10877: [3.3/3.4 regression] miscompilation with -O3 -fPIC on x86
Date: Tue, 20 May 2003 15:19:43 -0400

 Here is the differences between -O2 (works ---) and -O3 (does not work  
 +++):
 
 --- testpic.O2.s        Tue May 20 15:12:01 2003
 +++ testpic.s   Tue May 20 15:12:16 2003
 @@ -12,13 +12,13 @@
   .globl _Z5get_xv
          .type   _Z5get_xv, @function
   _Z5get_xv:
 -       call    __i686.get_pc_thunk.cx
 -       addl    $_GLOBAL_OFFSET_TABLE_, %ecx
 +       call    __i686.get_pc_thunk.ax
 +       addl    $_GLOBAL_OFFSET_TABLE_, %eax
          pushl   %ebp
 -       movl    i@GOT(%ecx), %eax
 +       movl    i@GOT(%eax), %edx
          movl    %esp, %ebp
          popl    %ebp
 -       movl    (%eax), %eax
 +       movl    (%edx), %eax
          ret
          .size   _Z5get_xv, .-_Z5get_xv
          .align 2
 @@ -28,26 +28,26 @@
   main:
          pushl   %ebp
          movl    %esp, %ebp
 -       leal    -8(%ebp), %edx
 +       leal    -8(%ebp), %eax
          pushl   %ebx
          subl    $4, %esp
          andl    $-16, %esp
          call    __i686.get_pc_thunk.bx
          addl    $_GLOBAL_OFFSET_TABLE_, %ebx
 -       movl    i@GOT(%ebx), %eax
 -       movl    %edx, (%eax)
 +       movl    i@GOT(%ebx), %ecx
 +       movl    %eax, (%ecx)
          call    _Z5get_xv@PLT
          movl    -4(%ebp), %ebx
          xorl    %eax, %eax
          leave
          ret
          .size   main, .-main
 -       .section         
 .gnu.linkonce.t.__i686.get_pc_thunk.cx,"ax",@progbits
 -.globl __i686.get_pc_thunk.cx
 -       .hidden __i686.get_pc_thunk.cx
 -       .type   __i686.get_pc_thunk.cx, @function
 -__i686.get_pc_thunk.cx:
 -       movl    (%esp), %ecx
 +       .section         
 .gnu.linkonce.t.__i686.get_pc_thunk.ax,"ax",@progbits
 +.globl __i686.get_pc_thunk.ax
 +       .hidden __i686.get_pc_thunk.ax
 +       .type   __i686.get_pc_thunk.ax, @function
 +__i686.get_pc_thunk.ax:
 +       movl    (%esp), %eax
          ret
          .section         
 .gnu.linkonce.t.__i686.get_pc_thunk.bx,"ax",@progbits
   .globl __i686.get_pc_thunk.bx
 
 looks like putting the pc_thunk into eax is the problem.
 
 Thanks,
 Andrew Pinski
 
 
 
 On Tuesday, May 20, 2003, at 15:10 US/Eastern, Wolfgang Bangerth wrote:
 
 >
 >> I can reproduce it with `GNU assembler 2.11.93.0.2 20020207' tough so
 >> it looks like it binutils fault but it has already been fixed.
 >
 > So what do we do with this, then? Since we silently generate  
 > non-working
 > code, I'd prefer gcc work around the problem, but then I'm not in a
 > position to contribute anything reasonable to this aim...
 >
 > W.
 >
 > ----------------------------------------------------------------------- 
 > --
 > Wolfgang Bangerth              email:             
 > [email protected]
 >                                www:  
 > http://www.ices.utexas.edu/~bangerth/
 >
 >
 >
 >
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.