55 static const char* describe_signal_set_short(const sigset_t* set, char* buffer, size_t size); |
55 static const char* describe_signal_set_short(const sigset_t* set, char* buffer, size_t size); |
56 |
56 |
57 // Prints a short one-line description of a signal set. |
57 // Prints a short one-line description of a signal set. |
58 static void print_signal_set_short(outputStream* st, const sigset_t* set); |
58 static void print_signal_set_short(outputStream* st, const sigset_t* set); |
59 |
59 |
|
60 // unblocks the signal masks for current thread |
|
61 static int unblock_thread_signal_mask(const sigset_t *set); |
|
62 |
60 // Writes a one-line description of a combination of sigaction.sa_flags |
63 // Writes a one-line description of a combination of sigaction.sa_flags |
61 // into a user provided buffer. Returns that buffer. |
64 // into a user provided buffer. Returns that buffer. |
62 static const char* describe_sa_flags(int flags, char* buffer, size_t size); |
65 static const char* describe_sa_flags(int flags, char* buffer, size_t size); |
63 |
66 |
64 // Prints a one-line description of a combination of sigaction.sa_flags. |
67 // Prints a one-line description of a combination of sigaction.sa_flags. |
65 static void print_sa_flags(outputStream* st, int flags); |
68 static void print_sa_flags(outputStream* st, int flags); |
66 |
69 |
67 // A POSIX conform, platform-independend siginfo print routine. |
70 // A POSIX conform, platform-independend siginfo print routine. |
68 static void print_siginfo_brief(outputStream* os, const siginfo_t* si); |
71 static void print_siginfo_brief(outputStream* os, const siginfo_t* si); |
69 |
72 |
|
73 static address ucontext_get_pc(ucontext_t* ctx); |
|
74 // Set PC into context. Needed for continuation after signal. |
|
75 static void ucontext_set_pc(ucontext_t* ctx, address pc); |
70 }; |
76 }; |
71 |
77 |
72 /* |
78 /* |
73 * Crash protection for the watcher thread. Wrap the callback |
79 * Crash protection for the watcher thread. Wrap the callback |
74 * with a sigsetjmp and in case of a SIGSEGV/SIGBUS we siglongjmp |
80 * with a sigsetjmp and in case of a SIGSEGV/SIGBUS we siglongjmp |