📄 signals.c
字号:
if (hostsig == SIGLOST) return TARGET_SIGNAL_LOST;#endif#if defined (SIGWAITING) if (hostsig == SIGWAITING) return TARGET_SIGNAL_WAITING;#endif#if defined (SIGCANCEL) if (hostsig == SIGCANCEL) return TARGET_SIGNAL_CANCEL;#endif#if defined (SIGLWP) if (hostsig == SIGLWP) return TARGET_SIGNAL_LWP;#endif#if defined (SIGDANGER) if (hostsig == SIGDANGER) return TARGET_SIGNAL_DANGER;#endif#if defined (SIGGRANT) if (hostsig == SIGGRANT) return TARGET_SIGNAL_GRANT;#endif#if defined (SIGRETRACT) if (hostsig == SIGRETRACT) return TARGET_SIGNAL_RETRACT;#endif#if defined (SIGMSG) if (hostsig == SIGMSG) return TARGET_SIGNAL_MSG;#endif#if defined (SIGSOUND) if (hostsig == SIGSOUND) return TARGET_SIGNAL_SOUND;#endif#if defined (SIGSAK) if (hostsig == SIGSAK) return TARGET_SIGNAL_SAK;#endif#if defined (SIGPRIO) if (hostsig == SIGPRIO) return TARGET_SIGNAL_PRIO;#endif /* Mach exceptions. Assumes that the values for EXC_ are positive! */#if defined (EXC_BAD_ACCESS) && defined (_NSIG) if (hostsig == _NSIG + EXC_BAD_ACCESS) return TARGET_EXC_BAD_ACCESS;#endif#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG) if (hostsig == _NSIG + EXC_BAD_INSTRUCTION) return TARGET_EXC_BAD_INSTRUCTION;#endif#if defined (EXC_ARITHMETIC) && defined (_NSIG) if (hostsig == _NSIG + EXC_ARITHMETIC) return TARGET_EXC_ARITHMETIC;#endif#if defined (EXC_EMULATION) && defined (_NSIG) if (hostsig == _NSIG + EXC_EMULATION) return TARGET_EXC_EMULATION;#endif#if defined (EXC_SOFTWARE) && defined (_NSIG) if (hostsig == _NSIG + EXC_SOFTWARE) return TARGET_EXC_SOFTWARE;#endif#if defined (EXC_BREAKPOINT) && defined (_NSIG) if (hostsig == _NSIG + EXC_BREAKPOINT) return TARGET_EXC_BREAKPOINT;#endif#if defined (SIGINFO) if (hostsig == SIGINFO) return TARGET_SIGNAL_INFO;#endif#if defined (REALTIME_LO) if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI) { /* This block of TARGET_SIGNAL_REALTIME value is in order. */ if (33 <= hostsig && hostsig <= 63) return (enum target_signal) (hostsig - 33 + (int) TARGET_SIGNAL_REALTIME_33); else if (hostsig == 32) return TARGET_SIGNAL_REALTIME_32; else if (64 <= hostsig && hostsig <= 127) return (enum target_signal) (hostsig - 64 + (int) TARGET_SIGNAL_REALTIME_64); else error ("GDB bug: target.c (target_signal_from_host): unrecognized real-time signal"); }#endif return TARGET_SIGNAL_UNKNOWN;}/* Convert a OURSIG (an enum target_signal) to the form used by the target operating system (refered to as the ``host'') or zero if the equivalent host signal is not available. Set/clear OURSIG_OK accordingly. */static intdo_target_signal_to_host (enum target_signal oursig, int *oursig_ok){ int retsig; *oursig_ok = 1; switch (oursig) { case TARGET_SIGNAL_0: return 0;#if defined (SIGHUP) case TARGET_SIGNAL_HUP: return SIGHUP;#endif#if defined (SIGINT) case TARGET_SIGNAL_INT: return SIGINT;#endif#if defined (SIGQUIT) case TARGET_SIGNAL_QUIT: return SIGQUIT;#endif#if defined (SIGILL) case TARGET_SIGNAL_ILL: return SIGILL;#endif#if defined (SIGTRAP) case TARGET_SIGNAL_TRAP: return SIGTRAP;#endif#if defined (SIGABRT) case TARGET_SIGNAL_ABRT: return SIGABRT;#endif#if defined (SIGEMT) case TARGET_SIGNAL_EMT: return SIGEMT;#endif#if defined (SIGFPE) case TARGET_SIGNAL_FPE: return SIGFPE;#endif#if defined (SIGKILL) case TARGET_SIGNAL_KILL: return SIGKILL;#endif#if defined (SIGBUS) case TARGET_SIGNAL_BUS: return SIGBUS;#endif#if defined (SIGSEGV) case TARGET_SIGNAL_SEGV: return SIGSEGV;#endif#if defined (SIGSYS) case TARGET_SIGNAL_SYS: return SIGSYS;#endif#if defined (SIGPIPE) case TARGET_SIGNAL_PIPE: return SIGPIPE;#endif#if defined (SIGALRM) case TARGET_SIGNAL_ALRM: return SIGALRM;#endif#if defined (SIGTERM) case TARGET_SIGNAL_TERM: return SIGTERM;#endif#if defined (SIGUSR1) case TARGET_SIGNAL_USR1: return SIGUSR1;#endif#if defined (SIGUSR2) case TARGET_SIGNAL_USR2: return SIGUSR2;#endif#if defined (SIGCHLD) || defined (SIGCLD) case TARGET_SIGNAL_CHLD:#if defined (SIGCHLD) return SIGCHLD;#else return SIGCLD;#endif#endif /* SIGCLD or SIGCHLD */#if defined (SIGPWR) case TARGET_SIGNAL_PWR: return SIGPWR;#endif#if defined (SIGWINCH) case TARGET_SIGNAL_WINCH: return SIGWINCH;#endif#if defined (SIGURG) case TARGET_SIGNAL_URG: return SIGURG;#endif#if defined (SIGIO) case TARGET_SIGNAL_IO: return SIGIO;#endif#if defined (SIGPOLL) case TARGET_SIGNAL_POLL: return SIGPOLL;#endif#if defined (SIGSTOP) case TARGET_SIGNAL_STOP: return SIGSTOP;#endif#if defined (SIGTSTP) case TARGET_SIGNAL_TSTP: return SIGTSTP;#endif#if defined (SIGCONT) case TARGET_SIGNAL_CONT: return SIGCONT;#endif#if defined (SIGTTIN) case TARGET_SIGNAL_TTIN: return SIGTTIN;#endif#if defined (SIGTTOU) case TARGET_SIGNAL_TTOU: return SIGTTOU;#endif#if defined (SIGVTALRM) case TARGET_SIGNAL_VTALRM: return SIGVTALRM;#endif#if defined (SIGPROF) case TARGET_SIGNAL_PROF: return SIGPROF;#endif#if defined (SIGXCPU) case TARGET_SIGNAL_XCPU: return SIGXCPU;#endif#if defined (SIGXFSZ) case TARGET_SIGNAL_XFSZ: return SIGXFSZ;#endif#if defined (SIGWIND) case TARGET_SIGNAL_WIND: return SIGWIND;#endif#if defined (SIGPHONE) case TARGET_SIGNAL_PHONE: return SIGPHONE;#endif#if defined (SIGLOST) case TARGET_SIGNAL_LOST: return SIGLOST;#endif#if defined (SIGWAITING) case TARGET_SIGNAL_WAITING: return SIGWAITING;#endif#if defined (SIGCANCEL) case TARGET_SIGNAL_CANCEL: return SIGCANCEL;#endif#if defined (SIGLWP) case TARGET_SIGNAL_LWP: return SIGLWP;#endif#if defined (SIGDANGER) case TARGET_SIGNAL_DANGER: return SIGDANGER;#endif#if defined (SIGGRANT) case TARGET_SIGNAL_GRANT: return SIGGRANT;#endif#if defined (SIGRETRACT) case TARGET_SIGNAL_RETRACT: return SIGRETRACT;#endif#if defined (SIGMSG) case TARGET_SIGNAL_MSG: return SIGMSG;#endif#if defined (SIGSOUND) case TARGET_SIGNAL_SOUND: return SIGSOUND;#endif#if defined (SIGSAK) case TARGET_SIGNAL_SAK: return SIGSAK;#endif#if defined (SIGPRIO) case TARGET_SIGNAL_PRIO: return SIGPRIO;#endif /* Mach exceptions. Assumes that the values for EXC_ are positive! */#if defined (EXC_BAD_ACCESS) && defined (_NSIG) case TARGET_EXC_BAD_ACCESS: return _NSIG + EXC_BAD_ACCESS;#endif#if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG) case TARGET_EXC_BAD_INSTRUCTION: return _NSIG + EXC_BAD_INSTRUCTION;#endif#if defined (EXC_ARITHMETIC) && defined (_NSIG) case TARGET_EXC_ARITHMETIC: return _NSIG + EXC_ARITHMETIC;#endif#if defined (EXC_EMULATION) && defined (_NSIG) case TARGET_EXC_EMULATION: return _NSIG + EXC_EMULATION;#endif#if defined (EXC_SOFTWARE) && defined (_NSIG) case TARGET_EXC_SOFTWARE: return _NSIG + EXC_SOFTWARE;#endif#if defined (EXC_BREAKPOINT) && defined (_NSIG) case TARGET_EXC_BREAKPOINT: return _NSIG + EXC_BREAKPOINT;#endif#if defined (SIGINFO) case TARGET_SIGNAL_INFO: return SIGINFO;#endif default:#if defined (REALTIME_LO) retsig = 0; if (oursig >= TARGET_SIGNAL_REALTIME_33 && oursig <= TARGET_SIGNAL_REALTIME_63) { /* This block of signals is continuous, and TARGET_SIGNAL_REALTIME_33 is 33 by definition. */ retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_33 + 33; } else if (oursig == TARGET_SIGNAL_REALTIME_32) { /* TARGET_SIGNAL_REALTIME_32 isn't contiguous with TARGET_SIGNAL_REALTIME_33. It is 32 by definition. */ retsig = 32; } else if (oursig >= TARGET_SIGNAL_REALTIME_64 && oursig <= TARGET_SIGNAL_REALTIME_127) { /* This block of signals is continuous, and TARGET_SIGNAL_REALTIME_64 is 64 by definition. */ retsig = (int) oursig - (int) TARGET_SIGNAL_REALTIME_64 + 64; } if (retsig >= REALTIME_LO && retsig < REALTIME_HI) return retsig;#endif *oursig_ok = 0; return 0; }}inttarget_signal_to_host_p (enum target_signal oursig){ int oursig_ok; do_target_signal_to_host (oursig, &oursig_ok); return oursig_ok;}inttarget_signal_to_host (enum target_signal oursig){ int oursig_ok; int targ_signo = do_target_signal_to_host (oursig, &oursig_ok); if (!oursig_ok) { /* The user might be trying to do "signal SIGSAK" where this system doesn't have SIGSAK. */ warning ("Signal %s does not exist on this system.\n", target_signal_to_name (oursig)); return 0; } else return targ_signo;}/* In some circumstances we allow a command to specify a numeric signal. The idea is to keep these circumstances limited so that users (and scripts) develop portable habits. For comparison, POSIX.2 `kill' requires that 1,2,3,6,9,14, and 15 work (and using a numeric signal at all is obsolescent. We are slightly more lenient and allow 1-15 which should match host signal numbers on most systems. Use of symbolic signal names is strongly encouraged. */enum target_signaltarget_signal_from_command (int num){ if (num >= 1 && num <= 15) return (enum target_signal) num; error ("Only signals 1-15 are valid as numeric signals.\n\Use \"info signals\" for a list of symbolic signals.");}#ifndef GDBSERVERextern initialize_file_ftype _initialize_signals; /* -Wmissing-prototype */void_initialize_signals (void){ if (strcmp (signals[TARGET_SIGNAL_LAST].string, "TARGET_SIGNAL_MAGIC") != 0) internal_error (__FILE__, __LINE__, "failed internal consistency check");}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -