MACH-CMD(3)                                           MACH-CMD(3)

     NAME
          attachargs, attachcore, attachdynamic, attachproc,
          proctextfile - debugging processes and core files

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

          int    attachcore(Fhdr *hdr)

          int    attachproc(int pid)

          int    attachdynamic(void)

          char*  proctextfile(int pid)

          int    attachargs(int argc, char **argv, int omode)

          extern Fhdr* symhdr;
          extern char* symfil;
          extern Map*  symmap;
          extern Fhdr* fhdrlist;

          extern Fhdr* corhdr;
          extern char* corfil;
          extern Map*  cormap;

          extern int   corpid;
          extern Regs* correg;

     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.

          The maintained state is:

          symhdr
               The file header for the main binary.

          symfil
               The file name of the main binary.

          symmap
               The memory map of the main binary.

          fhdrlist
               A linked list (via the Fhdr.next fields) of all

     Page 1                       Plan 9            (printed 12/22/24)

     MACH-CMD(3)                                           MACH-CMD(3)

               currently open headers (see symopen in mach-symbol(3)).
               When dynamically linked objects have been attached,
               they are present in this linked list, and therefore
               included in searches by indexsym, lookupsym, and
               findsym (see mach-symbol(3)).

          corhdr
               The file header for the core dump, if any.

          corfil
               The file name of the core dump, if any.

          cormap
               The memory map of the core dump or attached process.

          corpid
               The process id of the attached process, if any.

          correg
               The register set of the core dump or attached process.
               If these fields are not valid, they are zeroed.

          Attachcore and attachproc attach to an opened core file or
          an executing process.  They set corhdr, corfil, cormap,
          corpid, and correg.

          Proctextfile returns the name of the main binary for the
          process with id pid.

          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.

          Attachargs uses all of these functions while parsing an
          argument vector as would be passed to a debugger like db(1)
          or acid(1). It expects a list of executable files, core dump
          files, or process ids, given in any order.  If extra argu-
          ments 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), attachargs fills them in as best it can.

     SOURCE
          /usr/local/plan9/src/libmach

     SEE ALSO
          mach(3), mach-file(3), mach-map(3)

     BUGS
          The interface needs to be changed to support multiple

     Page 2                       Plan 9            (printed 12/22/24)

     MACH-CMD(3)                                           MACH-CMD(3)

          threads, each with its own register set.

     Page 3                       Plan 9            (printed 12/22/24)