Date: Sat, 3 Apr 2004 21:44:15 -0800 (PST) From: Marcel Moolenaar <marcel@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 50312 for review Message-ID: <200404040544.i345iFYS097551@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=50312 Change 50312 by marcel@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);
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200404040544.i345iFYS097551>