subsys/debug/gdbstub: parse input numbers as unsigned

Fixes int too large failures when addressing upper half of address space

Signed-off-by: Noah Klayman <noah.klayman@intel.com>
This commit is contained in:
Noah Klayman 2022-06-21 22:57:06 +00:00 committed by Carles Cufí
parent 389992bc8d
commit 0b16e4dfff

View File

@ -613,9 +613,9 @@ int z_gdb_main_loop(struct gdb_ctx *ctx)
ptr++; \
}
#define CHECK_INT(arg) \
#define CHECK_UINT(arg) \
{ \
arg = strtol((const char *)ptr, (char **)&ptr, 16); \
arg = strtoul((const char *)ptr, (char **)&ptr, 16); \
CHECK_ERROR(ptr == NULL); \
}
@ -651,9 +651,9 @@ int z_gdb_main_loop(struct gdb_ctx *ctx)
* Format: m addr,length
*/
case 'm':
CHECK_INT(addr);
CHECK_UINT(addr);
CHECK_SYMBOL(',');
CHECK_INT(data_len);
CHECK_UINT(data_len);
/* Read Memory */
@ -678,9 +678,9 @@ int z_gdb_main_loop(struct gdb_ctx *ctx)
* Format: M addr,length:val
*/
case 'M':
CHECK_INT(addr);
CHECK_UINT(addr);
CHECK_SYMBOL(',');
CHECK_INT(data_len);
CHECK_UINT(data_len);
CHECK_SYMBOL(':');
if (addr == 0L) {
@ -737,7 +737,7 @@ int z_gdb_main_loop(struct gdb_ctx *ctx)
* Format: p n
*/
case 'p':
CHECK_INT(addr);
CHECK_UINT(addr);
/* Read Register */
pkt_len = arch_gdb_reg_readone(ctx, buf, sizeof(buf), addr);
@ -750,7 +750,7 @@ int z_gdb_main_loop(struct gdb_ctx *ctx)
* Format: P register=value
*/
case 'P':
CHECK_INT(addr);
CHECK_UINT(addr);
CHECK_SYMBOL('=');
pkt_len = arch_gdb_reg_writeone(ctx, ptr, strlen(ptr), addr);
@ -764,11 +764,11 @@ int z_gdb_main_loop(struct gdb_ctx *ctx)
case 'z':
__fallthrough;
case 'Z':
CHECK_INT(type);
CHECK_UINT(type);
CHECK_SYMBOL(',');
CHECK_INT(addr);
CHECK_UINT(addr);
CHECK_SYMBOL(',');
CHECK_INT(data_len);
CHECK_UINT(data_len);
if (buf[0] == 'Z') {
ret = arch_gdb_add_breakpoint(ctx, type,
@ -815,7 +815,7 @@ int z_gdb_main_loop(struct gdb_ctx *ctx)
}
#undef CHECK_ERROR
#undef CHECK_INT
#undef CHECK_UINT
#undef CHECK_SYMBOL
return 0;