diff options
author | Antonio Borneo <borneo.antonio@gmail.com> | 2019-06-04 12:06:44 +0200 |
---|---|---|
committer | Antonio Borneo <borneo.antonio@gmail.com> | 2020-08-08 22:17:31 +0100 |
commit | 2f92598f0d6d8304a9c15f7050c9e888279cd2fa (patch) | |
tree | 3c3a772192aa10ce874317a7606439398f12a085 /src | |
parent | 6d45e485f98bb1712c0ec2f48c879ceaf6fd06ac (diff) | |
download | riscv-openocd-2f92598f0d6d8304a9c15f7050c9e888279cd2fa.zip riscv-openocd-2f92598f0d6d8304a9c15f7050c9e888279cd2fa.tar.gz riscv-openocd-2f92598f0d6d8304a9c15f7050c9e888279cd2fa.tar.bz2 |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/server/gdb_server.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/src/server/gdb_server.c b/src/server/gdb_server.c index 327d96b..61d7686 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. |