.TH MACH-CMD 3
.SH NAME
attachargs, attachcore, attachdynamic, attachproc, proctextfile \- debugging processes and core files
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.br
.B #include <mach.h>
.PP
.ta +\w'\fLextern 'u +\w'\fLchar *'u
.B
int	attachcore(Fhdr *hdr)
.PP
.B
int	attachproc(int pid)
.PP
.B
int	attachdynamic(void)
.PP
.B
char*	proctextfile(int pid)
.PP
.B
int	attachargs(int argc, char **argv, int omode)
.PP
.B
.nf
extern	Fhdr*	symhdr;
extern	char*	symfil;
extern	Map*	symmap;
extern	Fhdr*	fhdrlist;
.ift .sp .5
.ifn .sp
extern	Fhdr*	corhdr;
extern	char*	corfil;
extern	Map*	cormap;
.ift .sp .5
.ifn .sp
extern	int	corpid;
extern	Regs*	correg;
.SH DESCRIPTION
These routines provide access to the objects
a typical debugger manipulates: an executable binary,
some number of shared libraries, a memory image 
in the form of a core dump or active process,
and a register set.
.PP
The maintained state is:
.TP
.I symhdr
The file header for the main binary.
.TP
.I symfil
The file name of the main binary.
.TP
.I symmap
The memory map of the main binary.
.TP
.I fhdrlist
A linked list (via the
.B Fhdr.next
fields) of all currently open headers
(see
.I symopen
in
.IR mach-symbol (3)).
When dynamically linked objects have been attached,
they are present in this linked list,
and therefore included in searches by
.IR indexsym ,
.IR lookupsym ,
and
.I findsym
(see
.IR mach-symbol (3)).
.TP
.I corhdr
The file header for the core dump, if any.
.TP
.I corfil
The file name of the core dump, if any.
.TP
.I cormap
The memory map of the core dump or attached process.
.TP
.I corpid
The process id of the attached process, if any.
.TP
.I correg
The register set of the core dump or attached process.
.PD
If these fields are not valid, they are zeroed.
.PP
.I Attachcore
and
.I attachproc
attach to an opened core file or an executing process.
They set
.IR corhdr ,
.IR corfil ,
.IR cormap ,
.IR corpid ,
and
.IR correg .
.PP
.I Proctextfile
returns the name of the main binary for the process with id
.IR pid .
.PP
.I Attachdynamic
requires that the memory image already be attached.
It reads the dynamic linker's internal run-time data structures
and then opens all the dynamic objects that are currently
loaded.
.PP
.I Attachargs
uses all of these functions while
parsing an argument vector as would be passed to
a debugger like
.IR db (1)
or
.IR acid (1).
It expects a list of executable files, core dump files, or process ids,
given in any order.
If extra arguments are given (for example, more than one executable, or both
a core dump and a process id), they are ignored and diagnostics are printed to 
standard error.
If arguments are missing (for example, the process id is given without an
executable file),
.I attachargs
fills them in as best it can.
.SH SOURCE
.B \*9/src/libmach
.SH "SEE ALSO
.IR mach (3),
.IR mach-file (3),
.IR mach-map (3)
.SH BUGS
The interface needs to be changed to support
multiple threads, each with its own register set.
