gdb_main: Formatting cleanup
This commit is contained in:
parent
804a1a4f43
commit
e424859ecb
@ -54,8 +54,6 @@ typedef struct
|
||||
void (*func)(const char *packet, int len);
|
||||
} cmd_executer;
|
||||
|
||||
|
||||
|
||||
static char pbuf[BUF_SIZE + 1];
|
||||
|
||||
static target *cur_target;
|
||||
@ -226,11 +224,10 @@ int gdb_main_loop(struct target_controller *tc, bool in_syscall)
|
||||
sscanf(pbuf, "p%" SCNx32, ®);
|
||||
uint8_t val[8];
|
||||
size_t s = target_reg_read(cur_target, reg, val, sizeof(val));
|
||||
if (s > 0) {
|
||||
if (s > 0)
|
||||
gdb_putpacket(hexify(pbuf, val, s), s * 2);
|
||||
} else {
|
||||
else
|
||||
gdb_putpacketz("EFF");
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'P': { /* Write single register */
|
||||
@ -238,20 +235,20 @@ int gdb_main_loop(struct target_controller *tc, bool in_syscall)
|
||||
uint32_t reg;
|
||||
int n;
|
||||
sscanf(pbuf, "P%" SCNx32 "=%n", ®, &n);
|
||||
// TODO: FIXME, VLAs considered harmful.
|
||||
uint8_t val[strlen(&pbuf[n]) / 2];
|
||||
unhexify(val, pbuf + n, sizeof(val));
|
||||
if (target_reg_write(cur_target, reg, val, sizeof(val)) > 0) {
|
||||
if (target_reg_write(cur_target, reg, val, sizeof(val)) > 0)
|
||||
gdb_putpacketz("OK");
|
||||
} else {
|
||||
else
|
||||
gdb_putpacketz("EFF");
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'F': /* Semihosting call finished */
|
||||
if (in_syscall) {
|
||||
if (in_syscall)
|
||||
return hostio_reply(tc, pbuf, size);
|
||||
} else {
|
||||
else {
|
||||
DEBUG_GDB("*** F packet when not in syscall! '%s'\n", pbuf);
|
||||
gdb_putpacketz("");
|
||||
}
|
||||
@ -337,15 +334,16 @@ int gdb_main_loop(struct target_controller *tc, bool in_syscall)
|
||||
}
|
||||
}
|
||||
}
|
||||
bool exec_command(char *packet, int len, const cmd_executer *exec)
|
||||
|
||||
static bool exec_command(char *packet, int len, const cmd_executer *exec)
|
||||
{
|
||||
while (exec->cmd_prefix) {
|
||||
int l=strlen(exec->cmd_prefix);
|
||||
const int l = strlen(exec->cmd_prefix);
|
||||
if (!strncmp(packet, exec->cmd_prefix, l)) {
|
||||
exec->func(packet + l, len - l);
|
||||
return true;
|
||||
}
|
||||
exec++;
|
||||
++exec;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -376,23 +374,26 @@ static void
|
||||
handle_q_string_reply(const char *str, const char *param)
|
||||
{
|
||||
unsigned long addr, len;
|
||||
const size_t str_len = strlen(str);
|
||||
|
||||
if (sscanf(param, "%08lx,%08lx", &addr, &len) != 2) {
|
||||
gdb_putpacketz("E01");
|
||||
return;
|
||||
}
|
||||
if (addr > strlen (str)) {
|
||||
else if (addr > str_len) {
|
||||
gdb_putpacketz("E01");
|
||||
return;
|
||||
}
|
||||
if(addr== strlen (str)) {
|
||||
else if (addr == str_len) {
|
||||
gdb_putpacketz("l");
|
||||
return;
|
||||
}
|
||||
unsigned long output_len=strlen(str)-addr;
|
||||
if(output_len>len) output_len=len;
|
||||
unsigned long output_len = str_len - addr;
|
||||
if (output_len > len)
|
||||
output_len = len;
|
||||
gdb_putpacket2("m", 1, str + addr, output_len);
|
||||
}
|
||||
|
||||
static void exec_q_supported(const char *packet, int len)
|
||||
{
|
||||
(void)packet;
|
||||
@ -451,6 +452,7 @@ static void exec_q_crc(const char *packet, int len)
|
||||
gdb_putpacket_f("C%lx", crc);
|
||||
}
|
||||
}
|
||||
|
||||
static const cmd_executer q_commands[]=
|
||||
{
|
||||
{"qRcmd,", exec_q_rcmd},
|
||||
@ -458,16 +460,14 @@ static const cmd_executer q_commands[]=
|
||||
{"qXfer:memory-map:read::", exec_q_memory_map},
|
||||
{"qXfer:features:read:target.xml:",exec_q_feature_read},
|
||||
{"qCRC:", exec_q_crc},
|
||||
|
||||
{NULL, NULL},
|
||||
};
|
||||
|
||||
static void
|
||||
handle_q_packet(char *packet, int len)
|
||||
{
|
||||
if(exec_command(packet,len,q_commands)) {
|
||||
if (exec_command(packet, len, q_commands))
|
||||
return;
|
||||
}
|
||||
DEBUG_GDB("*** Unsupported packet: %s\n", packet);
|
||||
gdb_putpacket("", 0);
|
||||
}
|
||||
@ -493,25 +493,27 @@ handle_v_packet(char *packet, int plen)
|
||||
char cmdline[83];
|
||||
char *pcmdline = cmdline;
|
||||
char *tok = packet + 4;
|
||||
if (*tok == ';') tok++;
|
||||
*cmdline='\0';
|
||||
if (*tok == ';')
|
||||
++tok;
|
||||
cmdline[0] = '\0';
|
||||
while(*tok != '\0') {
|
||||
if(strlen(cmdline)+3 >= sizeof(cmdline)) break;
|
||||
if (strlen(cmdline) + 3 >= sizeof(cmdline))
|
||||
break;
|
||||
if (*tok == ';') {
|
||||
*pcmdline++ = ' ';
|
||||
*pcmdline='\0';
|
||||
pcmdline[0] = '\0';
|
||||
tok++;
|
||||
continue;
|
||||
}
|
||||
if (isxdigit(*tok) && isxdigit(*(tok+1))) {
|
||||
if (isxdigit(tok[0]) && isxdigit(tok[1])) {
|
||||
unhexify(pcmdline, tok, 2);
|
||||
if ((*pcmdline == ' ') || (*pcmdline == '\\')) {
|
||||
*(pcmdline+1)=*pcmdline;
|
||||
pcmdline[1] = *pcmdline;
|
||||
*pcmdline++ = '\\';
|
||||
}
|
||||
pcmdline++;
|
||||
tok += 2;
|
||||
*pcmdline='\0';
|
||||
pcmdline[0] = '\0';
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
@ -531,14 +533,19 @@ handle_v_packet(char *packet, int plen)
|
||||
target_reset(cur_target);
|
||||
morse(NULL, false);
|
||||
gdb_putpacketz("T05");
|
||||
} else gdb_putpacketz("E01");
|
||||
} else
|
||||
gdb_putpacketz("E01");
|
||||
|
||||
} else gdb_putpacketz("E01");
|
||||
} else
|
||||
gdb_putpacketz("E01");
|
||||
|
||||
} else if (sscanf(packet, "vFlashErase:%08lx,%08lx", &addr, &len) == 2) {
|
||||
/* Erase Flash Memory */
|
||||
DEBUG_GDB("Flash Erase %08lX %08lX\n", addr, len);
|
||||
if(!cur_target) { gdb_putpacketz("EFF"); return; }
|
||||
if (!cur_target) {
|
||||
gdb_putpacketz("EFF");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!flash_mode) {
|
||||
/* Reset target if first flash command! */
|
||||
@ -546,9 +553,9 @@ handle_v_packet(char *packet, int plen)
|
||||
target_reset(cur_target);
|
||||
flash_mode = 1;
|
||||
}
|
||||
if(target_flash_erase(cur_target, addr, len) == 0) {
|
||||
if (target_flash_erase(cur_target, addr, len) == 0)
|
||||
gdb_putpacketz("OK");
|
||||
} else {
|
||||
else {
|
||||
flash_mode = 0;
|
||||
gdb_putpacketz("EFF");
|
||||
}
|
||||
@ -557,9 +564,9 @@ handle_v_packet(char *packet, int plen)
|
||||
/* Write Flash Memory */
|
||||
len = plen - bin;
|
||||
DEBUG_GDB("Flash Write %08lX %08lX\n", addr, len);
|
||||
if(cur_target && target_flash_write(cur_target, addr, (void*)packet + bin, len) == 0) {
|
||||
if (cur_target && target_flash_write(cur_target, addr, (void*)packet + bin, len) == 0)
|
||||
gdb_putpacketz("OK");
|
||||
} else {
|
||||
else {
|
||||
flash_mode = 0;
|
||||
gdb_putpacketz("EFF");
|
||||
}
|
||||
@ -591,14 +598,13 @@ handle_z_packet(char *packet, int plen)
|
||||
else
|
||||
ret = target_breakwatch_clear(cur_target, type, addr, len);
|
||||
|
||||
if (ret < 0) {
|
||||
if (ret < 0)
|
||||
gdb_putpacketz("E01");
|
||||
} else if (ret > 0) {
|
||||
else if (ret > 0)
|
||||
gdb_putpacketz("");
|
||||
} else {
|
||||
else
|
||||
gdb_putpacketz("OK");
|
||||
}
|
||||
}
|
||||
|
||||
void gdb_main(void)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user