OSDN Git Service

* elf32-ppc.c (ppc_elf_relocate_section): Don't use the relocation
authorIan Lance Taylor <ian@airs.com>
Tue, 3 Aug 1999 16:40:25 +0000 (16:40 +0000)
committerIan Lance Taylor <ian@airs.com>
Tue, 3 Aug 1999 16:40:25 +0000 (16:40 +0000)
value of a symbol in a SEC_DEBUGGING section.  Warn when doing a
relocation against a symbol in an input section with no output
section.  From Daniel Jacobowitz <drow@false.org>.

bfd/ChangeLog
bfd/elf32-ppc.c

index e17368a..487589a 100644 (file)
@@ -1,5 +1,10 @@
 1999-08-03  Ian Lance Taylor  <ian@zembu.com>
 
+       * elf32-ppc.c (ppc_elf_relocate_section): Don't use the relocation
+       value of a symbol in a SEC_DEBUGGING section.  Warn when doing a
+       relocation against a symbol in an input section with no output
+       section.  From Daniel Jacobowitz <drow@false.org>.
+
        * coff-stgo32.c (go32_stubbed_coff_object_p): Remove; not used.
 
        * acinclude.m4 (BFD_CC_FOR_BUILD): Change to use conftest, and to
index 83689c2..1de197b 100644 (file)
@@ -3038,7 +3038,12 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                      && ((! info->symbolic && h->dynindx != -1)
                          || (h->elf_link_hash_flags
                              & ELF_LINK_HASH_DEF_REGULAR) == 0)
-                     && (input_section->flags & SEC_ALLOC) != 0
+                     && ((input_section->flags & SEC_ALLOC) != 0
+                         /* Testing SEC_DEBUGGING here may be wrong.
+                             It's here to avoid a crash when
+                             generating a shared library with DWARF
+                             debugging information.  */
+                         || (input_section->flags & SEC_DEBUGGING) != 0)
                      && (r_type == R_PPC_ADDR32
                          || r_type == R_PPC_ADDR24
                          || r_type == R_PPC_ADDR16
@@ -3081,6 +3086,14 @@ ppc_elf_relocate_section (output_bfd, info, input_bfd, input_section,
                      obscure cases sec->output_section will be NULL.  */
                  relocation = 0;
                }
+             else if (sec->output_section == NULL)
+               {
+                  (*_bfd_error_handler)
+                    (_("%s: warning: unresolvable relocation against symbol `%s' from %s section"),
+                     bfd_get_filename (input_bfd), h->root.root.string,
+                     bfd_get_section_name (input_bfd, input_section));
+                 relocation = 0;
+               }
              else
                relocation = (h->root.u.def.value
                              + sec->output_section->vma