sys_kill(rmp->mp_endpoint, signo);
return;
}
+
+ /* Print stacktrace if necessary. */
+ if(SIGS_IS_STACKTRACE(signo)) {
+ sys_sysctl_stacktrace(rmp->mp_endpoint);
+ }
+
if(!SIGS_IS_TERMINATION(signo)) {
/* Translate every non-termination sys signal into a message. */
message m;
{
rmp->mp_sigstatus = (char) signo;
if (sigismember(&core_sset, signo)) {
- printf("PM: coredump signal %d for %d / %s\n", signo, rmp->mp_pid,
- rmp->mp_name);
+ if(!(rmp->mp_flags & PRIV_PROC)) {
+ printf("PM: coredump signal %d for %d / %s\n", signo,
+ rmp->mp_pid, rmp->mp_name);
+ sys_sysctl_stacktrace(rmp->mp_endpoint);
+ }
exit_proc(rmp, 0, TRUE /*dump_core*/);
}
else {
printf("RS: %s got %s signal %d\n", srv_to_string(rp),
SIGS_IS_TERMINATION(signo) ? "termination" : "non-termination",signo);
+ /* Print stacktrace if necessary. */
+ if(SIGS_IS_STACKTRACE(signo)) {
+ sys_sysctl_stacktrace(target);
+ }
+
/* In case of termination signal handle the event. */
if(SIGS_IS_TERMINATION(signo)) {
rp->r_flags |= RS_TERMINATED;
vm_assert(PFERR_NOPAGE(err));
printf("VM: pagefault: SIGSEGV %d bad addr 0x%lx %s\n",
ep, arch_map2vir(vmp, addr), pf_errstr(err));
- sys_sysctl_stacktrace(vmp->vm_endpoint);
if((s=sys_kill(vmp->vm_endpoint, SIGSEGV)) != OK)
panic("sys_kill failed: %d", s);
if((s=sys_vmctl(ep, VMCTL_CLEAR_PAGEFAULT, r)) != OK)
if(!(region->flags & VR_WRITABLE) && wr) {
printf("VM: pagefault: SIGSEGV %d ro map 0x%lx %s\n",
ep, arch_map2vir(vmp, addr), pf_errstr(err));
- sys_sysctl_stacktrace(vmp->vm_endpoint);
if((s=sys_kill(vmp->vm_endpoint, SIGSEGV)) != OK)
panic("sys_kill failed: %d", s);
if((s=sys_vmctl(ep, VMCTL_CLEAR_PAGEFAULT, r)) != OK)
/* Access is allowed; handle it. */
if((r=map_pf(vmp, region, offset, wr)) != OK) {
printf("VM: pagefault: SIGSEGV %d pagefault not handled\n", ep);
- sys_sysctl_stacktrace(vmp->vm_endpoint);
if((s=sys_kill(vmp->vm_endpoint, SIGSEGV)) != OK)
panic("sys_kill failed: %d", s);
if((s=sys_vmctl(ep, VMCTL_CLEAR_PAGEFAULT, r)) != OK)