]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/jdb/jdb_thread.cpp
update
[l4.git] / kernel / fiasco / src / jdb / jdb_thread.cpp
index c80ac296930553b03adf154147ac6aff7c16ef21..c8b7af5a23091b4cdec0c7cda72f5dd0352c8cf6 100644 (file)
@@ -1,6 +1,6 @@
 INTERFACE:
 
-#include "thread.h"
+#include "thread_object.h"
 
 class Jdb_thread
 {
@@ -10,6 +10,7 @@ IMPLEMENTATION:
 
 #include "irq.h"
 #include "jdb_kobject.h"
+#include "kobject.h"
 #include "thread_state.h"
 #include "vlog.h"
 
@@ -20,7 +21,7 @@ void
 Jdb_thread::print_snd_partner(Thread *t, int task_format = 0)
 {
   if (t->state() & Thread_send_in_progress)
-    Jdb_kobject::print_uid(t->lookup(static_cast<Thread*>(t->receiver())), task_format);
+    Jdb_kobject::print_uid(t->lookup(static_cast<Thread*>(t->receiver()))->kobject(), task_format);
   else
     // receiver() not valid
     putstr("       ");
@@ -30,7 +31,6 @@ PUBLIC static
 void
 Jdb_thread::print_partner(Thread *t, int task_format = 0)
 {
-  Thread *p;
   Kobject *o;
 
   if (!(t->state() & (Thread_receiving | Thread_busy)))
@@ -45,16 +45,18 @@ Jdb_thread::print_partner(Thread *t, int task_format = 0)
       return;
     }
 
-  // the Thread* cast is not good because we actually need to have a dynamic
-  // cast but we don't have this here in this environment. Luckily the cast
-  // works...
-  if (Kobject::is_kobj(p = static_cast<Thread*>(t->partner())))
+  if (Kobject::is_kobj(o = Kobject::pointer_to_obj(t->partner())))
     {
-      char flag = ' ';
-      printf("%*.lx%c", task_format, p->dbg_id(), flag);
+      char flag = '?';
+      const char *n = o->kobj_type();
+
+      if (n == Thread_object::static_kobj_type)
+        flag = ' ';
+      else if (n == Irq::static_kobj_type)
+        flag = '*';
+
+      printf("%*.lx%c", task_format, o->dbg_info()->dbg_id(), flag);
     }
-  else if ((o = Kobject::pointer_to_obj(t->partner())))
-    printf("%*.lx*", task_format, o->dbg_id());
   else
     printf("\033[31;1m%p\033[m ", t->partner());
 }