commit 4a34d8ea3153622a953355813c0c79593ffd2331
parent 3491cb2bfc76504d2fe3c6ee2cb30528d4589c92
Author: Brian Swetland <swetland@frotz.net>
Date:   Sun, 21 Jun 2015 02:42:22 -0700
debugger: avoid excessive chatter when errors persist
Diffstat:
3 files changed, 11 insertions(+), 6 deletions(-)
diff --git a/tools/debugger-core.c b/tools/debugger-core.c
@@ -92,14 +92,17 @@ void debugger_lock() {
 }
 
 void debugger_unlock() {
+	if (swdp_error()) {
+		xprintf("SWD ERROR\n");
+	}
 	pthread_mutex_unlock(&_dbg_lock);
 }
 
 void *debugger_monitor(void *arg) {
 	for (;;) {
-		debugger_lock();
+		pthread_mutex_lock(&_dbg_lock);
 		monitor();
-		debugger_unlock();
+		pthread_mutex_unlock(&_dbg_lock);
 		usleep(250000);
 	}
 }
diff --git a/tools/rswdp.c b/tools/rswdp.c
@@ -39,6 +39,10 @@ static usb_handle *usb;
 
 static int swd_error = 0;
 
+int swdp_error(void) {
+	return swd_error;
+}
+
 #define MAXWORDS 512
 
 struct txn {
@@ -113,10 +117,7 @@ static int process_reply(struct txn *t, u32 *data, int count) {
 			continue;
 		case CMD_STATUS:
 			if (op) {
-				if (swd_error == 0) {
-					swd_error = -op;
-					fprintf(stderr, "SWD ERROR\n");
-				}
+				swd_error = -op;
 				return -op;
 			} else {
 				return 0;
diff --git a/tools/rswdp.h b/tools/rswdp.h
@@ -49,6 +49,7 @@ int swdp_watchpoint_rw(unsigned n, u32 addr);
 /* attempt to clear any error state from previous transactions */
 /* return 0 if successful (or no error state existed) */
 int swdp_clear_error(void);
+int swdp_error(void);
 
 int swdp_reset(void);