OBJECT(2)OBJECT(2)NAME
objtype, readobj, objtraverse, isar, nextar, readar - object file
interpretation functions
SYNOPSIS
#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)
DESCRIPTION
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
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
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 does 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 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
returned. Adding this value to offset yields the offset of the begin‐
ning 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 that point.
SOURCE
/sys/src/libmach
SEE ALSOmach(2), symbol(2), bio(2), a.out(6)DIAGNOSTICS
These routines set errstr.
OBJECT(2)