[prev in list] [next in list] [prev in thread] [next in thread] 

List:       binutils
Subject:    PowerPC64 call lacks nop error
From:       Alan Modra <amodra () gmail ! com>
Date:       2014-08-29 1:34:20
Message-ID: 20140829012220.GK15716 () bubble ! grove ! modra ! org
[Download RAW message or body]

Enough people accidentally or otherwise use -mcmodel=small then wonder
why a call that is local is behaving as if it is going via the PLT.

	* elf64-ppc.c (ppc64_elf_relocate_section): Report a different
	error for calls via a toc adjusting stub without a nop.

diff --git a/bfd/elf64-ppc.c b/bfd/elf64-ppc.c
index 2b9b07e..123a33a 100644
--- a/bfd/elf64-ppc.c
+++ b/bfd/elf64-ppc.c
@@ -13761,10 +13761,17 @@ ppc64_elf_relocate_section (bfd *output_bfd,
 
 	      if (!can_plt_call)
 		{
-		  info->callbacks->einfo
-		    (_("%P: %H: call to `%T' lacks nop, can't restore toc; "
-		       "recompile with -fPIC\n"),
-		     input_bfd, input_section, rel->r_offset, sym_name);
+		  if (stub_entry->stub_type == ppc_stub_plt_call
+		      || stub_entry->stub_type == ppc_stub_plt_call_r2save)
+		    info->callbacks->einfo
+		      (_("%P: %H: call to `%T' lacks nop, can't restore toc; "
+			 "recompile with -fPIC\n"),
+		       input_bfd, input_section, rel->r_offset, sym_name);
+		  else
+		    info->callbacks->einfo
+		      (_("%P: %H: call to `%T' lacks nop, can't restore toc; "
+			 "(-mcmodel=small toc adjust stub)\n"),
+		       input_bfd, input_section, rel->r_offset, sym_name);
 
 		  bfd_set_error (bfd_error_bad_value);
 		  ret = FALSE;

-- 
Alan Modra
Australia Development Lab, IBM

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic