* elf.c (_bfd_elf_symbol_from_bfd_symbol): Print a useful error
authorIan Lance Taylor <ian@airs.com>
Mon, 4 Mar 1996 17:50:38 +0000 (17:50 +0000)
committerIan Lance Taylor <ian@airs.com>
Mon, 4 Mar 1996 17:50:38 +0000 (17:50 +0000)
message rather than calling BFD_ASSERT.
* elfcode.h (write_relocs): Check return value of
_bfd_elf_symbol_from_bfd_symbol.

bfd/ChangeLog
bfd/elf.c

index dbf132814580195baac3e6eb2f4946921d6dd129..8b3543b97c59c75cc7ccd53ab624cbd68d24afc0 100644 (file)
@@ -1,3 +1,10 @@
+Mon Mar  4 12:49:16 1996  Ian Lance Taylor  <ian@cygnus.com>
+
+       * elf.c (_bfd_elf_symbol_from_bfd_symbol): Print a useful error
+       message rather than calling BFD_ASSERT.
+       * elfcode.h (write_relocs): Check return value of
+       _bfd_elf_symbol_from_bfd_symbol.
+
 Fri Mar  1 09:42:59 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
        * elf32-ppc.c (ppc_elf_add_symbol_hook): Don't set SEC_LOAD flag
index 8221561d862a069160454e4bd1a4b3cdba28cc64..fdc16d9091e107f4f644bbcb0711af7cf9331732 100644 (file)
--- a/bfd/elf.c
+++ b/bfd/elf.c
@@ -2583,8 +2583,10 @@ _bfd_elf_section_from_bfd_section (abfd, asect)
   return -1;
 }
 
-/* given a symbol, return the bfd index for that symbol.  */
- int
+/* Given a BFD symbol, return the index in the ELF symbol table, or -1
+   on error.  */
+
+int
 _bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
      bfd *abfd;
      struct symbol_cache_entry **asym_ptr_ptr;
@@ -2613,13 +2615,24 @@ _bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)
     }
 
   idx = asym_ptr->udata.i;
-  BFD_ASSERT (idx != 0);
+
+  if (idx == 0)
+    {
+      /* This case can occur when using --strip-symbol on a symbol
+         which is used in a relocation entry.  */
+      (*_bfd_error_handler)
+       ("%s: symbol `%s' required but not present",
+        bfd_get_filename (abfd), bfd_asymbol_name (asym_ptr));
+      bfd_set_error (bfd_error_no_symbols);
+      return -1;
+    }
 
 #if DEBUG & 4
   {
     fprintf (stderr,
             "elf_symbol_from_bfd_symbol 0x%.8lx, name = %s, sym num = %d, flags = 0x%.8lx%s\n",
-     (long) asym_ptr, asym_ptr->name, idx, flags, elf_symbol_flags (flags));
+            (long) asym_ptr, asym_ptr->name, idx, flags,
+            elf_symbol_flags (flags));
     fflush (stderr);
   }
 #endif