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
This commit is contained in:
Antonio Borneo 2019-06-04 12:06:44 +02:00
parent 6d45e485f9
commit 2f92598f0d
1 changed files with 11 additions and 0 deletions

View File

@ -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.