hotspot/src/os/aix/vm/jvm_aix.cpp
changeset 34621 7676bec20997
parent 33732 2a47b89db4ec
child 35594 cc13089c6327
equal deleted inserted replaced
34620:77ef20312eb2 34621:7676bec20997
   107 
   107 
   108   os::signal_raise(sig);
   108   os::signal_raise(sig);
   109   return JNI_TRUE;
   109   return JNI_TRUE;
   110 JVM_END
   110 JVM_END
   111 
   111 
   112 /*
       
   113   All the defined signal names for Linux.
       
   114 
       
   115   NOTE that not all of these names are accepted by our Java implementation
       
   116 
       
   117   Via an existing claim by the VM, sigaction restrictions, or
       
   118   the "rules of Unix" some of these names will be rejected at runtime.
       
   119   For example the VM sets up to handle USR1, sigaction returns EINVAL for
       
   120   STOP, and Linux simply doesn't allow catching of KILL.
       
   121 
       
   122   Here are the names currently accepted by a user of sun.misc.Signal with
       
   123   1.4.1 (ignoring potential interaction with use of chaining, etc):
       
   124 
       
   125     HUP, INT, TRAP, ABRT, IOT, BUS, USR2, PIPE, ALRM, TERM, STKFLT,
       
   126     CLD, CHLD, CONT, TSTP, TTIN, TTOU, URG, XCPU, XFSZ, VTALRM, PROF,
       
   127     WINCH, POLL, IO, PWR, SYS
       
   128 
       
   129 */
       
   130 
       
   131 struct siglabel {
       
   132   const char *name;
       
   133   int   number;
       
   134 };
       
   135 
       
   136 struct siglabel siglabels[] = {
       
   137   /* derived from /usr/include/bits/signum.h on RH7.2 */
       
   138    "HUP",       SIGHUP,         /* Hangup (POSIX).  */
       
   139   "INT",        SIGINT,         /* Interrupt (ANSI).  */
       
   140   "QUIT",       SIGQUIT,        /* Quit (POSIX).  */
       
   141   "ILL",        SIGILL,         /* Illegal instruction (ANSI).  */
       
   142   "TRAP",       SIGTRAP,        /* Trace trap (POSIX).  */
       
   143   "ABRT",       SIGABRT,        /* Abort (ANSI).  */
       
   144   "IOT",        SIGIOT,         /* IOT trap (4.2 BSD).  */
       
   145   "BUS",        SIGBUS,         /* BUS error (4.2 BSD).  */
       
   146   "FPE",        SIGFPE,         /* Floating-point exception (ANSI).  */
       
   147   "KILL",       SIGKILL,        /* Kill, unblockable (POSIX).  */
       
   148   "USR1",       SIGUSR1,        /* User-defined signal 1 (POSIX).  */
       
   149   "SEGV",       SIGSEGV,        /* Segmentation violation (ANSI).  */
       
   150   "USR2",       SIGUSR2,        /* User-defined signal 2 (POSIX).  */
       
   151   "PIPE",       SIGPIPE,        /* Broken pipe (POSIX).  */
       
   152   "ALRM",       SIGALRM,        /* Alarm clock (POSIX).  */
       
   153   "TERM",       SIGTERM,        /* Termination (ANSI).  */
       
   154 #ifdef SIGSTKFLT
       
   155   "STKFLT",     SIGSTKFLT,      /* Stack fault.  */
       
   156 #endif
       
   157   "CLD",        SIGCLD,         /* Same as SIGCHLD (System V).  */
       
   158   "CHLD",       SIGCHLD,        /* Child status has changed (POSIX).  */
       
   159   "CONT",       SIGCONT,        /* Continue (POSIX).  */
       
   160   "STOP",       SIGSTOP,        /* Stop, unblockable (POSIX).  */
       
   161   "TSTP",       SIGTSTP,        /* Keyboard stop (POSIX).  */
       
   162   "TTIN",       SIGTTIN,        /* Background read from tty (POSIX).  */
       
   163   "TTOU",       SIGTTOU,        /* Background write to tty (POSIX).  */
       
   164   "URG",        SIGURG,         /* Urgent condition on socket (4.2 BSD).  */
       
   165   "XCPU",       SIGXCPU,        /* CPU limit exceeded (4.2 BSD).  */
       
   166   "XFSZ",       SIGXFSZ,        /* File size limit exceeded (4.2 BSD).  */
       
   167   "DANGER",     SIGDANGER,      /* System crash imminent; free up some page space (AIX). */
       
   168   "VTALRM",     SIGVTALRM,      /* Virtual alarm clock (4.2 BSD).  */
       
   169   "PROF",       SIGPROF,        /* Profiling alarm clock (4.2 BSD).  */
       
   170   "WINCH",      SIGWINCH,       /* Window size change (4.3 BSD, Sun).  */
       
   171   "POLL",       SIGPOLL,        /* Pollable event occurred (System V).  */
       
   172   "IO",         SIGIO,          /* I/O now possible (4.2 BSD).  */
       
   173   "PWR",        SIGPWR,         /* Power failure restart (System V).  */
       
   174 #ifdef SIGSYS
       
   175   "SYS",        SIGSYS          /* Bad system call. Only on some Linuxen! */
       
   176 #endif
       
   177   };
       
   178 
       
   179 JVM_ENTRY_NO_ENV(jint, JVM_FindSignal(const char *name))
       
   180 
       
   181   /* find and return the named signal's number */
       
   182 
       
   183   for(uint i=0; i<ARRAY_SIZE(siglabels); i++)
       
   184     if(!strcmp(name, siglabels[i].name))
       
   185       return siglabels[i].number;
       
   186 
       
   187   return -1;
       
   188 
       
   189 JVM_END
       
   190 
       
   191 // used by os::exception_name()
       
   192 extern bool signal_name(int signo, char* buf, size_t len) {
       
   193   for(uint i = 0; i < ARRAY_SIZE(siglabels); i++) {
       
   194     if (signo == siglabels[i].number) {
       
   195       jio_snprintf(buf, len, "SIG%s", siglabels[i].name);
       
   196       return true;
       
   197     }
       
   198   }
       
   199   return false;
       
   200 }