123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- /* wait.c -- functions for getting wait status values.
- Copyright 2011 The Go Authors. All rights reserved.
- Use of this source code is governed by a BSD-style
- license that can be found in the LICENSE file.
- We use C code to extract the wait status so that we can easily be
- OS-independent. */
- #include <stdint.h>
- #include <sys/wait.h>
- #include "runtime.h"
- extern _Bool Exited (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.Exited.N18_syscall.WaitStatus");
- _Bool
- Exited (uint32_t *w)
- {
- return WIFEXITED (*w) != 0;
- }
- extern _Bool Signaled (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.Signaled.N18_syscall.WaitStatus");
- _Bool
- Signaled (uint32_t *w)
- {
- return WIFSIGNALED (*w) != 0;
- }
- extern _Bool Stopped (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.Stopped.N18_syscall.WaitStatus");
- _Bool
- Stopped (uint32_t *w)
- {
- return WIFSTOPPED (*w) != 0;
- }
- extern _Bool Continued (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.Continued.N18_syscall.WaitStatus");
- _Bool
- Continued (uint32_t *w)
- {
- return WIFCONTINUED (*w) != 0;
- }
- extern _Bool CoreDump (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.CoreDump.N18_syscall.WaitStatus");
- _Bool
- CoreDump (uint32_t *w)
- {
- return WCOREDUMP (*w) != 0;
- }
- extern int ExitStatus (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.ExitStatus.N18_syscall.WaitStatus");
- int
- ExitStatus (uint32_t *w)
- {
- if (!WIFEXITED (*w))
- return -1;
- return WEXITSTATUS (*w);
- }
- extern int Signal (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.Signal.N18_syscall.WaitStatus");
- int
- Signal (uint32_t *w)
- {
- if (!WIFSIGNALED (*w))
- return -1;
- return WTERMSIG (*w);
- }
- extern int StopSignal (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.StopSignal.N18_syscall.WaitStatus");
- int
- StopSignal (uint32_t *w)
- {
- if (!WIFSTOPPED (*w))
- return -1;
- return WSTOPSIG (*w);
- }
- extern int TrapCause (uint32_t *w)
- __asm__ (GOSYM_PREFIX "syscall.TrapCause.N18_syscall.WaitStatus");
- int
- TrapCause (uint32_t *w __attribute__ ((unused)))
- {
- #ifndef __linux__
- return -1;
- #else
- if (!WIFSTOPPED (*w) || WSTOPSIG (*w) != SIGTRAP)
- return -1;
- return *w >> 16;
- #endif
- }
|