(linenum→info "unix/slp.c:2238")

glibc/2.7/hurd/exc2signal.c

    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: }
Syntax (Markdown)