* elf32-ppc.c (ppc_elf_relocate_section): Allow ".sbss.*" and
authorAlan Modra <amodra@gmail.com>
Sat, 21 Sep 2002 10:09:13 +0000 (10:09 +0000)
committerAlan Modra <amodra@gmail.com>
Sat, 21 Sep 2002 10:09:13 +0000 (10:09 +0000)
".sdata.*" for R_PPC_SDAREL16, ".sbss2*" and ".sdata2*" for
R_PPC_EMB_SDA2REL.  Similarly for R_PPC_EMB_SDA21 and
R_PPC_EMB_RELSDA.

bfd/ChangeLog
bfd/elf32-ppc.c

index 4f97925..6d449d1 100644 (file)
@@ -1,5 +1,10 @@
 2002-09-21  Alan Modra  <amodra@bigpond.net.au>
 
+       * elf32-ppc.c (ppc_elf_relocate_section): Allow ".sbss.*" and
+       ".sdata.*" for R_PPC_SDAREL16, ".sbss2*" and ".sdata2*" for
+       R_PPC_EMB_SDA2REL.  Similarly for R_PPC_EMB_SDA21 and
+       R_PPC_EMB_RELSDA.
+
        * elfcode.h (elf_slurp_reloc_table_from_section): Make "symcount"
        unsigned.  Move "symcount" assignment out of loop.
        * Makefile.am: Run "make dep-am".
index a2a0a6d..6faffd2 100644 (file)
@@ -3483,8 +3483,10 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 
            BFD_ASSERT (sec != (asection *) 0);
            name = bfd_get_section_name (abfd, sec->output_section);
-           if (strcmp (name, ".sdata") != 0
-               && strcmp (name, ".sbss") != 0)
+           if (! ((strncmp (name, ".sdata", 6) == 0
+                   && (name[6] == 0 || name[6] == '.'))
+                  || (strncmp (name, ".sbss", 5) == 0
+                      && (name[5] == 0 || name[5] == '.'))))
              {
                (*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
                                       bfd_archive_filename (input_bfd),
@@ -3505,7 +3507,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 
            BFD_ASSERT (sec != (asection *) 0);
            name = bfd_get_section_name (abfd, sec->output_section);
-           if (strcmp (name, ".sdata2") != 0 && strcmp (name, ".sbss2") != 0)
+           if (! (strncmp (name, ".sdata2", 7) == 0
+                  || strncmp (name, ".sbss2", 6) == 0))
              {
                (*_bfd_error_handler) (_("%s: The target (%s) of a %s relocation is in the wrong output section (%s)"),
                                       bfd_archive_filename (input_bfd),
@@ -3532,7 +3535,10 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
 
            BFD_ASSERT (sec != (asection *) 0);
            name = bfd_get_section_name (abfd, sec->output_section);
-           if (strcmp (name, ".sdata") == 0 || strcmp (name, ".sbss") == 0)
+           if (((strncmp (name, ".sdata", 6) == 0      
+                 && (name[6] == 0 || name[6] == '.'))
+                || (strncmp (name, ".sbss", 5) == 0
+                    && (name[5] == 0 || name[5] == '.'))))
              {
                reg = 13;
                addend -= (sdata->sym_hash->root.u.def.value
@@ -3540,8 +3546,8 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                           + sdata->sym_hash->root.u.def.section->output_offset);
              }
 
-           else if (strcmp (name, ".sdata2") == 0
-                    || strcmp (name, ".sbss2") == 0)
+           else if (strncmp (name, ".sdata2", 7) == 0
+                    || strncmp (name, ".sbss2", 6) == 0)
              {
                reg = 2;
                addend -= (sdata2->sym_hash->root.u.def.value