[gdbserver] Don't assume vCont;r ADDR1,ADDR2 comes with a ptid attached.
This bit: + p1 = strchr (p, ':'); + decode_address (&resume_info[i].step_range_end, p, p1 - p); should not expect the ':' to be there. An action without a ptid is valid: "If an action is specified with no thread-id, then it is applied to any threads that don't have a specific action specified" This is handled further below: if (p[0] == 0) { resume_info[i].thread = minus_one_ptid; default_action = resume_info[i]; /* Note: we don't increment i here, we'll overwrite this entry the next time through. */ } else if (p[0] == ':') A stub that doesn't support and report to gdb thread ids at all (like metal metal targets) only will always only see a single default action with no ptid. Use unpack_varlen_hex instead of decode_address. The former doesn't need to be told where the hex number ends, and it actually returns that info instead, which we can use for validation. Tested on x86_64 Fedora 17. gdb/gdbserver/ 2013-05-24 Pedro Alves <palves@redhat.com> * server.c (handle_v_cont) <vCont;r>: Use unpack_varlen_hex instead of strchr/decode_address. Error if the range isn't split with a ','. Don't assume there's be a ':' in the action.
This commit is contained in:
parent
db1ac43683
commit
6740dc9c3e
2 changed files with 13 additions and 8 deletions
|
@ -1,3 +1,9 @@
|
|||
2013-05-24 Pedro Alves <palves@redhat.com>
|
||||
|
||||
* server.c (handle_v_cont) <vCont;r>: Use unpack_varlen_hex
|
||||
instead of strchr/decode_address. Error if the range isn't split
|
||||
with a ','. Don't assume there's be a ':' in the action.
|
||||
|
||||
2013-05-23 Yao Qi <yao@codesourcery.com>
|
||||
Pedro Alves <palves@redhat.com>
|
||||
|
||||
|
|
|
@ -2069,17 +2069,16 @@ handle_v_cont (char *own_buf)
|
|||
}
|
||||
else if (p[0] == 'r')
|
||||
{
|
||||
char *p1;
|
||||
ULONGEST addr;
|
||||
|
||||
p = p + 1;
|
||||
p1 = strchr (p, ',');
|
||||
decode_address (&resume_info[i].step_range_start, p, p1 - p);
|
||||
p = unpack_varlen_hex (p + 1, &addr);
|
||||
resume_info[i].step_range_start = addr;
|
||||
|
||||
p = p1 + 1;
|
||||
p1 = strchr (p, ':');
|
||||
decode_address (&resume_info[i].step_range_end, p, p1 - p);
|
||||
if (*p != ',')
|
||||
goto err;
|
||||
|
||||
p = p1;
|
||||
p = unpack_varlen_hex (p + 1, &addr);
|
||||
resume_info[i].step_range_end = addr;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue