[BACK]Return to pmdb.h CVS log [TXT][DIR] Up to [local] / src / usr.bin / pmdb

Annotation of src/usr.bin/pmdb/pmdb.h, Revision 1.7

1.7     ! jfb         1: /*     $OpenBSD: pmdb.h,v 1.6 2003/05/15 00:11:03 jfb Exp $    */
1.1       art         2: /*
                      3:  * Copyright (c) 2002 Artur Grabowski <art@openbsd.org>
                      4:  * All rights reserved.
                      5:  *
                      6:  * Redistribution and use in source and binary forms, with or without
                      7:  * modification, are permitted provided that the following conditions
                      8:  * are met:
                      9:  *
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. The name of the author may not be used to endorse or promote products
                     13:  *    derived from this software without specific prior written permission.
                     14:  *
                     15:  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
                     16:  * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
                     17:  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
                     18:  * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
                     19:  * EXEMPLARY, OR CONSEQUENTIAL  DAMAGES (INCLUDING, BUT NOT LIMITED TO,
                     20:  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
                     21:  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
                     22:  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
                     23:  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
                     24:  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     25:  */
                     26:
                     27: #include <sys/signal.h>                /* for NSIG */
                     28: #include <sys/queue.h>
                     29: #include <sys/ptrace.h>
1.3       fgsch      30: #include <sys/stat.h>
                     31:
1.1       art        32: #include <err.h>
                     33:
                     34: /* XXX - ugh, yuck, bleah. */
                     35: #ifndef PT_STEP
                     36: #define PT_STEP PT_CONTINUE
                     37: #endif
                     38:
                     39: /*
                     40:  * Process handling.
                     41:  */
                     42:
                     43: struct breakpoint;
                     44: struct callback;
1.3       fgsch      45: struct corefile;
1.1       art        46: struct sym_table;
                     47: struct sym_ops;
1.4       art        48: struct reg;
1.1       art        49:
                     50: /* XXX - should be machdep some day. */
                     51: typedef unsigned long reg;
                     52:
                     53: /* The state for a debugged process. */
                     54: struct pstate {
                     55:        pid_t ps_pid;
                     56:        enum { NONE, LOADED, RUNNING, STOPPED, TERMINATED } ps_state;
                     57:        int ps_argc;
                     58:        char **ps_argv;
                     59:        int ps_flags;
                     60:        int ps_signum;
                     61:        int ps_sigstate[NSIG];
                     62:        reg ps_npc;
                     63:        TAILQ_HEAD(,sym_table) ps_syms; /* all symbols tables in a list */
                     64:        struct sym_table *ps_sym_exe;   /* symbol table for the executable */
                     65:        struct sym_ops *ps_sops;        /* operations on symbol tables */
1.3       fgsch      66:        struct stat exec_stat;          /* stat of the exec file */
                     67:        struct corefile *ps_core;       /* core file data */
1.1       art        68:        TAILQ_HEAD(,breakpoint) ps_bkpts; /* breakpoints */
                     69:        TAILQ_HEAD(,callback) ps_sstep_cbs; /* single step actions */
                     70: };
                     71:
                     72: /* flags in ps_flags */
                     73: #define PSF_SYMBOLS    0x02            /* basic symbols loaded */
                     74: #define PSF_KILL       0x04            /* kill this process asap */
                     75: #define PSF_STEP       0x08            /* next continue should sstep */
1.3       fgsch      76: #define PSF_CORE       0x10            /* core file loaded */
                     77: #define PSF_ATCH       0x20            /* process attached with PT_ATTACH */
1.1       art        78:
                     79: /* ps_sigstate */
                     80: #define SS_STOP                0x00
                     81: #define SS_IGNORE      0x01
                     82:
                     83: /* misc helper functions */
1.7     ! jfb        84: int getexecpath(const char *, char *, size_t);
1.1       art        85: int process_kill(struct pstate *);
                     86:
                     87: /* process.c */
                     88: int process_load(struct pstate *);
1.7     ! jfb        89: int process_setargv(struct pstate *, int, char **);
1.4       art        90: int process_run(struct pstate *);
                     91: int process_read(struct pstate *, off_t, void *, size_t);
                     92: int process_write(struct pstate *, off_t, void *, size_t);
                     93: int process_getregs(struct pstate *, struct reg *);
                     94:
1.1       art        95: int cmd_process_run(int, char **, void *);
                     96: int cmd_process_cont(int, char **, void *);
                     97: int cmd_process_kill(int, char **, void *);
1.5       art        98: int cmd_process_setenv(int, char **, void *);
1.1       art        99:
                    100: /* signal.c */
                    101: void init_sigstate(struct pstate *);
                    102: void process_signal(struct pstate *, int, int, int);
                    103: int cmd_signal_ignore(int, char **, void *);
                    104: int cmd_signal_show(int, char **, void *);
                    105:
                    106: /*
                    107:  * Machine dependent stuff.
                    108:  */
                    109: /* register names */
                    110: struct md_def {
                    111:        const char **md_reg_names;      /* array of register names */
                    112:        const int nregs;                /* number of registers */
                    113:        const int pcoff;                /* offset of the pc */
                    114: };
                    115: extern struct md_def md_def;
                    116: void md_def_init(void);
                    117:
                    118: #define MDF_MAX_ARGS   16
                    119:
                    120: struct md_frame {
                    121:        reg pc, fp;
                    122:        int nargs;
                    123:        reg args[MDF_MAX_ARGS];
                    124: };
                    125:
                    126: /*
                    127:  * Return the registers for the process "ps" in the frame "frame".
                    128:  */
                    129: int md_getframe(struct pstate *, int, struct md_frame *);
                    130: int md_getregs(struct pstate *, reg *);
                    131:
                    132: /* misc */
                    133: void *emalloc(size_t);