diff options
| author | Marcel Moolenaar <marcel@FreeBSD.org> | 2004-12-01 06:40:35 +0000 |
|---|---|---|
| committer | Marcel Moolenaar <marcel@FreeBSD.org> | 2004-12-01 06:40:35 +0000 |
| commit | bcc5241c43307d18ef4cb61b4f98eb624d31367d (patch) | |
| tree | 62c9a95681df36f1242efe2fd847059217302039 /sys/gdb/gdb_main.c | |
| parent | ba1c3b5304db3cc7a986b81bb39a4853904238f0 (diff) | |
Notes
Diffstat (limited to 'sys/gdb/gdb_main.c')
| -rw-r--r-- | sys/gdb/gdb_main.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/sys/gdb/gdb_main.c b/sys/gdb/gdb_main.c index 0eed036aa9ce..bed693af3082 100644 --- a/sys/gdb/gdb_main.c +++ b/sys/gdb/gdb_main.c @@ -120,16 +120,22 @@ gdb_trap(int type, int code) break; case 'c': { /* Continue. */ uintmax_t addr; - if (!gdb_rx_varhex(&addr)) - gdb_cpu_setreg(GDB_REG_PC, addr); + register_t pc; + if (!gdb_rx_varhex(&addr)) { + pc = addr; + gdb_cpu_setreg(GDB_REG_PC, &pc); + } kdb_cpu_clear_singlestep(); return (1); } case 'C': { /* Continue with signal. */ uintmax_t addr, sig; + register_t pc; if (!gdb_rx_varhex(&sig) && gdb_rx_char() == ';' && - !gdb_rx_varhex(&addr)) - gdb_cpu_setreg(GDB_REG_PC, addr); + !gdb_rx_varhex(&addr)) { + pc = addr; + gdb_cpu_setreg(GDB_REG_PC, &pc); + } kdb_cpu_clear_singlestep(); return (1); } @@ -191,9 +197,11 @@ gdb_trap(int type, int code) break; } case 'P': { /* Write register. */ - uintmax_t reg, val; + char *val; + uintmax_t reg; + val = gdb_rxp; if (gdb_rx_varhex(®) || gdb_rx_char() != '=' || - gdb_rx_varhex(&val)) { + !gdb_rx_mem(val, gdb_cpu_regsz(reg))) { gdb_tx_err(EINVAL); break; } @@ -226,16 +234,22 @@ gdb_trap(int type, int code) break; case 's': { /* Step. */ uintmax_t addr; - if (!gdb_rx_varhex(&addr)) - gdb_cpu_setreg(GDB_REG_PC, addr); + register_t pc; + if (!gdb_rx_varhex(&addr)) { + pc = addr; + gdb_cpu_setreg(GDB_REG_PC, &pc); + } kdb_cpu_set_singlestep(); return (1); } case 'S': { /* Step with signal. */ uintmax_t addr, sig; + register_t pc; if (!gdb_rx_varhex(&sig) && gdb_rx_char() == ';' && - !gdb_rx_varhex(&addr)) - gdb_cpu_setreg(GDB_REG_PC, addr); + !gdb_rx_varhex(&addr)) { + pc = addr; + gdb_cpu_setreg(GDB_REG_PC, &pc); + } kdb_cpu_set_singlestep(); return (1); } |
