Prefer object over notype symbols when disassembling
[deliverable/binutils-gdb.git] / gdb / tid-parse.c
index 73bf6736dc2beaa6d0565a4652ba0e92eeaeb45a..6ad8b1f4aff47175b348f374fa74d40b75819851 100644 (file)
@@ -1,6 +1,6 @@
 /* TID parsing for GDB, the GNU debugger.
 
-   Copyright (C) 2015-2016 Free Software Foundation, Inc.
+   Copyright (C) 2015-2019 Free Software Foundation, Inc.
 
    This file is part of GDB.
 
@@ -55,7 +55,6 @@ parse_thread_id (const char *tidstr, const char **end)
 {
   const char *number = tidstr;
   const char *dot, *p1;
-  struct thread_info *tp;
   struct inferior *inf;
   int thr_num;
   int explicit_inf_id = 0;
@@ -90,12 +89,13 @@ parse_thread_id (const char *tidstr, const char **end)
   if (thr_num == 0)
     invalid_thread_id_error (number);
 
-  ALL_THREADS (tp)
-    {
-      if (ptid_get_pid (tp->ptid) == inf->pid
-         && tp->per_inf_num == thr_num)
+  thread_info *tp = nullptr;
+  for (thread_info *it : inf->threads ())
+    if (it->per_inf_num == thr_num)
+      {
+       tp = it;
        break;
-    }
+      }
 
   if (tp == NULL)
     {
@@ -139,7 +139,13 @@ tid_range_parser::finished () const
   switch (m_state)
     {
     case STATE_INFERIOR:
-      return *m_cur_tok == '\0';
+      /* Parsing is finished when at end of string or null string,
+        or we are not in a range and not in front of an integer, negative
+        integer, convenience var or negative convenience var.  */
+      return (*m_cur_tok == '\0'
+             || !(isdigit (*m_cur_tok)
+                  || *m_cur_tok == '$'
+                  || *m_cur_tok == '*'));
     case STATE_THREAD_RANGE:
     case STATE_STAR_RANGE:
       return m_range_parser.finished ();
@@ -229,7 +235,7 @@ tid_range_parser::get_tid_or_range (int *inf_num,
        {
          /* Setup the number range parser to return numbers in the
             whole [1,INT_MAX] range.  */
-         m_range_parser.setup_range (1, INT_MAX, skip_spaces_const (p + 1));
+         m_range_parser.setup_range (1, INT_MAX, skip_spaces (p + 1));
          m_state = STATE_STAR_RANGE;
        }
       else
@@ -301,7 +307,13 @@ tid_range_parser::in_star_range () const
   return m_state == STATE_STAR_RANGE;
 }
 
-/* See gdbthread.h.  */
+bool
+tid_range_parser::in_thread_range () const
+{
+  return m_state == STATE_THREAD_RANGE;
+}
+
+/* See tid-parse.h.  */
 
 int
 tid_is_in_list (const char *list, int default_inferior,
@@ -311,6 +323,8 @@ tid_is_in_list (const char *list, int default_inferior,
     return 1;
 
   tid_range_parser parser (list, default_inferior);
+  if (parser.finished ())
+    invalid_thread_id_error (parser.cur_tok ());
   while (!parser.finished ())
     {
       int tmp_inf, tmp_thr_start, tmp_thr_end;
This page took 0.028872 seconds and 4 git commands to generate.