From owner-p4-projects@FreeBSD.ORG Sat Apr 3 21:44:16 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 6731516A4D0; Sat, 3 Apr 2004 21:44:16 -0800 (PST) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4301816A4CE for ; Sat, 3 Apr 2004 21:44:16 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 2456743D41 for ; Sat, 3 Apr 2004 21:44:16 -0800 (PST) (envelope-from marcel@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id i345iFGe097554 for ; Sat, 3 Apr 2004 21:44:15 -0800 (PST) (envelope-from marcel@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i345iFYS097551 for perforce@freebsd.org; Sat, 3 Apr 2004 21:44:15 -0800 (PST) (envelope-from marcel@freebsd.org) Date: Sat, 3 Apr 2004 21:44:15 -0800 (PST) Message-Id: <200404040544.i345iFYS097551@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to marcel@freebsd.org using -f From: Marcel Moolenaar To: Perforce Change Reviews Subject: PERFORCE change 50312 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 04 Apr 2004 05:44:16 -0000 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);