
1: /* Translate Mach exception codes into signal numbers. Stub version. 2: Copyright (C) 1991, 1992, 1994, 1995, 1997 Free Software Foundation, Inc. 3: This file is part of the GNU C Library. 4: 5: The GNU C Library is free software; you can redistribute it and/or 6: modify it under the terms of the GNU Lesser General Public 7: License as published by the Free Software Foundation; either 8: version 2.1 of the License, or (at your option) any later version. 9: 10: The GNU C Library is distributed in the hope that it will be useful, 11: but WITHOUT ANY WARRANTY; without even the implied warranty of 12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13: Lesser General Public License for more details. 14: 15: You should have received a copy of the GNU Lesser General Public 16: License along with the GNU C Library; if not, write to the Free 17: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18: 02111-1307 USA. */ 19: 20: #include <hurd.h> 21: 22: /* This file must be modified with machine-dependent details. */ 23: #error "need to write sysdeps/mach/hurd/MACHINE/exc2signal.c" 24: 25: /* Translate the Mach exception codes, as received in an `exception_raise' RPC, 26: into a signal number and signal subcode. */ 27: 28: void 29: _hurd_exception2signal (int exception, int code, int subcode, 30: int *signo, int *sigcode, int *error) 31: { 32: *error = 0; 33: 34: switch (exception) 35: { 36: default: 37: *signo = SIGIOT; 38: *sigcode = exception; 39: break; 40: 41: case EXC_BAD_ACCESS: 42: if (code == KERN_PROTECTION_FAILURE) 43: *signo = SIGSEGV; 44: else 45: *signo = SIGBUS; 46: *sigcode = subcode; 47: *error = code; 48: break; 49: 50: case EXC_BAD_INSTRUCTION: 51: *signo = SIGILL; 52: *sigcode = 0; 53: break; 54: 55: case EXC_ARITHMETIC: 56: *signo = SIGFPE; 57: *sigcode = 0; 58: break; 59: 60: case EXC_EMULATION: 61: case EXC_SOFTWARE: 62: *signo = SIGEMT; 63: *sigcode = 0; 64: break; 65: 66: case EXC_BREAKPOINT: 67: *signo = SIGTRAP; 68: *sigcode = 0; 69: break; 70: } 71: }