| .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. |