3 #include "thread_object.h"
4 #include "thread_state.h"
10 assert_kdb (!(current()->state() & Thread_drq_ready));
12 Thread *curr = current_thread();
13 Syscall_frame *f = curr->regs();
15 Obj_cap obj = f->ref();
16 Utcb *utcb = curr->utcb().access(true);
18 Kobject_iface *o = obj.deref(&rights);
20 if (EXPECT_TRUE(o!=0))
21 o->invoke(obj, rights, f, utcb);
23 f->tag(curr->commit_error(utcb, L4_error::Not_existent));
27 //---------------------------------------------------------------------------
28 IMPLEMENTATION [debug]:
33 extern "C" void sys_invoke_debug(Kobject_iface *o, Syscall_frame *f) __attribute__((weak));
35 extern "C" void sys_invoke_debug_wrapper()
37 Thread *curr = current_thread();
38 Syscall_frame *f = curr->regs();
39 //printf("sys_invoke_debugger(f=%p, obj=%lx)\n", f, f->ref().raw());
40 Kobject_iface *o = curr->space()->obj_space()->lookup_local(f->ref().cap());
41 if (o && &::sys_invoke_debug)
42 ::sys_invoke_debug(o, f);
44 f->tag(curr->commit_error(curr->utcb().access(true), L4_error::Not_existent));
47 //---------------------------------------------------------------------------
48 IMPLEMENTATION [!debug]:
52 extern "C" void sys_invoke_debug_wrapper() {}
54 //---------------------------------------------------------------------------
55 INTERFACE [ia32 || ux || amd64]:
57 extern void (*syscall_table[])();
60 //---------------------------------------------------------------------------
61 IMPLEMENTATION [ia32 || ux || amd64]:
63 void (*syscall_table[])() =
67 sys_invoke_debug_wrapper,