システムコール呼び出し側

システムコール呼び出し側

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
__code cbc_swi_handler(struct trapframe* r) {
    if (proc->killed) {
        goto exit();
    }
    proc->tf = r;
    goto syscall->perform();
}

__code cbc_swi_handler_stub(struct trapframe* r) {
    struct Context* proc_context = &proc->cbc_context;
    struct Context* kernel       = &kernel_context->context;
    struct Syscall* syscall      = Gearef(kernel, Syscall)->syscall;
    goto cbc_swi_handler(proc_context, r, syscall);
}

こんな感じ?

  • stubなのでstruct Context*だけ引数にしたい気がする
    • trapframeを受け取るのは仕様上しょうがないので、stubにする意味があるのかどうか
    • とはいえ構造体を受けて__codeにわたすのはstubそのものなので悩ましい

現状のstub

  • generate_contextがexternをまとめて生成している
  • 引数はContext*決め打ち
Licensed under CC BY-NC-SA 4.0
comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy