New state: STATE_DISK_SLEEP
[debugger.git] / debugger.c
index cc39e84..fd6e0f7 100644 (file)
@@ -88,6 +88,7 @@ enum state
     STATE_PTRACED,
     STATE_ZOMBIE,
     STATE_DEAD,
+    STATE_DISK_SLEEP,
     STATE_LAST
   };
 
@@ -95,14 +96,15 @@ static const char *state_to_name (enum state state)
 {
   switch (state)
     {
-      case STATE_INSTABLE: return "STATE_INSTABLE";
-      case STATE_ENOENT:   return "STATE_ENOENT";
-      case STATE_SLEEPING: return "STATE_SLEEPING";
-      case STATE_RUNNING:  return "STATE_RUNNING";
-      case STATE_STOPPED:  return "STATE_STOPPED";
-      case STATE_PTRACED:  return "STATE_PTRACED";
-      case STATE_ZOMBIE:   return "STATE_ZOMBIE";
-      case STATE_DEAD:     return "STATE_DEAD";
+      case STATE_INSTABLE:   return "STATE_INSTABLE";
+      case STATE_ENOENT:     return "STATE_ENOENT";
+      case STATE_SLEEPING:   return "STATE_SLEEPING";
+      case STATE_RUNNING:    return "STATE_RUNNING";
+      case STATE_STOPPED:    return "STATE_STOPPED";
+      case STATE_PTRACED:    return "STATE_PTRACED";
+      case STATE_ZOMBIE:     return "STATE_ZOMBIE";
+      case STATE_DEAD:       return "STATE_DEAD";
+      case STATE_DISK_SLEEP: return "STATE_DISK_SLEEP";
       default: crash ();
     }
   /* NOTREACHED */
@@ -152,6 +154,8 @@ static enum state state_get (pid_t pid)
          /* FIXME: What does it mean?  */
          else if (strcmp (line + length, "X (dead)\n") == 0)
            found = STATE_DEAD;
+         else if (strcmp (line + length, "D (disk sleep)\n") == 0)
+           found = STATE_DISK_SLEEP;
          else
            {
              fprintf (stderr, "Found an unknown state: %s", line + length);
@@ -460,10 +464,10 @@ static int getmodules_callback (Dwfl_Module *module,
   GElf_Sym sym;
 
   sym_count = dwfl_module_getsymtab (module);
-/* "/usr/lib/debug/lib64/ld-2.4.so.debug"?  */
-#if 0
+  if (sym_count == -1)
+    return DWARF_CB_OK;
   assert (sym_count >= 0);
-#endif
+
   for (ndx = 0; ndx < sym_count; ndx++)
     {
       const char *name_got;
@@ -577,7 +581,8 @@ static void attach_multi (struct attach_state_struct *attach_state)
       fprintf (stderr, "err = %d\n", err);
       abort ();
     }
-  assert (attach_state->threads_count > 0);
+  /* Do not: assert (attach_state->threads_count > 0);
+     as during early initialization we really may get 0.  */
 }
 
 struct attach_state_struct *attach (pid_t pid)