On Mon, Jun 1, 2015 at 1:24 AM, Ramana Radhakrishnan <ramana.radhakrish...@arm.com> wrote: > >>> 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. >> >> > > > To be even more explicit, shouldn't this be handled similar to the way in > which -fno-plt is handled in a target agnostic manner ? After all, if you > can handle this for the command line, doing the same for a function which > has been decorated with attribute((noplt)) should be simple.
-fno-plt does not work for non-PIC code, having non-PIC code not use PLT was my primary motivation. Infact, if you go back in this thread, I suggested to HJ if I should piggyback on -fno-plt. I tried using the -fno-plt implementation to do this by removing the flag_pic check in calls.c, but that does not still work for non-PIC code. > >> 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? > > > Move the test to gcc.dg, add a target_support_no_plt function in > testsuite/lib/target-supports.exp and mark this as being supported only on > x86 and use scan-assembler to scan for PLT relocations for x86. Other > targets can add things as they deem fit. > > In any case, on a large number of elf/ linux targets I would have thought > the absence of a JMP_SLOT relocation would be good enough to check that this > is working correctly. > > regards > Ramana > > > > >> >> 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 >> >> >