]> rtime.felk.cvut.cz Git - l4.git/blob - kernel/fiasco/src/jdb/jdb_halt_thread.cpp
update
[l4.git] / kernel / fiasco / src / jdb / jdb_halt_thread.cpp
1 IMPLEMENTATION:
2
3 #include <cstdio>
4 #include "entry_frame.h"
5 #include "gdt.h"
6 #include "jdb_module.h"
7 #include "jdb_kobject.h"
8 #include "static_init.h"
9 #include "thread_object.h"
10
11 class Jdb_halt_thread : public Jdb_module
12 {
13 public:
14   Jdb_halt_thread() FIASCO_INIT;
15 private:
16   static Kobject *threadid;
17 };
18
19 Kobject *Jdb_halt_thread::threadid;
20
21 PUBLIC
22 Jdb_module::Action_code
23 Jdb_halt_thread::action(int cmd, void *&, char const *&, int &)
24 {
25   if (cmd != 0)
26     return NOTHING;
27
28   Thread *t = Kobject::dcast<Thread_object*>(threadid);
29
30   if (!t)
31     return NOTHING;
32
33   t->regs()->cs(Gdt::gdt_code_kernel | Gdt::Selector_kernel);
34   t->regs()->ip(reinterpret_cast<Address>(&Thread::halt_current));
35   t->regs()->flags(0);  // disable interrupts
36   putchar('\n');
37
38   return NOTHING;
39 }
40
41 PUBLIC
42 Jdb_module::Cmd const *
43 Jdb_halt_thread::cmds() const
44 {
45   static Cmd cs[] =
46     {
47         { 0, "H", "halt", "%q", "H<threadid>\thalt a specific thread",
48           &threadid },
49     };
50
51   return cs;
52 }
53
54 PUBLIC
55 int
56 Jdb_halt_thread::num_cmds() const
57 {
58   return 1;
59 }
60
61 IMPLEMENT
62 Jdb_halt_thread::Jdb_halt_thread()
63   : Jdb_module("MISC")
64 {}
65
66 static Jdb_halt_thread jdb_halt_thread INIT_PRIORITY(JDB_MODULE_INIT_PRIO);