Star wildcard ranges (e.g., "info thread 2.*")
Add support for specifying "all threads of inferior N", by writing "*" as thread number/range in thread ID lists. E.g., "info threads 2.*" or "thread apply 2.* bt". gdb/ChangeLog: 2016-01-15 Pedro Alves <palves@redhat.com> * NEWS: Mention star wildcard ranges. * cli/cli-utils.c (get_number_or_range): Check state->in_range first. (number_range_setup_range): New function. * cli/cli-utils.h (number_range_setup_range): New declaration. * thread.c (thread_apply_command): Support star TID ranges. * tid-parse.c (tid_range_parser_finished) (tid_range_parser_string, tid_range_parser_skip) (get_tid_or_range, get_tid_or_range): Handle TID_RANGE_STATE_STAR_RANGE. (tid_range_parser_star_range): New function. * tid-parse.h (enum tid_range_state) <TID_RANGE_STATE_STAR_RANGE>: New value. (tid_range_parser_star_range): New declaration. gdb/doc/ChangeLog: 2016-01-15 Pedro Alves <palves@redhat.com> * gdb.texinfo (Threads) <thread ID lists>: Document star ranges. gdb/testsuite/ChangeLog: 2016-01-15 Pedro Alves <palves@redhat.com> * gdb.multi/tids.exp: Test star wildcard ranges.
This commit is contained in:
parent
3f5b759880
commit
71ef29a86b
11 changed files with 185 additions and 30 deletions
|
@ -134,7 +134,21 @@ init_number_or_range (struct get_number_or_range_state *state,
|
|||
int
|
||||
get_number_or_range (struct get_number_or_range_state *state)
|
||||
{
|
||||
if (*state->string != '-')
|
||||
if (state->in_range)
|
||||
{
|
||||
/* All number-parsing has already been done. Return the next
|
||||
integer value (one greater than the saved previous value).
|
||||
Do not advance the token pointer until the end of range is
|
||||
reached. */
|
||||
|
||||
if (++state->last_retval == state->end_value)
|
||||
{
|
||||
/* End of range reached; advance token pointer. */
|
||||
state->string = state->end_ptr;
|
||||
state->in_range = 0;
|
||||
}
|
||||
}
|
||||
else if (*state->string != '-')
|
||||
{
|
||||
/* Default case: state->string is pointing either to a solo
|
||||
number, or to the first number of a range. */
|
||||
|
@ -165,27 +179,26 @@ get_number_or_range (struct get_number_or_range_state *state)
|
|||
state->in_range = 1;
|
||||
}
|
||||
}
|
||||
else if (! state->in_range)
|
||||
error (_("negative value"));
|
||||
else
|
||||
{
|
||||
/* state->string points to the '-' that betokens a range. All
|
||||
number-parsing has already been done. Return the next
|
||||
integer value (one greater than the saved previous value).
|
||||
Do not advance the token pointer until the end of range
|
||||
is reached. */
|
||||
|
||||
if (++state->last_retval == state->end_value)
|
||||
{
|
||||
/* End of range reached; advance token pointer. */
|
||||
state->string = state->end_ptr;
|
||||
state->in_range = 0;
|
||||
}
|
||||
}
|
||||
error (_("negative value"));
|
||||
state->finished = *state->string == '\0';
|
||||
return state->last_retval;
|
||||
}
|
||||
|
||||
/* See documentation in cli-utils.h. */
|
||||
|
||||
void
|
||||
number_range_setup_range (struct get_number_or_range_state *state,
|
||||
int start_value, int end_value, const char *end_ptr)
|
||||
{
|
||||
gdb_assert (start_value > 0);
|
||||
|
||||
state->in_range = 1;
|
||||
state->end_ptr = end_ptr;
|
||||
state->last_retval = start_value - 1;
|
||||
state->end_value = end_value;
|
||||
}
|
||||
|
||||
/* Accept a number and a string-form list of numbers such as is
|
||||
accepted by get_number_or_range. Return TRUE if the number is
|
||||
in the list.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue