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

Andrew Pinski pinskia@physics.uc.edu
Tue May 20 19:28:00 GMT 2003


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:             
> bangerth@ices.utexas.edu
>                                www:  
> http://www.ices.utexas.edu/~bangerth/
>
>
>
>



More information about the Gcc-bugs mailing list