term% ls -F
term% cat index.txt
OBJECT(2)                     System Calls Manual                    OBJECT(2)

       objtype,  readobj,  objtraverse, isar, nextar, readar - object file in‐
       terpretation functions

       #include <u.h>
       #include <libc.h>
       #include <bio.h>
       #include <mach.h>

       int  objtype(Biobuf *bp, char **name)

       int  readobj(Biobuf *bp, int objtype)

       void  objtraverse(void(*)(Sym*, void*), void*)

       int isar(Biobuf *bp)

       int nextar(Biobuf *bp, int offset, char *buf)

       int readar(Biobuf *bp, int objtype, int end)

       These functions provide machine-independent access to object files in a
       directory or an archive.  Mach(2) and symbol(2) describe additional li‐
       brary functions for interpreting executable files and executing images.

       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 sym‐
       bol  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

       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 does not indicate an
       object file, -1 is returned.  The header may be at the start of an  ob‐
       ject  file  or  at the beginning of an archive member.  The file is re‐
       wound to its starting position after decoding the header.

       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 pre‐
       vious 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 re‐
       turned.  Adding this value to offset yields the offset of the beginning
       of  the  next member in the archive.  On return the input file is posi‐
       tioned 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  op‐
       erates  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 that point.


       mach(2), symbol(2), bio(2), a.out(6)

       These routines set errstr.