BFD_ASSERT (idx != 0);
if (idx == 0) {  (*_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; }
_bfd_elf_symbol_from_bfd_symbol (abfd, asym_ptr_ptr)     bfd *abfd;     struct symbol_cache_entry **asym_ptr_ptr;{  struct symbol_cache_entry *asym_ptr = *asym_ptr_ptr;  int idx;  flagword flags = asym_ptr->flags;  /* When gas creates relocations against local labels, it creates its     own symbol for the section, but does put the symbol into the     symbol chain, so udata is 0.  When the linker is generating     relocatable output, this section symbol may be for one of the     input sections rather than the output section.  */  if (asym_ptr->udata.i == 0      && (flags & BSF_SECTION_SYM)      && asym_ptr->section)    {      int indx;      if (asym_ptr->section->output_section != NULL)	indx = asym_ptr->section->output_section->index;      else	indx = asym_ptr->section->index;      if (elf_section_syms (abfd)[indx])	asym_ptr->udata.i = elf_section_syms (abfd)[indx]->udata.i;    }  idx = asym_ptr->udata.i;  BFD_ASSERT (idx != 0);#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));    fflush (stderr);  }#endif  return idx;}