Correct elf32-ppc dynamic relocs

Alan Modra amodra@bigpond.net.au
Wed Dec 18 05:16:00 GMT 2002


Add a comment to stop me "fixing" this code again..

	* elf32-ppc.c (ppc_elf_relocate_section): Reorganize dynamic reloc
	code a little.  Comment on dynamic relocs against section symbols.

Index: bfd/elf32-ppc.c
===================================================================
RCS file: /cvs/src/src/bfd/elf32-ppc.c,v
retrieving revision 1.59
diff -u -p -r1.59 elf32-ppc.c
--- bfd/elf32-ppc.c	12 Dec 2002 10:26:01 -0000	1.59
+++ bfd/elf32-ppc.c	17 Dec 2002 06:15:47 -0000
@@ -3221,11 +3221,10 @@ ppc_elf_relocate_section (output_bfd, in
 		}
 	      else
 		{
+		  outrel.r_addend = relocation + rel->r_addend;
+
 		  if (r_type == R_PPC_ADDR32)
-		    {
-		      outrel.r_info = ELF32_R_INFO (0, R_PPC_RELATIVE);
-		      outrel.r_addend = relocation + rel->r_addend;
-		    }
+		    outrel.r_info = ELF32_R_INFO (0, R_PPC_RELATIVE);
 		  else
 		    {
 		      long indx;
@@ -3239,7 +3238,8 @@ ppc_elf_relocate_section (output_bfd, in
 					  == bfd_link_hash_defweak));
 			  sec = h->root.u.def.section;
 			}
-		      if (sec != NULL && bfd_is_abs_section (sec))
+
+		      if (bfd_is_abs_section (sec))
 			indx = 0;
 		      else if (sec == NULL || sec->owner == NULL)
 			{
@@ -3250,6 +3250,11 @@ ppc_elf_relocate_section (output_bfd, in
 			{
 			  asection *osec;
 
+			  /* We are turning this relocation into one
+			     against a section symbol.  It would be
+			     proper to subtract the symbol's value,
+			     osec->vma, from the emitted reloc addend,
+			     but ld.so expects buggy relocs.  */
 			  osec = sec->output_section;
 			  indx = elf_section_data (osec)->dynindx;
 			  BFD_ASSERT (indx > 0);
@@ -3264,7 +3269,6 @@ ppc_elf_relocate_section (output_bfd, in
 			}
 
 		      outrel.r_info = ELF32_R_INFO (indx, r_type);
-		      outrel.r_addend = relocation + rel->r_addend;
 		    }
 		}
 
-- 
Alan Modra
IBM OzLabs - Linux Technology Centre



More information about the Binutils mailing list