1  /* Copyright (C) 1993-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <unistd.h>
      19  #include <hurd.h>
      20  #include <hurd/port.h>
      21  #include <sysdep.h>
      22  #include <sys/wait.h>
      23  
      24  void
      25  _hurd_exit (int status)
      26  {
      27    if (_hurd_ports != NULL)
      28      /* Give the proc server our exit status.  */
      29      __USEPORT (PROC, __proc_mark_exit (port, status, 0));
      30  
      31    /* Commit suicide.  */
      32    __task_terminate (__mach_task_self ());
      33  
      34    /* Perhaps the cached mach_task_self was bogus.  */
      35    __task_terminate ((__mach_task_self) ());
      36  
      37    /* This sucker really doesn't want to die.  */
      38    while (1)
      39      {
      40  #ifdef LOSE
      41        LOSE;
      42  #else
      43        volatile const int zero = 0, one = 1;
      44        volatile int lossage = one / zero;
      45  #endif
      46      }
      47  }
      48  
      49  void
      50  _exit (int status)
      51  {
      52    _hurd_exit (W_EXITCODE (status, 0));
      53  }
      54  libc_hidden_def (_exit)
      55  #ifndef NO_RTLD_HIDDEN
      56  rtld_hidden_def (_exit)
      57  #endif
      58  weak_alias (_exit, _Exit)