aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntonio Borneo <borneo.antonio@gmail.com>2019-06-04 12:06:44 +0200
committerAntonio Borneo <borneo.antonio@gmail.com>2020-08-08 22:17:31 +0100
commit2f92598f0d6d8304a9c15f7050c9e888279cd2fa (patch)
tree3c3a772192aa10ce874317a7606439398f12a085
parent6d45e485f98bb1712c0ec2f48c879ceaf6fd06ac (diff)
downloadopenocd-jz4730-2f92598f0d6d8304a9c15f7050c9e888279cd2fa.tar.gz
gdb_server: refuse gdb connection if target is not examined
If the target is not examined, many internal data required for the gdb connections are not ready nor allocated. This causes OpenOCD to hit a segmentation fault. After the execution of the gdb-attach event handler, check if target has been examined and eventually return error to refuse the gdb connection. Plus, since OpenOCD does not implements non-stop mode yet, gdb expects the target to be halted by the inferior when the connection is established. Print a warning to inform the user in case the target is not halted, but still accept the gdb connection to permit the non-intrusive memory inspection with gdb, as explained in http://openocd.org/doc/html/GDB-and-OpenOCD.html#gdbmeminspect Change-Id: If727d68f683c3a94e4826e8c62977de41274ceff Signed-off-by: Antonio Borneo <borneo.antonio@gmail.com> Reviewed-on: http://openocd.zylin.com/5201 Tested-by: jenkins
-rw-r--r--src/server/gdb_server.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c
index 327d96b17..61d7686c4 100644
--- a/src/server/gdb_server.c
+++ b/src/server/gdb_server.c
@@ -1018,6 +1018,17 @@ static int gdb_new_connection(struct connection *connection)
target_name(target),
target_state_name(target));
+ if (!target_was_examined(target)) {
+ LOG_ERROR("Target %s not examined yet, refuse gdb connection %d!",
+ target_name(target), gdb_actual_connections);
+ gdb_actual_connections--;
+ return ERROR_TARGET_NOT_EXAMINED;
+ }
+
+ if (target->state == TARGET_HALTED)
+ LOG_WARNING("GDB connection %d on target %s not halted",
+ gdb_actual_connections, target_name(target));
+
/* DANGER! If we fail subsequently, we must remove this handler,
* otherwise we occasionally see crashes as the timer can invoke the
* callback fn.