3 class Sys_ex_regs_frame;
13 #include "entry_frame.h"
18 #include "processor.h"
19 #include "ram_quota.h"
21 #include "std_macros.h"
24 #include "thread_state.h"
27 class Syscalls : public Thread
31 void sys_invoke_object();
37 extern "C" void sys_invoke_debug(Kobject *o, Syscall_frame *f) __attribute__((weak));
40 PUBLIC inline NOEXPORT ALWAYS_INLINE
42 Syscalls::sys_invoke_debug()
44 if (!&::sys_invoke_debug)
47 Syscall_frame *f = this->regs();
48 //printf("sys_invoke_debugger(f=%p, obj=%lx)\n", f, f->ref().raw());
49 Kobject_iface *o = space()->obj_space()->lookup_local(f->ref().cap());
51 ::sys_invoke_debug(o->kobject(), f);
53 f->tag(commit_error(access_utcb(), L4_error::Not_existent));
57 // these wrappers must come last in the source so that the real sys-call
58 // implementations can be inlined by g++
60 extern "C" void sys_invoke_debug_wrapper()
61 { static_cast<Syscalls*>(current_thread())->sys_invoke_debug(); }
64 //---------------------------------------------------------------------------
65 INTERFACE [ia32 || ux || amd64]:
67 extern void (*syscall_table[])();
70 //---------------------------------------------------------------------------
71 IMPLEMENTATION [ia32 || ux || amd64]:
73 void (*syscall_table[])() =
77 sys_invoke_debug_wrapper,