61 #if !defined(__CYGWIN__)
66 #if defined(__LINUX__)
68 if (threads_pthreads_implementation_nptl) {
75 if (sigemptyset(&mask) != 0)
78 #if !defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
81 if (sigaddset(&mask, SIGINT) != 0)
85 #if !defined(__FREEBSD__)
86 if (sigaddset(&mask, SIGQUIT) != 0)
90 if (sigprocmask(SIG_BLOCK, &mask, NULL) != 0)
93 #if defined(__LINUX__)
98 #if defined(ENABLE_GC_BOEHM)
108 #if defined(ENABLE_JIT)
109 # if defined(ENABLE_INTRP)
115 SA_NODEFER | SA_SIGINFO);
119 SA_NODEFER | SA_SIGINFO);
122 # if SUPPORT_HARDWARE_DIVIDE_BY_ZERO
126 SA_NODEFER | SA_SIGINFO);
129 # if defined(__AARCH64__) || defined(__ALPHA__) || defined(__ARM__) || defined(__I386__) || defined(__MIPS__) || defined(__POWERPC__) || defined(__POWERPC64__) || defined(__S390__) || defined(__X86_64__)
134 SA_NODEFER | SA_SIGINFO);
137 # if defined(__POWERPC__)
142 SA_NODEFER | SA_SIGINFO);
144 # if defined(ENABLE_INTRP)
148 #if defined(__DARWIN__)
154 if (uname(&name) != 0)
160 if (name.release[0] ==
'\0' || name.release[0] >
'8' || name.release[1] !=
'.')
164 kr = task_set_exception_ports(mach_task_self(),
166 #
if defined(__I386__) || defined(__X86_64__)
167 | EXC_MASK_BAD_INSTRUCTION
170 EXCEPTION_STATE_IDENTITY,
171 MACHINE_THREAD_STATE);
173 assert(kr == KERN_SUCCESS);
186 #ifdef ENABLE_PROFILING
206 struct sigaction act;
208 void (*
function)(int, siginfo_t *,
void *);
210 function = (
void (*)(int, siginfo_t *,
void *)) handler;
212 if (sigemptyset(&act.sa_mask) != 0)
215 act.sa_sigaction =
function;
216 act.sa_flags = flags;
218 if (sigaction(signum, &act, NULL) != 0)
240 if (sigemptyset(&mask) != 0)
243 #if !defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
246 if (sigaddset(&mask, SIGINT) != 0)
250 #if !defined(__FREEBSD__)
251 if (sigaddset(&mask, SIGQUIT) != 0)
263 result = sigwait(&mask, &sig);
264 }
while (result == EINTR);
298 #if 0 && defined(ENABLE_STATISTICS)
300 statistics_print_memory_usage();
304 #if defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK)
311 log_println(
"signal_thread_handler: Java signal handler throw an exception while dispatching signal %d:", sig);
313 vm_abort(
"signal_thread_handler: Aborting...");
319 vm_abort(
"signal_thread_handler: Unknown signal %d", sig);
void dump_threads()
Dumps info for all threads running in the VM.
void exceptions_print_stacktrace(void)
static void signal_thread(void)
static void abort_errno(const char *text,...)
Equal to abort_errnum, but uses errno to get the error number.
void md_signal_handler_sigsegv(int sig, siginfo_t *siginfo, void *_p)
NullPointerException signal handler for hardware null pointer check.
void thread_set_state_runnable(threadobject *t)
void signal_register_signal(int signum, functionptr handler, int flags)
void md_signal_handler_sigill(int sig, siginfo_t *siginfo, void *_p)
Illegal Instruction signal handler for hardware exception checks.
bool threads_thread_start_internal(Utf8String name, functionptr f)
typedef void(JNICALL *jvmtiEventSingleStep)(jvmtiEnv *jvmti_env
java_handle_t * vm_call_method(methodinfo *m, java_handle_t *o,...)
JNIEnv jclass jobject const char * name
void md_signal_handler_sigtrap(int sig, siginfo_t *siginfo, void *_p)
Signal handler for hardware-traps.
void log_println(const char *text,...)
#define TRACESUBSYSTEMINITIALIZATION(text)
void md_signal_handler_sigfpe(int sig, siginfo_t *siginfo, void *_p)
static void abort_errnum(int errnum, const char *text,...)
Prints an error message, appends ":" plus the strerror-message of errnum and aborts the VM...
void vm_abort(const char *text,...)
void(* functionptr)(void)
void md_signal_handler_sigusr2(int sig, siginfo_t *siginfo, void *_p)
void signal_handler_sigusr1(int sig, siginfo_t *siginfo, void *_p)
static ThreadList * get()
Provides access to singleton.
methodinfo * class_resolvemethod(classinfo *c, Utf8String name, Utf8String desc)
static Utf8String from_utf8(const char *, size_t)
void signal_handler_sighup(int sig, siginfo_t *siginfo, void *_p)
void threads_suspend_ack()
java_handle_t * exceptions_get_exception(void)
#define Signal_INTERRUPT_SYSTEM_CALL
void thread_set_state_waiting(threadobject *t)
bool signal_start_thread(void)
void signal_thread_handler(int sig)