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