PERFORCE change 50312 for review
Marcel Moolenaar
marcel at FreeBSD.org
Sat Apr 3 21:44:16 PST 2004
http://perforce.freebsd.org/chv.cgi?CH=50312
Change 50312 by marcel at marcel_nfs on 2004/04/03 21:43:26
Implement the 'P' command (write register). While here,
add comments describing each command.
Affected files ...
.. //depot/projects/gdb/sys/gdb/gdb_main.c#13 edit
Differences ...
==== //depot/projects/gdb/sys/gdb/gdb_main.c#13 (text+ko) ====
@@ -113,19 +113,19 @@
while (gdb_rx_begin() == 0) {
printf("GDB: got '%s'\n", gdb_rxp);
switch (gdb_rx_char()) {
- case '?':
+ case '?': /* Last signal. */
gdb_tx_begin('S');
gdb_tx_hex(gdb_cpu_signal(type, code), 2);
gdb_tx_end();
break;
- case 'c': { /* continue */
+ case 'c': { /* Continue. */
uintmax_t addr;
if (!gdb_rx_varhex(&addr))
gdb_cpu_setreg(GDB_REG_PC, addr);
kdb_cpu_clear_singlestep();
return (1);
}
- case 'g': {
+ case 'g': { /* Read registers. */
size_t r;
gdb_tx_begin(0);
for (r = 0; r < GDB_NREGS; r++)
@@ -133,10 +133,10 @@
gdb_tx_end();
break;
}
- case 'G':
+ case 'G': /* Write registers. */
gdb_tx_err(0);
break;
- case 'H': {
+ case 'H': { /* Set thread. */
intmax_t tid;
gdb_rx_char();
gdb_rx_varhex(&tid);
@@ -145,10 +145,10 @@
gdb_tx_ok();
break;
}
- case 'k':
+ case 'k': /* Kill request. */
kdb_cpu_clear_singlestep();
return (1);
- case 'm': {
+ case 'm': { /* Read memory. */
uintmax_t addr, size;
if (gdb_rx_varhex(&addr) || gdb_rx_char() != ',' ||
gdb_rx_varhex(&size)) {
@@ -160,10 +160,21 @@
gdb_tx_end();
break;
}
- case 'M':
+ case 'M': /* Write memory. */
gdb_tx_err(0);
break;
- case 'q':
+ case 'P': { /* Write register. */
+ uintmax_t reg, val;
+ if (gdb_rx_varhex(®) || gdb_rx_char() != '=' ||
+ gdb_rx_varhex(&val)) {
+ gdb_tx_err(EINVAL);
+ break;
+ }
+ gdb_cpu_setreg(reg, val);
+ gdb_tx_ok();
+ break;
+ }
+ case 'q': /* General query. */
if (gdb_rx_equal("fThreadInfo")) {
thr_iter = LIST_FIRST(&allproc);
gdb_tx_begin('m');
@@ -186,14 +197,14 @@
} else if (!gdb_cpu_query())
gdb_tx_empty();
break;
- case 's': { /* single step */
+ case 's': { /* Step. */
uintmax_t addr;
if (!gdb_rx_varhex(&addr))
gdb_cpu_setreg(GDB_REG_PC, addr);
kdb_cpu_set_singlestep();
return (1);
}
- case 'T': {
+ case 'T': { /* Thread alive. */
intmax_t tid;
pid_t curtid;
gdb_rx_varhex(&tid);
More information about the p4-projects
mailing list