Annotation of src/usr.bin/pmdb/pmdb.h, Revision 1.5
1.5 ! art 1: /* $OpenBSD: pmdb.h,v 1.4 2002/07/22 01:20:50 art 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 */
84: int process_kill(struct pstate *);
85: int read_from_pid(pid_t pid, off_t from, void *to, size_t size);
86: int write_to_pid(pid_t pid, off_t to, void *from, size_t size);
87:
88: /* process.c */
89: int process_load(struct pstate *);
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);