signals.cc 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. /* Target signal translation functions for GDB.
  2. Copyright (C) 1990-2022 Free Software Foundation, Inc.
  3. Contributed by Cygnus Support.
  4. This file is part of GDB.
  5. This program is free software; you can redistribute it and/or modify
  6. it under the terms of the GNU General Public License as published by
  7. the Free Software Foundation; either version 3 of the License, or
  8. (at your option) any later version.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  12. GNU General Public License for more details.
  13. You should have received a copy of the GNU General Public License
  14. along with this program. If not, see <http://www.gnu.org/licenses/>. */
  15. #include "common-defs.h"
  16. #ifdef HAVE_SIGNAL_H
  17. #include <signal.h>
  18. #endif
  19. #include "gdb_signals.h"
  20. struct gdbarch;
  21. /* Always use __SIGRTMIN if it's available. SIGRTMIN is the lowest
  22. _available_ realtime signal, not the lowest supported; glibc takes
  23. several for its own use. */
  24. #ifndef REALTIME_LO
  25. # if defined(__SIGRTMIN)
  26. # define REALTIME_LO __SIGRTMIN
  27. # define REALTIME_HI (__SIGRTMAX + 1)
  28. # elif defined(SIGRTMIN)
  29. # define REALTIME_LO SIGRTMIN
  30. # define REALTIME_HI (SIGRTMAX + 1)
  31. # endif
  32. #endif
  33. /* This table must match in order and size the signals in enum
  34. gdb_signal. */
  35. static const struct {
  36. const char *symbol;
  37. const char *name;
  38. const char *string;
  39. } signals [] =
  40. {
  41. #define SET(symbol, constant, name, string) { #symbol, name, string },
  42. #include "gdb/signals.def"
  43. #undef SET
  44. };
  45. const char *
  46. gdb_signal_to_symbol_string (enum gdb_signal sig)
  47. {
  48. gdb_assert ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST);
  49. return signals[sig].symbol;
  50. }
  51. /* Return the string for a signal. */
  52. const char *
  53. gdb_signal_to_string (enum gdb_signal sig)
  54. {
  55. if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST)
  56. return signals[sig].string;
  57. else
  58. return signals[GDB_SIGNAL_UNKNOWN].string;
  59. }
  60. /* Return the name for a signal. */
  61. const char *
  62. gdb_signal_to_name (enum gdb_signal sig)
  63. {
  64. if ((int) sig >= GDB_SIGNAL_FIRST && (int) sig <= GDB_SIGNAL_LAST
  65. && signals[sig].name != NULL)
  66. return signals[sig].name;
  67. else
  68. /* I think the code which prints this will always print it along
  69. with the string, so no need to be verbose (very old comment). */
  70. return "?";
  71. }
  72. /* Given a name, return its signal. */
  73. enum gdb_signal
  74. gdb_signal_from_name (const char *name)
  75. {
  76. enum gdb_signal sig;
  77. /* It's possible we also should allow "SIGCLD" as well as "SIGCHLD"
  78. for GDB_SIGNAL_SIGCHLD. SIGIOT, on the other hand, is more
  79. questionable; seems like by now people should call it SIGABRT
  80. instead. */
  81. /* This ugly cast brought to you by the native VAX compiler. */
  82. for (sig = GDB_SIGNAL_HUP;
  83. sig < GDB_SIGNAL_LAST;
  84. sig = (enum gdb_signal) ((int) sig + 1))
  85. if (signals[sig].name != NULL
  86. && strcmp (name, signals[sig].name) == 0)
  87. return sig;
  88. return GDB_SIGNAL_UNKNOWN;
  89. }
  90. /* The following functions are to help certain targets deal
  91. with the signal/waitstatus stuff. They could just as well be in
  92. a file called native-utils.c or unixwaitstatus-utils.c or whatever. */
  93. /* Convert host signal to our signals. */
  94. enum gdb_signal
  95. gdb_signal_from_host (int hostsig)
  96. {
  97. /* A switch statement would make sense but would require special
  98. kludges to deal with the cases where more than one signal has the
  99. same number. Signals are ordered ANSI-standard signals first,
  100. other signals second, with signals in each block ordered by their
  101. numerical values on a typical POSIX platform. */
  102. if (hostsig == 0)
  103. return GDB_SIGNAL_0;
  104. /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
  105. are ANSI-standard signals and are always available. */
  106. if (hostsig == SIGINT)
  107. return GDB_SIGNAL_INT;
  108. if (hostsig == SIGILL)
  109. return GDB_SIGNAL_ILL;
  110. if (hostsig == SIGABRT)
  111. return GDB_SIGNAL_ABRT;
  112. if (hostsig == SIGFPE)
  113. return GDB_SIGNAL_FPE;
  114. if (hostsig == SIGSEGV)
  115. return GDB_SIGNAL_SEGV;
  116. if (hostsig == SIGTERM)
  117. return GDB_SIGNAL_TERM;
  118. /* All other signals need preprocessor conditionals. */
  119. #if defined (SIGHUP)
  120. if (hostsig == SIGHUP)
  121. return GDB_SIGNAL_HUP;
  122. #endif
  123. #if defined (SIGQUIT)
  124. if (hostsig == SIGQUIT)
  125. return GDB_SIGNAL_QUIT;
  126. #endif
  127. #if defined (SIGTRAP)
  128. if (hostsig == SIGTRAP)
  129. return GDB_SIGNAL_TRAP;
  130. #endif
  131. #if defined (SIGEMT)
  132. if (hostsig == SIGEMT)
  133. return GDB_SIGNAL_EMT;
  134. #endif
  135. #if defined (SIGKILL)
  136. if (hostsig == SIGKILL)
  137. return GDB_SIGNAL_KILL;
  138. #endif
  139. #if defined (SIGBUS)
  140. if (hostsig == SIGBUS)
  141. return GDB_SIGNAL_BUS;
  142. #endif
  143. #if defined (SIGSYS)
  144. if (hostsig == SIGSYS)
  145. return GDB_SIGNAL_SYS;
  146. #endif
  147. #if defined (SIGPIPE)
  148. if (hostsig == SIGPIPE)
  149. return GDB_SIGNAL_PIPE;
  150. #endif
  151. #if defined (SIGALRM)
  152. if (hostsig == SIGALRM)
  153. return GDB_SIGNAL_ALRM;
  154. #endif
  155. #if defined (SIGUSR1)
  156. if (hostsig == SIGUSR1)
  157. return GDB_SIGNAL_USR1;
  158. #endif
  159. #if defined (SIGUSR2)
  160. if (hostsig == SIGUSR2)
  161. return GDB_SIGNAL_USR2;
  162. #endif
  163. #if defined (SIGCLD)
  164. if (hostsig == SIGCLD)
  165. return GDB_SIGNAL_CHLD;
  166. #endif
  167. #if defined (SIGCHLD)
  168. if (hostsig == SIGCHLD)
  169. return GDB_SIGNAL_CHLD;
  170. #endif
  171. #if defined (SIGPWR)
  172. if (hostsig == SIGPWR)
  173. return GDB_SIGNAL_PWR;
  174. #endif
  175. #if defined (SIGWINCH)
  176. if (hostsig == SIGWINCH)
  177. return GDB_SIGNAL_WINCH;
  178. #endif
  179. #if defined (SIGURG)
  180. if (hostsig == SIGURG)
  181. return GDB_SIGNAL_URG;
  182. #endif
  183. #if defined (SIGIO)
  184. if (hostsig == SIGIO)
  185. return GDB_SIGNAL_IO;
  186. #endif
  187. #if defined (SIGPOLL)
  188. if (hostsig == SIGPOLL)
  189. return GDB_SIGNAL_POLL;
  190. #endif
  191. #if defined (SIGSTOP)
  192. if (hostsig == SIGSTOP)
  193. return GDB_SIGNAL_STOP;
  194. #endif
  195. #if defined (SIGTSTP)
  196. if (hostsig == SIGTSTP)
  197. return GDB_SIGNAL_TSTP;
  198. #endif
  199. #if defined (SIGCONT)
  200. if (hostsig == SIGCONT)
  201. return GDB_SIGNAL_CONT;
  202. #endif
  203. #if defined (SIGTTIN)
  204. if (hostsig == SIGTTIN)
  205. return GDB_SIGNAL_TTIN;
  206. #endif
  207. #if defined (SIGTTOU)
  208. if (hostsig == SIGTTOU)
  209. return GDB_SIGNAL_TTOU;
  210. #endif
  211. #if defined (SIGVTALRM)
  212. if (hostsig == SIGVTALRM)
  213. return GDB_SIGNAL_VTALRM;
  214. #endif
  215. #if defined (SIGPROF)
  216. if (hostsig == SIGPROF)
  217. return GDB_SIGNAL_PROF;
  218. #endif
  219. #if defined (SIGXCPU)
  220. if (hostsig == SIGXCPU)
  221. return GDB_SIGNAL_XCPU;
  222. #endif
  223. #if defined (SIGXFSZ)
  224. if (hostsig == SIGXFSZ)
  225. return GDB_SIGNAL_XFSZ;
  226. #endif
  227. #if defined (SIGWIND)
  228. if (hostsig == SIGWIND)
  229. return GDB_SIGNAL_WIND;
  230. #endif
  231. #if defined (SIGPHONE)
  232. if (hostsig == SIGPHONE)
  233. return GDB_SIGNAL_PHONE;
  234. #endif
  235. #if defined (SIGLOST)
  236. if (hostsig == SIGLOST)
  237. return GDB_SIGNAL_LOST;
  238. #endif
  239. #if defined (SIGWAITING)
  240. if (hostsig == SIGWAITING)
  241. return GDB_SIGNAL_WAITING;
  242. #endif
  243. #if defined (SIGCANCEL)
  244. if (hostsig == SIGCANCEL)
  245. return GDB_SIGNAL_CANCEL;
  246. #endif
  247. #if defined (SIGLWP)
  248. if (hostsig == SIGLWP)
  249. return GDB_SIGNAL_LWP;
  250. #endif
  251. #if defined (SIGDANGER)
  252. if (hostsig == SIGDANGER)
  253. return GDB_SIGNAL_DANGER;
  254. #endif
  255. #if defined (SIGGRANT)
  256. if (hostsig == SIGGRANT)
  257. return GDB_SIGNAL_GRANT;
  258. #endif
  259. #if defined (SIGRETRACT)
  260. if (hostsig == SIGRETRACT)
  261. return GDB_SIGNAL_RETRACT;
  262. #endif
  263. #if defined (SIGMSG)
  264. if (hostsig == SIGMSG)
  265. return GDB_SIGNAL_MSG;
  266. #endif
  267. #if defined (SIGSOUND)
  268. if (hostsig == SIGSOUND)
  269. return GDB_SIGNAL_SOUND;
  270. #endif
  271. #if defined (SIGSAK)
  272. if (hostsig == SIGSAK)
  273. return GDB_SIGNAL_SAK;
  274. #endif
  275. #if defined (SIGPRIO)
  276. if (hostsig == SIGPRIO)
  277. return GDB_SIGNAL_PRIO;
  278. #endif
  279. /* Mach exceptions. Assumes that the values for EXC_ are positive! */
  280. #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
  281. if (hostsig == _NSIG + EXC_BAD_ACCESS)
  282. return GDB_EXC_BAD_ACCESS;
  283. #endif
  284. #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
  285. if (hostsig == _NSIG + EXC_BAD_INSTRUCTION)
  286. return GDB_EXC_BAD_INSTRUCTION;
  287. #endif
  288. #if defined (EXC_ARITHMETIC) && defined (_NSIG)
  289. if (hostsig == _NSIG + EXC_ARITHMETIC)
  290. return GDB_EXC_ARITHMETIC;
  291. #endif
  292. #if defined (EXC_EMULATION) && defined (_NSIG)
  293. if (hostsig == _NSIG + EXC_EMULATION)
  294. return GDB_EXC_EMULATION;
  295. #endif
  296. #if defined (EXC_SOFTWARE) && defined (_NSIG)
  297. if (hostsig == _NSIG + EXC_SOFTWARE)
  298. return GDB_EXC_SOFTWARE;
  299. #endif
  300. #if defined (EXC_BREAKPOINT) && defined (_NSIG)
  301. if (hostsig == _NSIG + EXC_BREAKPOINT)
  302. return GDB_EXC_BREAKPOINT;
  303. #endif
  304. #if defined (SIGINFO)
  305. if (hostsig == SIGINFO)
  306. return GDB_SIGNAL_INFO;
  307. #endif
  308. #if defined (SIGLIBRT)
  309. if (hostsig == SIGLIBRT)
  310. return GDB_SIGNAL_LIBRT;
  311. #endif
  312. #if defined (REALTIME_LO)
  313. if (hostsig >= REALTIME_LO && hostsig < REALTIME_HI)
  314. {
  315. /* This block of GDB_SIGNAL_REALTIME value is in order. */
  316. if (33 <= hostsig && hostsig <= 63)
  317. return (enum gdb_signal)
  318. (hostsig - 33 + (int) GDB_SIGNAL_REALTIME_33);
  319. else if (hostsig == 32)
  320. return GDB_SIGNAL_REALTIME_32;
  321. else if (64 <= hostsig && hostsig <= 127)
  322. return (enum gdb_signal)
  323. (hostsig - 64 + (int) GDB_SIGNAL_REALTIME_64);
  324. else
  325. error (_("GDB bug: target.c (gdb_signal_from_host): "
  326. "unrecognized real-time signal"));
  327. }
  328. #endif
  329. return GDB_SIGNAL_UNKNOWN;
  330. }
  331. /* Convert a OURSIG (an enum gdb_signal) to the form used by the
  332. target operating system (refered to as the ``host'') or zero if the
  333. equivalent host signal is not available. Set/clear OURSIG_OK
  334. accordingly. */
  335. static int
  336. do_gdb_signal_to_host (enum gdb_signal oursig,
  337. int *oursig_ok)
  338. {
  339. int retsig;
  340. /* Silence the 'not used' warning, for targets that
  341. do not support signals. */
  342. (void) retsig;
  343. /* Signals are ordered ANSI-standard signals first, other signals
  344. second, with signals in each block ordered by their numerical
  345. values on a typical POSIX platform. */
  346. *oursig_ok = 1;
  347. switch (oursig)
  348. {
  349. case GDB_SIGNAL_0:
  350. return 0;
  351. /* SIGINT, SIGILL, SIGABRT, SIGFPE, SIGSEGV and SIGTERM
  352. are ANSI-standard signals and are always available. */
  353. case GDB_SIGNAL_INT:
  354. return SIGINT;
  355. case GDB_SIGNAL_ILL:
  356. return SIGILL;
  357. case GDB_SIGNAL_ABRT:
  358. return SIGABRT;
  359. case GDB_SIGNAL_FPE:
  360. return SIGFPE;
  361. case GDB_SIGNAL_SEGV:
  362. return SIGSEGV;
  363. case GDB_SIGNAL_TERM:
  364. return SIGTERM;
  365. /* All other signals need preprocessor conditionals. */
  366. #if defined (SIGHUP)
  367. case GDB_SIGNAL_HUP:
  368. return SIGHUP;
  369. #endif
  370. #if defined (SIGQUIT)
  371. case GDB_SIGNAL_QUIT:
  372. return SIGQUIT;
  373. #endif
  374. #if defined (SIGTRAP)
  375. case GDB_SIGNAL_TRAP:
  376. return SIGTRAP;
  377. #endif
  378. #if defined (SIGEMT)
  379. case GDB_SIGNAL_EMT:
  380. return SIGEMT;
  381. #endif
  382. #if defined (SIGKILL)
  383. case GDB_SIGNAL_KILL:
  384. return SIGKILL;
  385. #endif
  386. #if defined (SIGBUS)
  387. case GDB_SIGNAL_BUS:
  388. return SIGBUS;
  389. #endif
  390. #if defined (SIGSYS)
  391. case GDB_SIGNAL_SYS:
  392. return SIGSYS;
  393. #endif
  394. #if defined (SIGPIPE)
  395. case GDB_SIGNAL_PIPE:
  396. return SIGPIPE;
  397. #endif
  398. #if defined (SIGALRM)
  399. case GDB_SIGNAL_ALRM:
  400. return SIGALRM;
  401. #endif
  402. #if defined (SIGUSR1)
  403. case GDB_SIGNAL_USR1:
  404. return SIGUSR1;
  405. #endif
  406. #if defined (SIGUSR2)
  407. case GDB_SIGNAL_USR2:
  408. return SIGUSR2;
  409. #endif
  410. #if defined (SIGCHLD) || defined (SIGCLD)
  411. case GDB_SIGNAL_CHLD:
  412. #if defined (SIGCHLD)
  413. return SIGCHLD;
  414. #else
  415. return SIGCLD;
  416. #endif
  417. #endif /* SIGCLD or SIGCHLD */
  418. #if defined (SIGPWR)
  419. case GDB_SIGNAL_PWR:
  420. return SIGPWR;
  421. #endif
  422. #if defined (SIGWINCH)
  423. case GDB_SIGNAL_WINCH:
  424. return SIGWINCH;
  425. #endif
  426. #if defined (SIGURG)
  427. case GDB_SIGNAL_URG:
  428. return SIGURG;
  429. #endif
  430. #if defined (SIGIO)
  431. case GDB_SIGNAL_IO:
  432. return SIGIO;
  433. #endif
  434. #if defined (SIGPOLL)
  435. case GDB_SIGNAL_POLL:
  436. return SIGPOLL;
  437. #endif
  438. #if defined (SIGSTOP)
  439. case GDB_SIGNAL_STOP:
  440. return SIGSTOP;
  441. #endif
  442. #if defined (SIGTSTP)
  443. case GDB_SIGNAL_TSTP:
  444. return SIGTSTP;
  445. #endif
  446. #if defined (SIGCONT)
  447. case GDB_SIGNAL_CONT:
  448. return SIGCONT;
  449. #endif
  450. #if defined (SIGTTIN)
  451. case GDB_SIGNAL_TTIN:
  452. return SIGTTIN;
  453. #endif
  454. #if defined (SIGTTOU)
  455. case GDB_SIGNAL_TTOU:
  456. return SIGTTOU;
  457. #endif
  458. #if defined (SIGVTALRM)
  459. case GDB_SIGNAL_VTALRM:
  460. return SIGVTALRM;
  461. #endif
  462. #if defined (SIGPROF)
  463. case GDB_SIGNAL_PROF:
  464. return SIGPROF;
  465. #endif
  466. #if defined (SIGXCPU)
  467. case GDB_SIGNAL_XCPU:
  468. return SIGXCPU;
  469. #endif
  470. #if defined (SIGXFSZ)
  471. case GDB_SIGNAL_XFSZ:
  472. return SIGXFSZ;
  473. #endif
  474. #if defined (SIGWIND)
  475. case GDB_SIGNAL_WIND:
  476. return SIGWIND;
  477. #endif
  478. #if defined (SIGPHONE)
  479. case GDB_SIGNAL_PHONE:
  480. return SIGPHONE;
  481. #endif
  482. #if defined (SIGLOST)
  483. case GDB_SIGNAL_LOST:
  484. return SIGLOST;
  485. #endif
  486. #if defined (SIGWAITING)
  487. case GDB_SIGNAL_WAITING:
  488. return SIGWAITING;
  489. #endif
  490. #if defined (SIGCANCEL)
  491. case GDB_SIGNAL_CANCEL:
  492. return SIGCANCEL;
  493. #endif
  494. #if defined (SIGLWP)
  495. case GDB_SIGNAL_LWP:
  496. return SIGLWP;
  497. #endif
  498. #if defined (SIGDANGER)
  499. case GDB_SIGNAL_DANGER:
  500. return SIGDANGER;
  501. #endif
  502. #if defined (SIGGRANT)
  503. case GDB_SIGNAL_GRANT:
  504. return SIGGRANT;
  505. #endif
  506. #if defined (SIGRETRACT)
  507. case GDB_SIGNAL_RETRACT:
  508. return SIGRETRACT;
  509. #endif
  510. #if defined (SIGMSG)
  511. case GDB_SIGNAL_MSG:
  512. return SIGMSG;
  513. #endif
  514. #if defined (SIGSOUND)
  515. case GDB_SIGNAL_SOUND:
  516. return SIGSOUND;
  517. #endif
  518. #if defined (SIGSAK)
  519. case GDB_SIGNAL_SAK:
  520. return SIGSAK;
  521. #endif
  522. #if defined (SIGPRIO)
  523. case GDB_SIGNAL_PRIO:
  524. return SIGPRIO;
  525. #endif
  526. /* Mach exceptions. Assumes that the values for EXC_ are positive! */
  527. #if defined (EXC_BAD_ACCESS) && defined (_NSIG)
  528. case GDB_EXC_BAD_ACCESS:
  529. return _NSIG + EXC_BAD_ACCESS;
  530. #endif
  531. #if defined (EXC_BAD_INSTRUCTION) && defined (_NSIG)
  532. case GDB_EXC_BAD_INSTRUCTION:
  533. return _NSIG + EXC_BAD_INSTRUCTION;
  534. #endif
  535. #if defined (EXC_ARITHMETIC) && defined (_NSIG)
  536. case GDB_EXC_ARITHMETIC:
  537. return _NSIG + EXC_ARITHMETIC;
  538. #endif
  539. #if defined (EXC_EMULATION) && defined (_NSIG)
  540. case GDB_EXC_EMULATION:
  541. return _NSIG + EXC_EMULATION;
  542. #endif
  543. #if defined (EXC_SOFTWARE) && defined (_NSIG)
  544. case GDB_EXC_SOFTWARE:
  545. return _NSIG + EXC_SOFTWARE;
  546. #endif
  547. #if defined (EXC_BREAKPOINT) && defined (_NSIG)
  548. case GDB_EXC_BREAKPOINT:
  549. return _NSIG + EXC_BREAKPOINT;
  550. #endif
  551. #if defined (SIGINFO)
  552. case GDB_SIGNAL_INFO:
  553. return SIGINFO;
  554. #endif
  555. #if defined (SIGLIBRT)
  556. case GDB_SIGNAL_LIBRT:
  557. return SIGLIBRT;
  558. #endif
  559. default:
  560. #if defined (REALTIME_LO)
  561. retsig = 0;
  562. if (oursig >= GDB_SIGNAL_REALTIME_33
  563. && oursig <= GDB_SIGNAL_REALTIME_63)
  564. {
  565. /* This block of signals is continuous, and
  566. GDB_SIGNAL_REALTIME_33 is 33 by definition. */
  567. retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_33 + 33;
  568. }
  569. else if (oursig == GDB_SIGNAL_REALTIME_32)
  570. {
  571. /* GDB_SIGNAL_REALTIME_32 isn't contiguous with
  572. GDB_SIGNAL_REALTIME_33. It is 32 by definition. */
  573. retsig = 32;
  574. }
  575. else if (oursig >= GDB_SIGNAL_REALTIME_64
  576. && oursig <= GDB_SIGNAL_REALTIME_127)
  577. {
  578. /* This block of signals is continuous, and
  579. GDB_SIGNAL_REALTIME_64 is 64 by definition. */
  580. retsig = (int) oursig - (int) GDB_SIGNAL_REALTIME_64 + 64;
  581. }
  582. if (retsig >= REALTIME_LO && retsig < REALTIME_HI)
  583. return retsig;
  584. #endif
  585. *oursig_ok = 0;
  586. return 0;
  587. }
  588. }
  589. int
  590. gdb_signal_to_host_p (enum gdb_signal oursig)
  591. {
  592. int oursig_ok;
  593. do_gdb_signal_to_host (oursig, &oursig_ok);
  594. return oursig_ok;
  595. }
  596. int
  597. gdb_signal_to_host (enum gdb_signal oursig)
  598. {
  599. int oursig_ok;
  600. int targ_signo = do_gdb_signal_to_host (oursig, &oursig_ok);
  601. if (!oursig_ok)
  602. {
  603. /* The user might be trying to do "signal SIGSAK" where this system
  604. doesn't have SIGSAK. */
  605. warning (_("Signal %s does not exist on this system."),
  606. gdb_signal_to_name (oursig));
  607. return 0;
  608. }
  609. else
  610. return targ_signo;
  611. }