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]

PATCH: Return relocation error on unsupported relocation


Hi,

I checked in this patch to return relocation error on unsupported
relocation instead of crash.

H.J.
---
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index c745c2a..a724277 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,11 @@
 2011-04-09  H.J. Lu  <hongjiu.lu@intel.com>
 
+	* elf32-i386.c (elf_i386_relocate_section): Return relocation
+	error on unsupported relocation.
+	* elf64-x86-64.c (elf_x86_64_relocate_section): Likewise.
+
+2011-04-09  H.J. Lu  <hongjiu.lu@intel.com>
+
 	PR binutils/12657
 	* hosts/x86-64linux.h (elf_prstatus32): Replace __pid_t with
 	pid_t.
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index 1b76cb4..acabeb3 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -3451,7 +3451,11 @@ elf_i386_relocate_section (bfd *output_bfd,
 
 	      sreloc = elf_section_data (input_section)->sreloc;
 
-	      BFD_ASSERT (sreloc != NULL && sreloc->contents != NULL);
+	      if (sreloc == NULL || sreloc->contents == NULL)
+		{
+		  r = bfd_reloc_notsupported;
+		  goto check_relocation_error;
+		}
 
 	      loc = sreloc->contents;
 	      loc += sreloc->reloc_count++ * sizeof (Elf32_External_Rel);
@@ -4096,6 +4100,7 @@ do_relocation:
 				    contents, rel->r_offset,
 				    relocation, 0);
 
+check_relocation_error:
       if (r != bfd_reloc_ok)
 	{
 	  const char *name;
diff --git a/bfd/elf64-x86-64.c b/bfd/elf64-x86-64.c
index 927b3ed..ea837a3 100644
--- a/bfd/elf64-x86-64.c
+++ b/bfd/elf64-x86-64.c
@@ -3411,7 +3411,11 @@ elf_x86_64_relocate_section (bfd *output_bfd,
 
 	      sreloc = elf_section_data (input_section)->sreloc;
 
-	      BFD_ASSERT (sreloc != NULL && sreloc->contents != NULL);
+	      if (sreloc == NULL || sreloc->contents == NULL)
+		{
+		  r = bfd_reloc_notsupported;
+		  goto check_relocation_error;
+		}
 
 	      elf_append_rela (output_bfd, sreloc, &outrel);
 
@@ -3868,6 +3872,7 @@ do_relocation:
 				    contents, rel->r_offset,
 				    relocation, rel->r_addend);
 
+check_relocation_error:
       if (r != bfd_reloc_ok)
 	{
 	  const char *name;
@@ -3896,7 +3901,7 @@ do_relocation:
 	  else
 	    {
 	      (*_bfd_error_handler)
-		(_("%B(%A+0x%lx): reloc against `%s': error %d"),
+		(_("%B(%A+0x%lx): reloc against `%s': error %r"),
 		 input_bfd, input_section,
 		 (long) rel->r_offset, name, (int) r);
 	      return FALSE;


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