1 /* Translate Mach exception codes into signal numbers. Stub version. 2 Copyright (C) 1991-2022 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, see 17 <https://www.gnu.org/licenses/>. */ 18 19 #include <hurd.h> 20 #include <hurd/signal.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 _hurd_exception2signal(struct hurd_signal_detail * detail,int * signo)29_hurd_exception2signal (struct hurd_signal_detail *detail, int *signo) 30 { 31 detail->error = 0; 32 33 switch (detail->exc) 34 { 35 default: 36 *signo = SIGIOT; 37 detail->code = detail->exc; 38 break; 39 40 case EXC_BAD_ACCESS: 41 if (detail->exc_code == KERN_PROTECTION_FAILURE) 42 *signo = SIGSEGV; 43 else 44 *signo = SIGBUS; 45 detail->code = detail->exc_subcode; 46 detail->error = detail->exc_code; 47 break; 48 49 case EXC_BAD_INSTRUCTION: 50 *signo = SIGILL; 51 detail->code = 0; 52 break; 53 54 case EXC_ARITHMETIC: 55 *signo = SIGFPE; 56 detail->code = 0; 57 break; 58 59 case EXC_EMULATION: 60 case EXC_SOFTWARE: 61 *signo = SIGEMT; 62 detail->code = 0; 63 break; 64 65 case EXC_BREAKPOINT: 66 *signo = SIGTRAP; 67 detail->code = 0; 68 break; 69 } 70 } 71 libc_hidden_def (_hurd_exception2signal) 72