[PATCH] builtin expansion of strncmp for rs6000

Joseph Myers joseph@codesourcery.com
Thu Jan 12 17:53:00 GMT 2017


On Thu, 15 Dec 2016, Aaron Sawdey wrote:

> +      emit_library_call_value (gen_rtx_SYMBOL_REF (Pmode, "strncmp"),
> +			       target, LCT_NORMAL, GET_MODE (target), 3,
> +			       force_reg (Pmode, XEXP (src1, 0)), Pmode,
> +			       force_reg (Pmode, XEXP (src2, 0)), Pmode,
> +			       len_rtx, GET_MODE (len_rtx));

Building glibc with GCC mainline for powerpc64le-linux-gnu (from my bot 
doing such builds and compilation parts of the testsuite for all GNU/Linux 
glibc ABIs daily), I'm seeing a failure of the elf/check-localplt test, 
"Extra PLT reference: libc.so: strncmp".

Without having bisected, I suspect this patch of being a likely cause of 
that failure.  glibc redirects internal calls to use hidden aliases such 
as __GI_strncmp to avoid them going through the PLT.  By using 
gen_rtx_SYMBOL_REF there with a hardcoded function name "strncmp", this 
code looks like it would render a declaration of strncmp with asm 
("__GI_strncmp") ineffective, generating a direct call to strncmp when 
glibc expects __GI_strncmp to be called instead.

I don't know how readily this code can be made to respect asm renaming of 
strncmp.  If it's hard to fix in GCC, I suppose glibc needs a powerpc 
version of symbol-hacks.h to handle this redirection.

-- 
Joseph S. Myers
joseph@codesourcery.com



More information about the Gcc-patches mailing list