gdb: don't access target fields directly.
This commit is contained in:
parent
c2cde32716
commit
21d464293c
|
@ -77,9 +77,10 @@ gdb_main(void)
|
||||||
/* Implementation of these is mandatory! */
|
/* Implementation of these is mandatory! */
|
||||||
case 'g': { /* 'g': Read general registers */
|
case 'g': { /* 'g': Read general registers */
|
||||||
ERROR_IF_NO_TARGET();
|
ERROR_IF_NO_TARGET();
|
||||||
uint8_t arm_regs[cur_target->regs_size];
|
uint8_t arm_regs[target_regs_size(cur_target)];
|
||||||
target_regs_read(cur_target, arm_regs);
|
target_regs_read(cur_target, arm_regs);
|
||||||
gdb_putpacket(hexify(pbuf, (void*)arm_regs, cur_target->regs_size), cur_target->regs_size * 2);
|
gdb_putpacket(hexify(pbuf, arm_regs, sizeof(arm_regs)),
|
||||||
|
sizeof(arm_regs) * 2);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case 'm': { /* 'm addr,len': Read len bytes from addr */
|
case 'm': { /* 'm addr,len': Read len bytes from addr */
|
||||||
|
@ -97,8 +98,8 @@ gdb_main(void)
|
||||||
}
|
}
|
||||||
case 'G': { /* 'G XX': Write general registers */
|
case 'G': { /* 'G XX': Write general registers */
|
||||||
ERROR_IF_NO_TARGET();
|
ERROR_IF_NO_TARGET();
|
||||||
uint8_t arm_regs[cur_target->regs_size];
|
uint8_t arm_regs[target_regs_size(cur_target)];
|
||||||
unhexify(arm_regs, &pbuf[1], cur_target->regs_size);
|
unhexify(arm_regs, &pbuf[1], sizeof(arm_regs));
|
||||||
target_regs_write(cur_target, arm_regs);
|
target_regs_write(cur_target, arm_regs);
|
||||||
gdb_putpacketz("OK");
|
gdb_putpacketz("OK");
|
||||||
break;
|
break;
|
||||||
|
@ -327,11 +328,11 @@ handle_q_packet(char *packet, int len)
|
||||||
cur_target = target_attach(last_target,
|
cur_target = target_attach(last_target,
|
||||||
gdb_target_destroy_callback);
|
gdb_target_destroy_callback);
|
||||||
}
|
}
|
||||||
if((!cur_target) || (!cur_target->xml_mem_map)) {
|
if (!cur_target) {
|
||||||
gdb_putpacketz("E01");
|
gdb_putpacketz("E01");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
handle_q_string_reply(cur_target->xml_mem_map, packet + 23);
|
handle_q_string_reply(target_mem_map(cur_target), packet + 23);
|
||||||
|
|
||||||
} else if (strncmp (packet, "qXfer:features:read:target.xml:", 31) == 0) {
|
} else if (strncmp (packet, "qXfer:features:read:target.xml:", 31) == 0) {
|
||||||
/* Read target description */
|
/* Read target description */
|
||||||
|
@ -340,11 +341,11 @@ handle_q_packet(char *packet, int len)
|
||||||
cur_target = target_attach(last_target,
|
cur_target = target_attach(last_target,
|
||||||
gdb_target_destroy_callback);
|
gdb_target_destroy_callback);
|
||||||
}
|
}
|
||||||
if((!cur_target) || (!cur_target->tdesc)) {
|
if (!cur_target) {
|
||||||
gdb_putpacketz("E01");
|
gdb_putpacketz("E01");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
handle_q_string_reply(cur_target->tdesc, packet + 31);
|
handle_q_string_reply(target_tdesc(cur_target), packet + 31);
|
||||||
} else if (sscanf(packet, "qCRC:%" PRIx32 ",%" PRIx32, &addr, &alen) == 2) {
|
} else if (sscanf(packet, "qCRC:%" PRIx32 ",%" PRIx32, &addr, &alen) == 2) {
|
||||||
if(!cur_target) {
|
if(!cur_target) {
|
||||||
gdb_putpacketz("E01");
|
gdb_putpacketz("E01");
|
||||||
|
@ -450,10 +451,6 @@ handle_z_packet(char *packet, int plen)
|
||||||
sscanf(packet + 2, ",%" PRIx32 ",%d", &addr, &len);
|
sscanf(packet + 2, ",%" PRIx32 ",%d", &addr, &len);
|
||||||
switch(type) {
|
switch(type) {
|
||||||
case 1: /* Hardware breakpoint */
|
case 1: /* Hardware breakpoint */
|
||||||
if(!cur_target->set_hw_bp) { /* Not supported */
|
|
||||||
gdb_putpacketz("");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(set)
|
if(set)
|
||||||
ret = target_set_hw_bp(cur_target, addr);
|
ret = target_set_hw_bp(cur_target, addr);
|
||||||
else
|
else
|
||||||
|
@ -463,10 +460,6 @@ handle_z_packet(char *packet, int plen)
|
||||||
case 2:
|
case 2:
|
||||||
case 3:
|
case 3:
|
||||||
case 4:
|
case 4:
|
||||||
if(!cur_target->set_hw_wp) { /* Not supported */
|
|
||||||
gdb_putpacketz("");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if(set)
|
if(set)
|
||||||
ret = target_set_hw_wp(cur_target, type, addr, len);
|
ret = target_set_hw_wp(cur_target, type, addr, len);
|
||||||
else
|
else
|
||||||
|
|
|
@ -108,6 +108,16 @@ target *target_attach(target *t, target_destroy_callback destroy_cb);
|
||||||
#define target_hostio_reply(target, recode, errcode) \
|
#define target_hostio_reply(target, recode, errcode) \
|
||||||
(target)->hostio_reply((target), (retcode), (errcode))
|
(target)->hostio_reply((target), (retcode), (errcode))
|
||||||
|
|
||||||
|
/* Accessor functions */
|
||||||
|
#define target_regs_size(target) \
|
||||||
|
((target)->regs_size)
|
||||||
|
|
||||||
|
#define target_mem_map(target) \
|
||||||
|
((target)->xml_mem_map ? (target)->xml_mem_map : "")
|
||||||
|
|
||||||
|
#define target_tdesc(target) \
|
||||||
|
((target)->tdesc ? (target)->tdesc : "")
|
||||||
|
|
||||||
struct target_s {
|
struct target_s {
|
||||||
/* Notify controlling debugger if target is lost */
|
/* Notify controlling debugger if target is lost */
|
||||||
target_destroy_callback destroy_callback;
|
target_destroy_callback destroy_callback;
|
||||||
|
|
Loading…
Reference in New Issue