#### 2.7.5 Symbol handling functions

##### 2.7.5.1 `bfd_get_symtab_upper_bound`

Description
Return the number of bytes required to store a vector of pointers to `asymbols` for all the symbols in the BFD abfd, including a terminal NULL pointer. If there are no symbols in the BFD, then return 0. If an error occurs, return -1.

         #define bfd_get_symtab_upper_bound(abfd) \
              BFD_SEND (abfd, _bfd_get_symtab_upper_bound, (abfd))

##### 2.7.5.2 `bfd_is_local_label`

Synopsis

         bfd_boolean bfd_is_local_label (bfd *abfd, asymbol *sym);

Description
Return TRUE if the given symbol sym in the BFD abfd is a compiler generated local label, else return FALSE.

##### 2.7.5.3 `bfd_is_local_label_name`

Synopsis

         bfd_boolean bfd_is_local_label_name (bfd *abfd, const char *name);

Description
Return TRUE if a symbol with the name name in the BFD abfd is a compiler generated local label, else return FALSE. This just checks whether the name has the form of a local label.

         #define bfd_is_local_label_name(abfd, name) \
           BFD_SEND (abfd, _bfd_is_local_label_name, (abfd, name))

##### 2.7.5.4 `bfd_is_target_special_symbol`

Synopsis

         bfd_boolean bfd_is_target_special_symbol (bfd *abfd, asymbol *sym);

Description
Return TRUE iff a symbol sym in the BFD abfd is something special to the particular target represented by the BFD. Such symbols should normally not be mentioned to the user.

         #define bfd_is_target_special_symbol(abfd, sym) \
           BFD_SEND (abfd, _bfd_is_target_special_symbol, (abfd, sym))

##### 2.7.5.5 `bfd_canonicalize_symtab`

Description
Read the symbols from the BFD abfd, and fills in the vector location with pointers to the symbols and a trailing NULL. Return the actual number of symbol pointers, not including the NULL.

         #define bfd_canonicalize_symtab(abfd, location) \
           BFD_SEND (abfd, _bfd_canonicalize_symtab, (abfd, location))

##### 2.7.5.6 `bfd_set_symtab`

Synopsis

         bfd_boolean bfd_set_symtab
            (bfd *abfd, asymbol **location, unsigned int count);

Description
Arrange that when the output BFD abfd is closed, the table location of count pointers to symbols will be written.

##### 2.7.5.7 `bfd_print_symbol_vandf`

Synopsis

         void bfd_print_symbol_vandf (bfd *abfd, void *file, asymbol *symbol);

Description
Print the value and flags of the symbol supplied to the stream file.

##### 2.7.5.8 `bfd_make_empty_symbol`

Description
Create a new `asymbol` structure for the BFD abfd and return a pointer to it.

This routine is necessary because each back end has private information surrounding the `asymbol`. Building your own `asymbol` and pointing to it will not create the private information, and will cause problems later on.

         #define bfd_make_empty_symbol(abfd) \
           BFD_SEND (abfd, _bfd_make_empty_symbol, (abfd))

##### 2.7.5.9 `_bfd_generic_make_empty_symbol`

Synopsis

         asymbol *_bfd_generic_make_empty_symbol (bfd *);

Description
Create a new `asymbol` structure for the BFD abfd and return a pointer to it. Used by core file routines, binary back-end and anywhere else where no private info is needed.

##### 2.7.5.10 `bfd_make_debug_symbol`

Description
Create a new `asymbol` structure for the BFD abfd, to be used as a debugging symbol. Further details of its use have yet to be worked out.

         #define bfd_make_debug_symbol(abfd,ptr,size) \
           BFD_SEND (abfd, _bfd_make_debug_symbol, (abfd, ptr, size))

##### 2.7.5.11 `bfd_decode_symclass`

Description
Return a character corresponding to the symbol class of symbol, or '?' for an unknown class.

Synopsis

         int bfd_decode_symclass (asymbol *symbol);

##### 2.7.5.12 `bfd_is_undefined_symclass`

Description
Returns non-zero if the class symbol returned by bfd_decode_symclass represents an undefined symbol. Returns zero otherwise.

Synopsis

         bfd_boolean bfd_is_undefined_symclass (int symclass);

##### 2.7.5.13 `bfd_symbol_info`

Description
Fill in the basic info about symbol that nm needs. Additional info may be added by the back-ends after calling this function.

Synopsis

         void bfd_symbol_info (asymbol *symbol, symbol_info *ret);

##### 2.7.5.14 `bfd_copy_private_symbol_data`

Synopsis

         bfd_boolean bfd_copy_private_symbol_data
            (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);

Description
Copy private symbol information from isym in the BFD ibfd to the symbol osym in the BFD obfd. Return `TRUE` on success, `FALSE` on error. Possible error returns are:

- `bfd_error_no_memory` - Not enough memory exists to create private data for osec.

         #define bfd_copy_private_symbol_data(ibfd, isymbol, obfd, osymbol) \
           BFD_SEND (obfd, _bfd_copy_private_symbol_data, \
                     (ibfd, isymbol, obfd, osymbol))