This is the mail archive of the gcc-patches@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]

Re: [PATCH] PR target/66232: -fPIC -fno-plt -mx32 fails to generate indirect branch via GOT



On Thu, 21 May 2015, H.J. Lu wrote:

> On Thu, May 21, 2015 at 12:32 PM, Alexander Monakov <amonakov@ispras.ru> wrote:
> > On Thu, 21 May 2015, H.J. Lu wrote:
> >> On Thu, May 21, 2015 at 12:06 PM, Richard Henderson <rth@redhat.com> wrote:
> >> > On 05/21/2015 12:01 PM, H.J. Lu wrote:
> >> >> +++ b/gcc/testsuite/gcc.target/i386/pr66232-1.c
> >> >> @@ -0,0 +1,13 @@
> >> >> +/* { dg-do compile { target *-*-linux* } } */
> >> >> +/* { dg-options "-O2 -fpic -fno-plt" } */
> >> >> +
> >> >> +extern void bar (void);
> >> >> +
> >> >> +void
> >> >> +foo (void)
> >> >> +{
> >> >> +  bar ();
> >> >> +}
> >> >> +
> >> >> +/* { dg-final { scan-assembler "jmp\[ \t\]*.bar@GOTPCREL" { target { ! ia32 } } } } */
> >> >> +/* { dg-final { scan-assembler "call\[ \t\]*.bar@GOT\\(" { target ia32 } } } */
> >> >
> >> > Do you really want to check for no tail call for ia32 here?
> >> > That's really just a missed optimization, surely.
> >> >
> >> >
> >>
> >> I'd like to keep it.  When it is fixed, we can update it.  I tried:
> >>
> >> https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00230.html
> >>
> >> and got
> >>
> >> call __x86.get_pc_thunk.ax
> >> addl $_GLOBAL_OFFSET_TABLE_, %eax
> >> subl $28, %esp
> >> .cfi_def_cfa_offset 32
> >> movl bar@GOT(%eax), %eax
> >> movl %eax, 12(%esp)
> >> addl $28, %esp
> >> .cfi_def_cfa_offset 4
> >> jmp *%eax
> >>
> >> This is very odd code, comparing against
> >
> > To avoid that, you need the CLOBBERED_REGS patch too:
> > https://gcc.gnu.org/ml/gcc-patches/2015-05/msg00227.html
> >
> 
> Should both patches be needed for ia32 tail call?

I don't really understand the question.  The first patch (that you've linked)
is required to produce a tail call, the second patch (that I've linked) helps
to produce clean code.  To match the scan-assembler test as written in your
testcase, both patches are needed.

Alexander


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