Deleted Added
full compact
gdb_main.c (133446) gdb_main.c (138253)
1/*
2 * Copyright (c) 2004 Marcel Moolenaar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *

--- 11 unchanged lines hidden (view full) ---

20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*
2 * Copyright (c) 2004 Marcel Moolenaar
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *

--- 11 unchanged lines hidden (view full) ---

20 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/sys/gdb/gdb_main.c 133446 2004-08-10 19:32:33Z marcel $");
28__FBSDID("$FreeBSD: head/sys/gdb/gdb_main.c 138253 2004-12-01 06:40:35Z marcel $");
29
30#include <sys/param.h>
31#include <sys/systm.h>
32#include <sys/kdb.h>
33#include <sys/kernel.h>
34#include <sys/pcpu.h>
35#include <sys/proc.h>
36#include <sys/reboot.h>

--- 78 unchanged lines hidden (view full) ---

115 switch (gdb_rx_char()) {
116 case '?': /* Last signal. */
117 gdb_tx_begin('S');
118 gdb_tx_hex(gdb_cpu_signal(type, code), 2);
119 gdb_tx_end();
120 break;
121 case 'c': { /* Continue. */
122 uintmax_t addr;
29
30#include <sys/param.h>
31#include <sys/systm.h>
32#include <sys/kdb.h>
33#include <sys/kernel.h>
34#include <sys/pcpu.h>
35#include <sys/proc.h>
36#include <sys/reboot.h>

--- 78 unchanged lines hidden (view full) ---

115 switch (gdb_rx_char()) {
116 case '?': /* Last signal. */
117 gdb_tx_begin('S');
118 gdb_tx_hex(gdb_cpu_signal(type, code), 2);
119 gdb_tx_end();
120 break;
121 case 'c': { /* Continue. */
122 uintmax_t addr;
123 if (!gdb_rx_varhex(&addr))
124 gdb_cpu_setreg(GDB_REG_PC, addr);
123 register_t pc;
124 if (!gdb_rx_varhex(&addr)) {
125 pc = addr;
126 gdb_cpu_setreg(GDB_REG_PC, &pc);
127 }
125 kdb_cpu_clear_singlestep();
126 return (1);
127 }
128 case 'C': { /* Continue with signal. */
129 uintmax_t addr, sig;
128 kdb_cpu_clear_singlestep();
129 return (1);
130 }
131 case 'C': { /* Continue with signal. */
132 uintmax_t addr, sig;
133 register_t pc;
130 if (!gdb_rx_varhex(&sig) && gdb_rx_char() == ';' &&
134 if (!gdb_rx_varhex(&sig) && gdb_rx_char() == ';' &&
131 !gdb_rx_varhex(&addr))
132 gdb_cpu_setreg(GDB_REG_PC, addr);
135 !gdb_rx_varhex(&addr)) {
136 pc = addr;
137 gdb_cpu_setreg(GDB_REG_PC, &pc);
138 }
133 kdb_cpu_clear_singlestep();
134 return (1);
135 }
136 case 'g': { /* Read registers. */
137 size_t r;
138 gdb_tx_begin(0);
139 for (r = 0; r < GDB_NREGS; r++)
140 gdb_tx_reg(r);

--- 45 unchanged lines hidden (view full) ---

186 }
187 if (gdb_rx_mem((char *)(uintptr_t)addr, size) == 0)
188 gdb_tx_err(EIO);
189 else
190 gdb_tx_ok();
191 break;
192 }
193 case 'P': { /* Write register. */
139 kdb_cpu_clear_singlestep();
140 return (1);
141 }
142 case 'g': { /* Read registers. */
143 size_t r;
144 gdb_tx_begin(0);
145 for (r = 0; r < GDB_NREGS; r++)
146 gdb_tx_reg(r);

--- 45 unchanged lines hidden (view full) ---

192 }
193 if (gdb_rx_mem((char *)(uintptr_t)addr, size) == 0)
194 gdb_tx_err(EIO);
195 else
196 gdb_tx_ok();
197 break;
198 }
199 case 'P': { /* Write register. */
194 uintmax_t reg, val;
200 char *val;
201 uintmax_t reg;
202 val = gdb_rxp;
195 if (gdb_rx_varhex(&reg) || gdb_rx_char() != '=' ||
203 if (gdb_rx_varhex(&reg) || gdb_rx_char() != '=' ||
196 gdb_rx_varhex(&val)) {
204 !gdb_rx_mem(val, gdb_cpu_regsz(reg))) {
197 gdb_tx_err(EINVAL);
198 break;
199 }
200 gdb_cpu_setreg(reg, val);
201 gdb_tx_ok();
202 break;
203 }
204 case 'q': /* General query. */

--- 16 unchanged lines hidden (view full) ---

221 gdb_tx_begin('l');
222 gdb_tx_end();
223 }
224 } else if (!gdb_cpu_query())
225 gdb_tx_empty();
226 break;
227 case 's': { /* Step. */
228 uintmax_t addr;
205 gdb_tx_err(EINVAL);
206 break;
207 }
208 gdb_cpu_setreg(reg, val);
209 gdb_tx_ok();
210 break;
211 }
212 case 'q': /* General query. */

--- 16 unchanged lines hidden (view full) ---

229 gdb_tx_begin('l');
230 gdb_tx_end();
231 }
232 } else if (!gdb_cpu_query())
233 gdb_tx_empty();
234 break;
235 case 's': { /* Step. */
236 uintmax_t addr;
229 if (!gdb_rx_varhex(&addr))
230 gdb_cpu_setreg(GDB_REG_PC, addr);
237 register_t pc;
238 if (!gdb_rx_varhex(&addr)) {
239 pc = addr;
240 gdb_cpu_setreg(GDB_REG_PC, &pc);
241 }
231 kdb_cpu_set_singlestep();
232 return (1);
233 }
234 case 'S': { /* Step with signal. */
235 uintmax_t addr, sig;
242 kdb_cpu_set_singlestep();
243 return (1);
244 }
245 case 'S': { /* Step with signal. */
246 uintmax_t addr, sig;
247 register_t pc;
236 if (!gdb_rx_varhex(&sig) && gdb_rx_char() == ';' &&
248 if (!gdb_rx_varhex(&sig) && gdb_rx_char() == ';' &&
237 !gdb_rx_varhex(&addr))
238 gdb_cpu_setreg(GDB_REG_PC, addr);
249 !gdb_rx_varhex(&addr)) {
250 pc = addr;
251 gdb_cpu_setreg(GDB_REG_PC, &pc);
252 }
239 kdb_cpu_set_singlestep();
240 return (1);
241 }
242 case 'T': { /* Thread alive. */
243 intmax_t tid;
244 gdb_rx_varhex(&tid);
245 if (kdb_thr_lookup(tid) != NULL)
246 gdb_tx_ok();

--- 15 unchanged lines hidden ---
253 kdb_cpu_set_singlestep();
254 return (1);
255 }
256 case 'T': { /* Thread alive. */
257 intmax_t tid;
258 gdb_rx_varhex(&tid);
259 if (kdb_thr_lookup(tid) != NULL)
260 gdb_tx_ok();

--- 15 unchanged lines hidden ---