Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 17 Jun 2004 23:19:22 -0700
From:      Sean McNeil <sean@mcneil.com>
To:        freebsd-amd64@freebsd.org
Cc:        freebsd-gnome@freebsd.org
Subject:   Re: bad compiler generated code? - firefox issues
Message-ID:  <1087539562.18159.2.camel@server.mcneil.com>
In-Reply-To: <1087521851.32817.27.camel@server.mcneil.com>
References:  <1087346887.66377.1.camel@server.mcneil.com> <20040616015703.GA17852@dragon.nuxi.com> <1087521851.32817.27.camel@server.mcneil.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Thu, 2004-06-17 at 18:24, Sean McNeil wrote:
> On Tue, 2004-06-15 at 18:57, David O'Brien wrote:
> > On Tue, Jun 15, 2004 at 05:48:08PM -0700, Sean McNeil wrote:
> > > I'm recompiling firefox right now and I get a whole bunch of the
> > > following:
> > > 
> > > {standard input}:766: Warning: indirect jmp without `*'
> > > {standard input}:816: Warning: indirect jmp without `*'
> > ...
> > > this happens on quite a number of C++ source files.  Looks like the
> > > compiler is generating some bad assembly.
> > 
> > This is not a useful bug report.  Can you provide the preprocesed C file?
> > Or at least provide command line(s) invocation that produces this?
> 
> I took a look into this and it appears that the bad code generation of
> c++ is related to my issues with firefox.  Here is what I saw:
> 
> In xpcom/base/nsExceptionService.cpp it is generating thunks as
> 
> _ZThn8_N18nsExceptionService6AddRefEv:
> 	addq	$-8, %rdi
> 	jmp	_ZN18nsExceptionService6AddRefEv(%rip)
> 	.size	_ZThn8_N18nsExceptionService6AddRefEv, .-_ZThn8_N18nsExceptionService6AddRefEv
> 
> when they should be
> 
> _ZThn8_N18nsExceptionService6AddRefEv:
> 	addq	$-8, %rdi
> 	jmp	_ZN18nsExceptionService6AddRefEv
> 	.size	_ZThn8_N18nsExceptionService6AddRefEv, .-_ZThn8_N18nsExceptionService6AddRefEv
> 
> This has been fixed in the cvs version of gcc and involves the following patch:
> 
> *** contrib/gcc/config/i386/i386.c.orig Thu Jun 17 18:20:11 2004
> --- contrib/gcc/config/i386/i386.c      Thu Jun 17 18:10:55 2004
> *************** x86_output_mi_thunk (file, thunk, delta,
> *** 14607,14621 ****
>         output_asm_insn ("mov{l}\t{%0, %1|%1, %0}", xops);
>       }
> 
> !   xops[0] = DECL_RTL (function);
>     if (TARGET_64BIT)
>       {
>         if (!flag_pic || (*targetm.binds_local_p) (function))
>         output_asm_insn ("jmp\t%P0", xops);
>         else
>         {
> !         tmp = XEXP (xops[0], 0);
> !         tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, tmp), UNSPEC_GOTPCREL);
>           tmp = gen_rtx_CONST (Pmode, tmp);
>           tmp = gen_rtx_MEM (QImode, tmp);
>           xops[0] = tmp;
> --- 14607,14620 ----
>         output_asm_insn ("mov{l}\t{%0, %1|%1, %0}", xops);
>       }
> 
> !   xops[0] = XEXP (DECL_RTL (function), 0);
>     if (TARGET_64BIT)
>       {
>         if (!flag_pic || (*targetm.binds_local_p) (function))
>         output_asm_insn ("jmp\t%P0", xops);
>         else
>         {
> !         tmp = gen_rtx_UNSPEC (Pmode, gen_rtvec (1, xops[0]), UNSPEC_GOTPCREL);
>           tmp = gen_rtx_CONST (Pmode, tmp);
>           tmp = gen_rtx_MEM (QImode, tmp);
>           xops[0] = tmp;
> 
> 
> I am rebuilding firefox with this patch and will report back if firefox works.

I had to do a complete rebuild:  portupgrade -fR firefox-0.9_1

Now firefox works!!!

There must have been other libraries that firefox depended on that were
built with the bad compiler.

Sean




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1087539562.18159.2.camel>