gdb_server: custom target-specific GDB queries

Provide a customizable hook for handling target-specific GDB queries

Valgrind-clean, no new Clang analyzer warnings

Signed-off-by: Ian Thompson <ianst@cadence.com>
Change-Id: I684a259ed29f3651cbce668101cff421e522f79e
Reviewed-on: https://review.openocd.org/c/openocd/+/7082
Tested-by: jenkins
Reviewed-by: Antonio Borneo <borneo.antonio@gmail.com>
This commit is contained in:
Ian Thompson 2022-07-10 17:14:10 -07:00 committed by Antonio Borneo
parent d9b2607ca0
commit 48db36f436
2 changed files with 14 additions and 0 deletions

View File

@ -2965,6 +2965,11 @@ static int gdb_query_packet(struct connection *connection,
gdb_connection->noack_mode = 1;
gdb_put_packet(connection, "OK", 2);
return ERROR_OK;
} else if (target->type->gdb_query_custom) {
char *buffer = NULL;
int ret = target->type->gdb_query_custom(target, packet, &buffer);
gdb_put_packet(connection, buffer, strlen(buffer));
return ret;
}
gdb_put_packet(connection, "", 0);

View File

@ -286,6 +286,15 @@ struct target_type {
*/
int (*gdb_fileio_end)(struct target *target, int retcode, int fileio_errno, bool ctrl_c);
/* Parse target-specific GDB query commands.
* The string pointer "response_p" is always assigned by the called function
* to a pointer to a NULL-terminated string, even when the function returns
* an error. The string memory is not freed by the caller, so this function
* must pay attention for possible memory leaks if the string memory is
* dynamically allocated.
*/
int (*gdb_query_custom)(struct target *target, const char *packet, char **response_p);
/* do target profiling
*/
int (*profiling)(struct target *target, uint32_t *samples,