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: [RFC][PATCH][X86_64] Eliminate PLT stubs for specified external functions via -fno-plt=


On Fri, May 29, 2015 at 3:24 PM, Ramana Radhakrishnan
<ramana.gcc@googlemail.com> wrote:
>
>
> On Friday, 29 May 2015, Sriraman Tallam <tmsriram@google.com> wrote:
>>
>> On Fri, May 29, 2015 at 12:35 PM, Jan Hubicka <hubicka@ucw.cz> wrote:
>> >>       * config/i386/i386.c (avoid_plt_to_call): New function.
>> >>       (ix86_output_call_insn): Generate indirect call for functions
>> >>       marked with "noplt" attribute.
>> >>       (attribute_spec ix86_attribute_): Define new attribute "noplt".
>> >>       * doc/extend.texi: Document new attribute "noplt".
>> >>       * gcc.target/i386/noplt-1.c: New testcase.
>> >>       * gcc.target/i386/noplt-2.c: New testcase.
>> >>
>> >> Index: config/i386/i386.c
>> >> ===================================================================
>> >> --- config/i386/i386.c        (revision 223720)
>> >> +++ config/i386/i386.c        (working copy)
>> >> @@ -25599,6 +25599,24 @@ ix86_expand_call (rtx retval, rtx fnaddr, rtx
>> >> call
>> >>    return call;
>> >>  }
>> >>
>> >> +/* Return true if the function being called was marked with attribute
>> >> +   "noplt".  If this function is defined, this should return false.
>> >> */
>> >> +static bool
>> >> +avoid_plt_to_call (rtx call_op)
>> >> +{
>> >> +  if (SYMBOL_REF_LOCAL_P (call_op))
>> >> +    return false;
>> >> +
>> >> +  tree symbol_decl = SYMBOL_REF_DECL (call_op);
>> >> +
>> >> +  if (symbol_decl != NULL_TREE
>> >> +      && TREE_CODE (symbol_decl) == FUNCTION_DECL
>> >> +      && lookup_attribute ("noplt", DECL_ATTRIBUTES (symbol_decl)))
>> >> +    return true;
>> >> +
>> >> +  return false;
>> >> +}
>> >
>> > OK, now we have __attribute__ (optimize("noplt")) which binds to the
>> > caller and makes
>> > all calls in the function to skip PLT and __attribute__ ("noplt") which
>> > binds to callee
>> > and makes all calls to function to not use PLT.
>> >
>> > That sort of makes sense to me, but why "noplt" attribute is not
>> > implemented at generic level
>> > just like -fplt? Is it only because every target supporting PLT would
>> > need update in its
>> > call expansion patterns?
>>
>> Yes, that is what I had in mind.
>>
>
>
> Why isn't it just an indirect call in the cases that would require a GOT
> slot and a direct call otherwise ? I'm trying to work out what's so
> different on each target that mandates this to be in the target backend.
> Also it would be better to push the tests into gcc.dg if you can and check
> for the absence of a relocation so that folks at least see these as being
> UNSUPPORTED on their target.

I am not familiar with PLT calls for other targets.  I can move the
tests to gcc.dg but what relocation are you suggesting I check for?

Thanks
Sri


>
>
>
> Ramana
>>
>> >
>> > Also I think the PLT calls have EBX in call fusage wich is added by
>> > ix86_expand_call.
>> >   else
>> >     {
>> >       /* Static functions and indirect calls don't need the pic
>> > register.  */
>> >       if (flag_pic
>> >           && (!TARGET_64BIT
>> >               || (ix86_cmodel == CM_LARGE_PIC
>> >                   && DEFAULT_ABI != MS_ABI))
>> >           && GET_CODE (XEXP (fnaddr, 0)) == SYMBOL_REF
>> >           && ! SYMBOL_REF_LOCAL_P (XEXP (fnaddr, 0)))
>> >         {
>> >           use_reg (&use, gen_rtx_REG (Pmode,
>> > REAL_PIC_OFFSET_TABLE_REGNUM));
>> >           if (ix86_use_pseudo_pic_reg ())
>> >             emit_move_insn (gen_rtx_REG (Pmode,
>> > REAL_PIC_OFFSET_TABLE_REGNUM),
>> >                             pic_offset_table_rtx);
>> >         }
>> >
>> > I think you want to take that away from FUSAGE there just like we do for
>> > local calls
>> > (and in fact the code should already check flag_pic && flag_plt I
>> > suppose.
>>
>> Done that now and patch attached.
>>
>> Thanks
>> Sri
>>
>> >
>> > Honza


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