* elf32-ppc.c (ppc_elf_relocate_section): Reorganize dynamic reloc
authorAlan Modra <amodra@gmail.com>
Wed, 18 Dec 2002 13:16:35 +0000 (13:16 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 18 Dec 2002 13:16:35 +0000 (13:16 +0000)
code a little.  Comment on dynamic relocs against section symbols.

bfd/ChangeLog
bfd/elf32-ppc.c

index a71f60a107ed525c9e145949720dd5c9730c54a7..73fe10ca08b333de3e0c160bc5064cde4ca75da4 100644 (file)
@@ -1,3 +1,8 @@
+2002-12-18  Alan Modra  <amodra@bigpond.net.au>
+
+       * elf32-ppc.c (ppc_elf_relocate_section): Reorganize dynamic reloc
+       code a little.  Comment on dynamic relocs against section symbols.
+
 2002-12-17  Roger Sayle  <roger@eyesopen.com>
 
        * configure.host (ia64-*-hpux*): Support 64 bit targets using
index 791060168fbc3efa8d61407d0b7c3078e8202983..2406c6751b5dcf8c6f33a3f3b3fcc199345ced0a 100644 (file)
@@ -3221,11 +3221,10 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                }
              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, info, input_bfd, input_section,
                                          == 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, info, input_bfd, input_section,
                        {
                          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, info, input_bfd, input_section,
                        }
 
                      outrel.r_info = ELF32_R_INFO (indx, r_type);
-                     outrel.r_addend = relocation + rel->r_addend;
                    }
                }
 
This page took 0.0379 seconds and 4 git commands to generate.