]> rtime.felk.cvut.cz Git - l4.git/blobdiff - kernel/fiasco/src/jdb/jdb_tcb.cpp
update
[l4.git] / kernel / fiasco / src / jdb / jdb_tcb.cpp
index f55ff55a12da048c10ea63205ef7eda5f38f0c6d..9d4146e21a152365eab12fe0e13cce91a6986137 100644 (file)
@@ -23,13 +23,14 @@ IMPLEMENTATION:
 #include "jdb_thread.h"
 #include "jdb_util.h"
 #include "kernel_console.h"
+#include "kernel_task.h"
 #include "keycodes.h"
 #include "l4_types.h"
 #include "push_console.h"
 #include "simpleio.h"
 #include "static_init.h"
 #include "task.h"
-#include "thread.h"
+#include "thread_object.h"
 #include "thread_state.h"
 #include "types.h"
 
@@ -402,7 +403,7 @@ Jdb_disasm_view::show(Jdb_tcb_ptr const &p, Space *s)
 
 PUBLIC
 Jdb_tcb::Jdb_tcb()
-  : Jdb_module("INFO"), Jdb_kobject_handler(Thread::static_kobj_type)
+  : Jdb_module("INFO"), Jdb_kobject_handler(Thread_object::static_kobj_type)
 {
   static Jdb_handler enter(at_jdb_enter);
 
@@ -427,7 +428,7 @@ PUBLIC virtual
 Kobject *
 Jdb_tcb::parent(Kobject *o)
 {
-  Thread *t = Kobject::dcast<Thread*>(o);
+  Thread *t = Kobject::dcast<Thread_object*>(o);
   if (!t)
     return 0;
 
@@ -441,8 +442,8 @@ Jdb_tcb::vcpu_state_str(Mword state, char *s, int len)
   snprintf(s, len, "%c%c%c%c%c%c",
            (state & Vcpu_state::F_fpu_enabled) ? 'F' : 'f',
            (state & Vcpu_state::F_user_mode)   ? 'U' : 'u',
-           (state & Vcpu_state::F_exceptions)  ? 'E' : 'e',
            (state & Vcpu_state::F_debug_exc)   ? 'D' : 'd',
+           (state & Vcpu_state::F_exceptions)  ? 'E' : 'e',
            (state & Vcpu_state::F_page_faults) ? 'P' : 'p',
            (state & Vcpu_state::F_irqs)        ? 'I' : 'i');
   s[len - 1] = 0;
@@ -508,7 +509,7 @@ whole_screen:
   char time_str[12];
 
   putstr("thread: ");
-  Jdb_kobject::print_uid(t, 3);
+  Jdb_kobject::print_uid(t->kobject(), 3);
   print_thread_uid_raw(t);
   printf("CPU %3u ", t->cpu());
 
@@ -538,7 +539,8 @@ whole_screen:
 
   putstr("\n"
          "lcked by: ");
-  Jdb_kobject::print_uid(Thread::lookup(t->thread_lock()->lock_owner()), 3);
+  if (t->thread_lock()->lock_owner())
+    Jdb_kobject::print_uid(Thread::lookup(t->thread_lock()->lock_owner())->kobject(), 3);
 
   putstr("\t\t\ttimeout  : ");
   if (t->_timeout && t->_timeout->is_set())
@@ -599,11 +601,11 @@ whole_screen:
 
   putstr("\tprsent lnk: ");
   if (t->Present_list_item::next())
-    Jdb_kobject::print_uid(static_cast<Thread*>(t->Present_list_item::next()), 3);
+    Jdb_kobject::print_uid(static_cast<Thread*>(t->Present_list_item::next())->kobject(), 3);
   else
     putstr("--- ");
   if (t->Present_list_item::prev())
-    Jdb_kobject::print_uid(static_cast<Thread*>(t->Present_list_item::prev()), 4);
+    Jdb_kobject::print_uid(static_cast<Thread*>(t->Present_list_item::prev())->kobject(), 4);
   else
     putstr("--- ");
   putchar('\n');
@@ -611,11 +613,13 @@ whole_screen:
   putstr("vCPU  st: ");
   if (t->state() & Thread_vcpu_enabled)
     {
-      char st[7];
-      printf("c=%s s=%s e-ip=%08lx e-sp=%08lx S=",
-            vcpu_state_str(t->vcpu_state()->state, st, sizeof(st)),
-             vcpu_state_str(t->vcpu_state()->_saved_state, st, sizeof(st)),
-            t->vcpu_state()->_entry_ip, t->vcpu_state()->_entry_sp);
+      char st1[7];
+      char st2[7];
+      printf("c=%s s=%s sf=%c e-ip=%08lx e-sp=%08lx S=",
+             vcpu_state_str(t->vcpu_state()->state, st1, sizeof(st1)),
+             vcpu_state_str(t->vcpu_state()->_saved_state, st2, sizeof(st2)),
+             (t->vcpu_state()->sticky_flags & Vcpu_state::Sf_irq_pending) ? 'P' : '-',
+             t->vcpu_state()->_entry_ip, t->vcpu_state()->_entry_sp);
       print_kobject(static_cast<Task*>(t->vcpu_user_space()));
     }
   else
@@ -844,14 +848,14 @@ Jdb_tcb::action(int cmd, void *&args, char const *&fmt, int &next_char)
       else if (args == &address)
        {
          address &= ~(Config::thread_block_size-1);
-         Jdb_kobject::print_uid(reinterpret_cast<Thread*>(address), 3);
+         Jdb_kobject::print_uid(reinterpret_cast<Thread*>(address)->kobject(), 3);
          putchar('\n');
        }
       else if (args == &tcb_addr)
        show((Thread*)tcb_addr, 0);
       else
         {
-          Thread *t = Kobject::dcast<Thread *>(threadid);
+          Thread *t = Kobject::dcast<Thread_object *>(threadid);
           if (t)
             show(t, 0);
           else
@@ -866,7 +870,7 @@ PUBLIC
 Kobject *
 Jdb_tcb::follow_link(Kobject *o)
 {
-  Thread *t = Kobject::dcast<Thread*>(o);
+  Thread *t = Kobject::dcast<Thread_object *>(o);
   if (t->space() == Kernel_task::kernel_task())
     return o;
   return static_cast<Kobject*>(static_cast<Task*>(t->space()));
@@ -876,7 +880,7 @@ PUBLIC
 bool
 Jdb_tcb::show_kobject(Kobject *o, int level)
 {
-  Thread *t = Kobject::dcast<Thread*>(o);
+  Thread *t = Kobject::dcast<Thread_object *>(o);
   return show(t, level);
 }
 
@@ -884,7 +888,7 @@ PUBLIC
 int
 Jdb_tcb::show_kobject_short(char *buf, int max, Kobject *o)
 {
-  Thread *t = Kobject::dcast<Thread*>(o);
+  Thread *t = Kobject::dcast<Thread_object *>(o);
   Thread *cur_t = Jdb::get_current_active();
   int cnt = 0;
   if (t->space() == Kernel_task::kernel_task())
@@ -993,7 +997,7 @@ Jdb_thread_name_ext::ext()
 {
   if (Jdb::get_current_active())
     {
-      Jdb_kobject_name *nx = Jdb_kobject_extension::find_extension<Jdb_kobject_name>(Jdb::get_current_active());
+      Jdb_kobject_name *nx = Jdb_kobject_extension::find_extension<Jdb_kobject_name>(Jdb::get_current_active()->kobject());
       if (nx && nx->name()[0])
         printf("[%*.*s] ", nx->max_len(), nx->max_len(), nx->name());
     }