This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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]

PR23207, hppa ld SIGSEGVs on invalid object files


We don't create PLT call stubs for anything in non-alloc sections,
so it doesn't pay to go looking for them.  The problem is that
non-alloc sections aren't processed by group_sections and thus don't
get a link_sec set up for them.

	PR 23207
	* elf32-hppa.c (final_link_relocate): Don't look for plt call
	stubs in non-alloc sections.

diff --git a/bfd/elf32-hppa.c b/bfd/elf32-hppa.c
index 722452b5af..5ad49abfe0 100644
--- a/bfd/elf32-hppa.c
+++ b/bfd/elf32-hppa.c
@@ -3267,18 +3267,19 @@ final_link_relocate (asection *input_section,
     case R_PARISC_PCREL22F:
       /* If this call should go via the plt, find the import stub in
 	 the stub hash.  */
-      if (sym_sec == NULL
-	  || sym_sec->output_section == NULL
-	  || (hh != NULL
-	      && hh->eh.plt.offset != (bfd_vma) -1
-	      && hh->eh.dynindx != -1
-	      && !hh->plabel
-	      && (bfd_link_pic (info)
-		  || !hh->eh.def_regular
-		  || hh->eh.root.type == bfd_link_hash_defweak)))
+      if ((input_section->flags & SEC_ALLOC) != 0
+	  && (sym_sec == NULL
+	      || sym_sec->output_section == NULL
+	      || (hh != NULL
+		  && hh->eh.plt.offset != (bfd_vma) -1
+		  && hh->eh.dynindx != -1
+		  && !hh->plabel
+		  && (bfd_link_pic (info)
+		      || !hh->eh.def_regular
+		      || hh->eh.root.type == bfd_link_hash_defweak))))
 	{
 	  hsh = hppa_get_stub_entry (input_section, sym_sec,
-					    hh, rela, htab);
+				     hh, rela, htab);
 	  if (hsh != NULL)
 	    {
 	      value = (hsh->stub_offset
@@ -3478,7 +3479,7 @@ final_link_relocate (asection *input_section,
       if (value + addend + max_branch_offset >= 2*max_branch_offset)
 	{
 	  hsh = hppa_get_stub_entry (input_section, sym_sec,
-					    hh, rela, htab);
+				     hh, rela, htab);
 	  if (hsh == NULL)
 	    return bfd_reloc_undefined;
 

-- 
Alan Modra
Australia Development Lab, IBM


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