From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 21809 invoked by alias); 20 May 2003 19:27:41 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 17978 invoked by uid 71); 20 May 2003 19:26:00 -0000 Date: Tue, 20 May 2003 19:27:00 -0000 Message-ID: <20030520192600.17977.qmail@sources.redhat.com> To: nobody@gcc.gnu.org Cc: gcc-prs@gcc.gnu.org, From: Andrew Pinski Subject: Re: optimization/10877: [3.3/3.4 regression] miscompilation with -O3 -fPIC on x86 Reply-To: Andrew Pinski X-SW-Source: 2003-05/txt/msg02198.txt.bz2 List-Id: The following reply was made to PR optimization/10877; it has been noted by GNATS. From: Andrew Pinski To: Wolfgang Bangerth Cc: Andrew Pinski , Christian Ehrhardt , , , 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: > bangerth@ices.utexas.edu > www: > http://www.ices.utexas.edu/~bangerth/ > > > >