Skip to content

Instantly share code, notes, and snippets.

@4ge32
Created February 26, 2020 03:07
Show Gist options
  • Save 4ge32/036d17382e5f6464be88b7989fb445f7 to your computer and use it in GitHub Desktop.
Save 4ge32/036d17382e5f6464be88b7989fb445f7 to your computer and use it in GitHub Desktop.

シグナル

Call tree

  • pthread_kill(3)などはtgkill(2)を用いて実装されている

シグナル生成&配送

SYSCALL_DEFINE(tgkill)
- do_tkill
- do_send_specific
- do_send_sig_info
  - send_signal         // send signal
  - __send_signal       // send signal implementation
     - legacy_queue     // See whether the target signal is pending or not.
                        // if it has already been pending, return 0 immediately.
     - __sigqueue_alloc // allocate a new signal record
     - complete_signal  // delivering sinal...
       - signal_wake_up

シグナル処理

ret_to_user         // return to user
- do_notify_resume  // singals are pendign?
  - do_signal       // handle signal
    - handle_signal

シグナル生成&配送

do_send_specific

do_send_specific converts -ESRCH to 0. POSIX仕様的にも、ESRCHは使わなくなったよう

legacy_queue

指定したシグナルがリアルタイムシグナルでないか、また既にpending状態であるかを特定する。リアルタイムシグナルまたは、既に指定のシグナルがpending状態であるならば即座に0を返す。

__sigqueue_alloc

新しいシグナルキューの領域を取得する。実体はスラブアロケータ。シグナルの制限もみている。

complete_signal

signal_wake_up_state

TIF_SIGPENDINGをセットする。シグナル受け取り側はTIF_SIGPENDINGがセットされているかどうかでシグナルハンドリングを行うかを決定している。 この後、配送先のwake upを行う

シグナル処理

Signals are handled when return to user from interrupts.

ret_to_user
- do_notify_resume
  - do_signal
    - handle_signal

ret_to_user

el0_svcの最後に呼ばれる。

do_notify_resume

TIF_SIGPENDINGが立っていればdo_signalを呼ぶ

do_signal

シグナル処理

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment