These functions provide machine–independent access to object files
in a directory or an archive. Mach(2) and symbol(2) describe additional
library functions for interpreting executable files and executing
Object files contain no formal symbol table; instead, references
to symbols must be extracted from the encoded object representation
and resolved. The resulting symbol information is loaded into
a dummy symbol table where it is available for processing by an
application. The organization of the dummy symbol table
is identical to that produced by the loader and described in symbol(2)
and a.out(6): a vector of Sym data structures defining the name,
type and relative offset of each symbol.
Objtype reads the header at the current position of the file associated
with bp (see Bio(2)) to see if it is an intermediate object file.
If it is, a code indicating the architecture type of the file
is returned and the second argument, if it is non–zero, is set
pointing to a string describing the type of the file. If the header
not indicate an object file, –1 is returned. The header may be
at the start of an object file or at the beginning of an archive
member. The file is rewound to its starting position after decoding
Readobj constructs a symbol table for the object file associated
with bp. The second argument contains the type code produced by
function objtype. The file must be positioned at the start of
the object file. Each invocation of readobj destroys the symbol
definitions for any previous file.
Objtraverse scans the symbol table previously built by readobj
or readar. Objtraverse requires two arguments: the address of
a call–back function and a generic pointer. The call–back function
is invoked once for each symbol in the symbol table with the address
of a Sym data structure as the first argument and the
generic pointer as the second.
Isar reads the header at the current point in the file associated
with bp and returns 1 if it is an archive or zero otherwise. The
file is positioned at the end of the archive header and at the
beginning of the first member of the archive.
Nextar extracts information describing the archive member stored
at offset in the file associated with bp. If the header describing
the member can be extracted and decoded, the size of the member
is returned. Adding this value to offset yields the offset of
the beginning of the next member in the archive. On return
the input file is positioned at the end of the member header and
the name of the member is stored in buf, a buffer of SARNAME characters.
If there are no more members, nextar returns zero; a negative
return indicates a missing or malformed header.
Readar constructs the symbol table of the object file stored at
the current position in the archive associated with bp. This function
operates exactly as readobj; the only difference is the extra
argument, end, specifying the offset to the beginning of the next
member in the archive. Readar leaves the file positioned at