text: /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
  /* This Source Code Form is subject to the terms of the Mozilla Public
   * License, v. 2.0. If a copy of the MPL was not distributed with this
   * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
  
  #include "primpl.h"
  
  #include <signal.h>
  #include <poll.h>
  #include <sys/syscall.h>
  
  void _MD_EarlyInit(void)
  {
      /*
       * Ignore FPE because coercion of a NaN to an int causes SIGFPE
       * to be raised.
       */
      struct sigaction act;
  
      act.sa_handler = SIG_IGN;
      sigemptyset(&act.sa_mask);
      act.sa_flags = SA_RESTART;
      sigaction(SIGFPE, &act, 0);
  }
  
  PRWord *_MD_HomeGCRegisters(PRThread *t, int isCurrent, int *np)
  {
  #ifndef _PR_PTHREADS
      if (isCurrent) {
          (void) sigsetjmp(CONTEXT(t), 1);
      }
      *np = sizeof(CONTEXT(t)) / sizeof(PRWord);
      return (PRWord *) CONTEXT(t);
  #else
      *np = 0;
      return NULL;
  #endif
  }
  
  #ifndef _PR_PTHREADS
  void
  _MD_SET_PRIORITY(_MDThread *thread, PRUintn newPri)
  {
      return;
  }
  
  PRStatus
  _MD_InitializeThread(PRThread *thread)
  {
      return PR_SUCCESS;
  }
  
  PRStatus
  _MD_WAIT(PRThread *thread, PRIntervalTime ticks)
  {
      PR_ASSERT(!(thread->flags & _PR_GLOBAL_SCOPE));
      _PR_MD_SWITCH_CONTEXT(thread);
      return PR_SUCCESS;
  }
  
  PRStatus
  _MD_WAKEUP_WAITER(PRThread *thread)
  {
      if (thread) {
          PR_ASSERT(!(thread->flags & _PR_GLOBAL_SCOPE));
      }
      return PR_SUCCESS;
  }
  
  /* These functions should not be called for OpenBSD */
  void
  _MD_YIELD(void)
  {
      PR_NOT_REACHED("_MD_YIELD should not be called for OpenBSD.");
  }
  
  PRStatus
  _MD_CREATE_THREAD(
      PRThread *thread,
      void (*start) (void *),
      PRThreadPriority priority,
      PRThreadScope scope,
      PRThreadState state,
      PRUint32 stackSize)
  {
      PR_NOT_REACHED("_MD_CREATE_THREAD should not be called for OpenBSD.");
      return PR_FAILURE;
  }
  #endif /* ! _PR_PTHREADS */
  