* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
- * along with this program; if not, write to the *
- * Free Software Foundation, Inc., *
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
+ * along with this program. If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
#ifdef HAVE_CONFIG_H
* warning only about subsequent ACK's. */
if (gdb_con->noack_mode > 1) {
LOG_WARNING("acknowledgment received, but no packet pending");
- } else {
+ } else if (gdb_con->noack_mode) {
LOG_DEBUG("Received first acknowledgment after entering noack mode. Ignoring it.");
gdb_con->noack_mode = 2;
}
static void gdb_signal_reply(struct target *target, struct connection *connection)
{
struct gdb_connection *gdb_connection = connection->priv;
- char sig_reply[20];
+ char sig_reply[45];
char stop_reason[20];
+ char current_thread[25];
int sig_reply_len;
int signal_var;
+ rtos_update_threads(target);
+
if (target->debug_reason == DBG_REASON_EXIT) {
sig_reply_len = snprintf(sig_reply, sizeof(sig_reply), "W00");
} else {
}
}
- sig_reply_len = snprintf(sig_reply, sizeof(sig_reply), "T%2.2x%s",
- signal_var, stop_reason);
+ current_thread[0] = '\0';
+ if (target->rtos != NULL) {
+ snprintf(current_thread, sizeof(current_thread), "thread:%016" PRIx64 ";", target->rtos->current_thread);
+ target->rtos->current_threadid = target->rtos->current_thread;
+ }
+
+ sig_reply_len = snprintf(sig_reply, sizeof(sig_reply), "T%2.2x%s%s",
+ signal_var, stop_reason, current_thread);
}
gdb_put_packet(connection, sig_reply, sig_reply_len);
gdb_connection->frontend_state = TARGET_HALTED;
- rtos_update_threads(target);
}
static void gdb_fileio_reply(struct target *target, struct connection *connection)
assert(reg_packet_size > 0);
reg_packet = malloc(reg_packet_size + 1); /* plus one for string termination null */
+ if (reg_packet == NULL)
+ return ERROR_FAIL;
+
reg_packet_p = reg_packet;
for (i = 0; i < reg_list_size; i++) {
tdesc_length = strlen(tdesc);
- struct fileio fileio;
+ struct fileio *fileio;
size_t size_written;
char *tdesc_filename = alloc_printf("%s.xml", target_type_name(target));
goto out;
}
- retval = fileio_write(&fileio, tdesc_length, tdesc, &size_written);
+ retval = fileio_write(fileio, tdesc_length, tdesc, &size_written);
- fileio_close(&fileio);
+ fileio_close(fileio);
if (retval != ERROR_OK)
LOG_ERROR("Error while writing the tdesc file");