#### 2.7.1 Reading symbols

There are two stages to reading a symbol table from a BFD: allocating storage, and the actual reading process. This is an excerpt from an application which reads the symbol table:

             long storage_needed;
             asymbol **symbol_table;
             long number_of_symbols;
             long i;

             storage_needed = bfd_get_symtab_upper_bound (abfd);

             if (storage_needed < 0)
               FAIL

             if (storage_needed == 0)
               return;

             symbol_table = xmalloc (storage_needed);
               ...
             number_of_symbols =
                bfd_canonicalize_symtab (abfd, symbol_table);

             if (number_of_symbols < 0)
               FAIL

             for (i = 0; i < number_of_symbols; i++)
               process_symbol (symbol_table[i]);

All storage for the symbols themselves is in an objalloc connected to the BFD; it is freed when the BFD is closed.