Each port of BFD to a different machine requires the creation of a target back end. All the back end provides to the root part of BFD is a structure containing pointers to functions which perform certain low level operations on files. BFD translates the applications's requests through a pointer into calls to the back end routines.
When a file is opened with
bfd_openr, its format and
target are unknown. BFD uses various mechanisms to determine
how to interpret the file. The operations performed are:
- Create a BFD by calling the internal routine
_bfd_new_bfd, then call
bfd_find_targetwith the target string supplied to
bfd_openrand the new BFD pointer.
- If a null target string was provided to
bfd_find_target, look up the environment variable
GNUTARGETand use that as the target string.
- If the target string is still
NULL, or the target string is
default, then use the first item in the target vector as the target type, and set
target_defaultedin the BFD to cause
bfd_check_formatto loop through all the targets. See bfd_target. See Formats.
- Otherwise, inspect the elements in the target vector one by one, until a match on target name is found. When found, use it.
- Otherwise return the error
bfd_openrattempts to open the file using
bfd_open_file, and returns the BFD.
bfd_check_formaton the BFD with a suggested format. If
target_defaultedhas been set, each possible target type is tried to see if it recognizes the specified format.
TRUEwhen the caller guesses right.