#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"
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);
Kobject *
Jdb_tcb::parent(Kobject *o)
{
- Thread *t = Kobject::dcast<Thread*>(o);
+ Thread *t = Kobject::dcast<Thread_object*>(o);
if (!t)
return 0;
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;
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());
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())
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');
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
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
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()));
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);
}
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())
{
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());
}