The TARGET_ASM_OUTPUT_MI_THUNK hook doesn't take into account the variant when we compile for PIC.
gcc/ 2016-12-13 Claudiu Zissulescu <claz...@synopsys.com> * config/arc/arc.c (arc_output_mi_thunk): Emit PIC calls. --- gcc/config/arc/arc.c | 24 +++++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/gcc/config/arc/arc.c b/gcc/config/arc/arc.c index 73d72c68..36582d2 100644 --- a/gcc/config/arc/arc.c +++ b/gcc/config/arc/arc.c @@ -6434,10 +6434,28 @@ arc_output_mi_thunk (FILE *file, tree thunk ATTRIBUTE_UNUSED, fnaddr = XEXP (DECL_RTL (function), 0); if (arc_is_longcall_p (fnaddr)) - fputs ("\tj\t", file); + { + if (flag_pic) + { + asm_fprintf (file, "\tld\t%s, [pcl, @", + ARC_TEMP_SCRATCH_REG); + assemble_name (file, XSTR (fnaddr, 0)); + fputs ("@gotpc]\n", file); + asm_fprintf (file, "\tj\t[%s]", ARC_TEMP_SCRATCH_REG); + } + else + { + fputs ("\tj\t@", file); + assemble_name (file, XSTR (fnaddr, 0)); + } + } else - fputs ("\tb\t", file); - assemble_name (file, XSTR (fnaddr, 0)); + { + fputs ("\tb\t@", file); + assemble_name (file, XSTR (fnaddr, 0)); + if (flag_pic) + fputs ("@plt\n", file); + } fputc ('\n', file); } -- 1.9.1