1*433d6423SLionel Sambuc #include <sys/cdefs.h> 2*433d6423SLionel Sambuc #include "namespace.h" 3*433d6423SLionel Sambuc #include <lib.h> 4*433d6423SLionel Sambuc 5*433d6423SLionel Sambuc #include <string.h> 6*433d6423SLionel Sambuc #include <unistd.h> 7*433d6423SLionel Sambuc 8*433d6423SLionel Sambuc #ifdef __weak_alias 9*433d6423SLionel Sambuc __weak_alias(_Exit, _exit) 10*433d6423SLionel Sambuc #endif 11*433d6423SLionel Sambuc 12*433d6423SLionel Sambuc __dead void _exit(status) 13*433d6423SLionel Sambuc int status; 14*433d6423SLionel Sambuc { 15*433d6423SLionel Sambuc void (*suicide)(void); 16*433d6423SLionel Sambuc message m; 17*433d6423SLionel Sambuc 18*433d6423SLionel Sambuc memset(&m, 0, sizeof(m)); 19*433d6423SLionel Sambuc m.m_lc_pm_exit.status = status; 20*433d6423SLionel Sambuc _syscall(PM_PROC_NR, PM_EXIT, &m); 21*433d6423SLionel Sambuc 22*433d6423SLionel Sambuc /* If exiting nicely through PM fails for some reason, try to 23*433d6423SLionel Sambuc * commit suicide. E.g., message to PM might fail due to deadlock. 24*433d6423SLionel Sambuc */ 25*433d6423SLionel Sambuc suicide = (void (*)(void)) -1; 26*433d6423SLionel Sambuc suicide(); 27*433d6423SLionel Sambuc 28*433d6423SLionel Sambuc /* If committing suicide fails for some reason, hang. */ 29*433d6423SLionel Sambuc for(;;) { } 30*433d6423SLionel Sambuc } 31*433d6423SLionel Sambuc 32