1 /* wait.c -- functions for getting wait status values.
3 Copyright 2011 The Go Authors. All rights reserved.
4 Use of this source code is governed by a BSD-style
5 license that can be found in the LICENSE file.
7 We use C code to extract the wait status so that we can easily be
16 #define WCOREDUMP(status) (((status) & 0200) != 0)
20 #define WIFCONTINUED(x) 0
23 extern _Bool
Exited (uint32_t *w
)
24 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.Exited");
29 return WIFEXITED (*w
) != 0;
32 extern _Bool
Signaled (uint32_t *w
)
33 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.Signaled");
36 Signaled (uint32_t *w
)
38 return WIFSIGNALED (*w
) != 0;
41 extern _Bool
Stopped (uint32_t *w
)
42 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.Stopped");
47 return WIFSTOPPED (*w
) != 0;
50 extern _Bool
Continued (uint32_t *w
)
51 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.Continued");
54 Continued (uint32_t *w
)
56 return WIFCONTINUED (*w
) != 0;
59 extern _Bool
CoreDump (uint32_t *w
)
60 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.CoreDump");
63 CoreDump (uint32_t *w
)
65 return WCOREDUMP (*w
) != 0;
68 extern intgo
ExitStatus (uint32_t *w
)
69 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.ExitStatus");
72 ExitStatus (uint32_t *w
)
76 return WEXITSTATUS (*w
);
79 extern intgo
Signal (uint32_t *w
)
80 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.Signal");
85 if (!WIFSIGNALED (*w
))
90 extern intgo
StopSignal (uint32_t *w
)
91 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.StopSignal");
94 StopSignal (uint32_t *w
)
101 extern intgo
TrapCause (uint32_t *w
)
102 __asm__ (GOSYM_PREFIX
"syscall.WaitStatus.TrapCause");
105 TrapCause (uint32_t *w
__attribute__ ((unused
)))
110 if (!WIFSTOPPED (*w
) || WSTOPSIG (*w
) != SIGTRAP
)