bfd: Adding symbols from an object file

 
 2.17.2.2 Adding symbols from an object file
 ...........................................
 
 When the '_bfd_link_add_symbols' routine is passed an object file, it
 must add all externally visible symbols in that object file to the hash
 table.  The actual work of adding the symbol to the hash table is
 normally handled by the function '_bfd_generic_link_add_one_symbol'.
 The '_bfd_link_add_symbols' routine is responsible for reading all the
 symbols from the object file and passing the correct information to
 '_bfd_generic_link_add_one_symbol'.
 
    The '_bfd_link_add_symbols' routine should not use
 'bfd_canonicalize_symtab' to read the symbols.  The point of providing
 this routine is to avoid the overhead of converting the symbols into
 generic 'asymbol' structures.
 
    '_bfd_generic_link_add_one_symbol' handles the details of combining
 common symbols, warning about multiple definitions, and so forth.  It
 takes arguments which describe the symbol to add, notably symbol flags,
 a section, and an offset.  The symbol flags include such things as
 'BSF_WEAK' or 'BSF_INDIRECT'.  The section is a section in the object
 file, or something like 'bfd_und_section_ptr' for an undefined symbol or
 'bfd_com_section_ptr' for a common symbol.
 
    If the '_bfd_final_link' routine is also going to need to read the
 symbol information, the '_bfd_link_add_symbols' routine should save it
 somewhere attached to the object file BFD. However, the information
 should only be saved if the 'keep_memory' field of the 'info' argument
 is TRUE, so that the '-no-keep-memory' linker switch is effective.
 
    The a.out function which adds symbols from an object file is
 'aout_link_add_object_symbols', and most of the interesting work is in
 'aout_link_add_symbols'.  The latter saves pointers to the hash tables
 entries created by '_bfd_generic_link_add_one_symbol' indexed by symbol
 number, so that the '_bfd_final_link' routine does not have to call the
 hash table lookup routine to locate the entry.