while (curr_bfd != NULL)
     {
       unsigned int curr_count, i;
-      asymbol *sym;
+      som_symbol_type *sym;
 
       /* Make sure the symbol table has been read, then snag a pointer
         to it.  It's a little slimey to grab the symbols via obj_som_symtab,
       if (som_slurp_symbol_table (curr_bfd) == false)
        return false;
 
-      sym = (asymbol *)obj_som_symtab (curr_bfd);
+      sym = obj_som_symtab (curr_bfd);
       curr_count = bfd_get_symcount (curr_bfd);
 
       /* Examine each symbol to determine if it belongs in the
          struct som_misc_symbol_info info;
 
          /* Derive SOM information from the BFD symbol.  */
-         som_bfd_derive_misc_symbol_info (curr_bfd, sym, &info);
+         som_bfd_derive_misc_symbol_info (curr_bfd, &sym->symbol, &info);
 
          /* Should we include this symbol?  */
          if (info.symbol_type == ST_NULL
            continue;
 
          /* Do no include undefined symbols.  */
-         if (sym->section == &bfd_und_section)
+         if (sym->symbol.section == &bfd_und_section)
            continue;
 
          /* Bump the various counters, being careful to honor
             alignment considerations in the string table.  */
          (*num_syms)++;
-         *stringsize = *stringsize + strlen (sym->name) + 5;
+         *stringsize = *stringsize + strlen (sym->symbol.name) + 5;
          while (*stringsize % 4)
            (*stringsize)++;
        }
   while (curr_bfd != NULL)
     {
       unsigned int curr_count, i;
-      asymbol *sym;
+      som_symbol_type *sym;
 
       /* Make sure the symbol table has been read, then snag a pointer
         to it.  It's a little slimey to grab the symbols via obj_som_symtab,
       if (som_slurp_symbol_table (curr_bfd) == false)
        return false;
 
-      sym = (asymbol *)obj_som_symtab (curr_bfd);
+      sym = obj_som_symtab (curr_bfd);
       curr_count = bfd_get_symcount (curr_bfd);
 
       for (i = 0; i < curr_count; i++, sym++)
          struct som_misc_symbol_info info;
 
          /* Derive SOM information from the BFD symbol.  */
-         som_bfd_derive_misc_symbol_info (curr_bfd, sym, &info);
+         som_bfd_derive_misc_symbol_info (curr_bfd, &sym->symbol, &info);
 
          /* Should we include this symbol?  */
          if (info.symbol_type == ST_NULL
            continue;
 
          /* Do no include undefined symbols.  */
-         if (sym->section == &bfd_und_section)
+         if (sym->symbol.section == &bfd_und_section)
            continue;
 
          /* If this is the first symbol from this SOM, then update
          curr_lst_sym->must_qualify = 0;
          curr_lst_sym->initially_frozen = 0;
          curr_lst_sym->memory_resident = 0;
-         curr_lst_sym->is_common = (sym->section == &bfd_com_section);
+         curr_lst_sym->is_common = (sym->symbol.section == &bfd_com_section);
          curr_lst_sym->dup_common = 0;
          curr_lst_sym->xleast = 0;
          curr_lst_sym->arg_reloc = info.arg_reloc;
          curr_lst_sym->symbol_descriptor = 0;
          curr_lst_sym->reserved = 0;
          curr_lst_sym->som_index = som_index;
-         curr_lst_sym->symbol_key = som_bfd_ar_symbol_hash (sym);
+         curr_lst_sym->symbol_key = som_bfd_ar_symbol_hash (&sym->symbol);
          curr_lst_sym->next_entry = 0;
 
          /* Insert into the hash table.  */
 
 
          /* Update the string table.  */
-         bfd_put_32 (abfd, strlen (sym->name), p);
+         bfd_put_32 (abfd, strlen (sym->symbol.name), p);
          p += 4;
-         strcpy (p, sym->name);
-         p += strlen (sym->name) + 1;
+         strcpy (p, sym->symbol.name);
+         p += strlen (sym->symbol.name) + 1;
          while ((int)p % 4)
            {
              bfd_put_8 (abfd, 0, p);