obsd-tdep.c 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. /* Target-dependent code for OpenBSD.
  2. Copyright (C) 2005-2022 Free Software Foundation, Inc.
  3. This file is part of GDB.
  4. This program is free software; you can redistribute it and/or modify
  5. it under the terms of the GNU General Public License as published by
  6. the Free Software Foundation; either version 3 of the License, or
  7. (at your option) any later version.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. GNU General Public License for more details.
  12. You should have received a copy of the GNU General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>. */
  14. #include "defs.h"
  15. #include "auxv.h"
  16. #include "frame.h"
  17. #include "symtab.h"
  18. #include "objfiles.h"
  19. #include "obsd-tdep.h"
  20. CORE_ADDR
  21. obsd_skip_solib_resolver (struct gdbarch *gdbarch, CORE_ADDR pc)
  22. {
  23. struct bound_minimal_symbol msym;
  24. msym = lookup_minimal_symbol("_dl_bind", NULL, NULL);
  25. if (msym.minsym && BMSYMBOL_VALUE_ADDRESS (msym) == pc)
  26. return frame_unwind_caller_pc (get_current_frame ());
  27. else
  28. return find_solib_trampoline_target (get_current_frame (), pc);
  29. }
  30. /* OpenBSD signal numbers. From <sys/signal.h>. */
  31. enum
  32. {
  33. OBSD_SIGHUP = 1,
  34. OBSD_SIGINT = 2,
  35. OBSD_SIGQUIT = 3,
  36. OBSD_SIGILL = 4,
  37. OBSD_SIGTRAP = 5,
  38. OBSD_SIGABRT = 6,
  39. OBSD_SIGEMT = 7,
  40. OBSD_SIGFPE = 8,
  41. OBSD_SIGKILL = 9,
  42. OBSD_SIGBUS = 10,
  43. OBSD_SIGSEGV = 11,
  44. OBSD_SIGSYS = 12,
  45. OBSD_SIGPIPE = 13,
  46. OBSD_SIGALRM = 14,
  47. OBSD_SIGTERM = 15,
  48. OBSD_SIGURG = 16,
  49. OBSD_SIGSTOP = 17,
  50. OBSD_SIGTSTP = 18,
  51. OBSD_SIGCONT = 19,
  52. OBSD_SIGCHLD = 20,
  53. OBSD_SIGTTIN = 21,
  54. OBSD_SIGTTOU = 22,
  55. OBSD_SIGIO = 23,
  56. OBSD_SIGXCPU = 24,
  57. OBSD_SIGXFSZ = 25,
  58. OBSD_SIGVTALRM = 26,
  59. OBSD_SIGPROF = 27,
  60. OBSD_SIGWINCH = 28,
  61. OBSD_SIGINFO = 29,
  62. OBSD_SIGUSR1 = 30,
  63. OBSD_SIGUSR2 = 31,
  64. OBSD_SIGTHR = 32,
  65. };
  66. /* Implement the "gdb_signal_from_target" gdbarch method. */
  67. static enum gdb_signal
  68. obsd_gdb_signal_from_target (struct gdbarch *gdbarch, int signal)
  69. {
  70. switch (signal)
  71. {
  72. case 0:
  73. return GDB_SIGNAL_0;
  74. case OBSD_SIGHUP:
  75. return GDB_SIGNAL_HUP;
  76. case OBSD_SIGINT:
  77. return GDB_SIGNAL_INT;
  78. case OBSD_SIGQUIT:
  79. return GDB_SIGNAL_QUIT;
  80. case OBSD_SIGILL:
  81. return GDB_SIGNAL_ILL;
  82. case OBSD_SIGTRAP:
  83. return GDB_SIGNAL_TRAP;
  84. case OBSD_SIGABRT:
  85. return GDB_SIGNAL_ABRT;
  86. case OBSD_SIGEMT:
  87. return GDB_SIGNAL_EMT;
  88. case OBSD_SIGFPE:
  89. return GDB_SIGNAL_FPE;
  90. case OBSD_SIGKILL:
  91. return GDB_SIGNAL_KILL;
  92. case OBSD_SIGBUS:
  93. return GDB_SIGNAL_BUS;
  94. case OBSD_SIGSEGV:
  95. return GDB_SIGNAL_SEGV;
  96. case OBSD_SIGSYS:
  97. return GDB_SIGNAL_SYS;
  98. case OBSD_SIGPIPE:
  99. return GDB_SIGNAL_PIPE;
  100. case OBSD_SIGALRM:
  101. return GDB_SIGNAL_ALRM;
  102. case OBSD_SIGTERM:
  103. return GDB_SIGNAL_TERM;
  104. case OBSD_SIGURG:
  105. return GDB_SIGNAL_URG;
  106. case OBSD_SIGSTOP:
  107. return GDB_SIGNAL_STOP;
  108. case OBSD_SIGTSTP:
  109. return GDB_SIGNAL_TSTP;
  110. case OBSD_SIGCONT:
  111. return GDB_SIGNAL_CONT;
  112. case OBSD_SIGCHLD:
  113. return GDB_SIGNAL_CHLD;
  114. case OBSD_SIGTTIN:
  115. return GDB_SIGNAL_TTIN;
  116. case OBSD_SIGTTOU:
  117. return GDB_SIGNAL_TTOU;
  118. case OBSD_SIGIO:
  119. return GDB_SIGNAL_IO;
  120. case OBSD_SIGXCPU:
  121. return GDB_SIGNAL_XCPU;
  122. case OBSD_SIGXFSZ:
  123. return GDB_SIGNAL_XFSZ;
  124. case OBSD_SIGVTALRM:
  125. return GDB_SIGNAL_VTALRM;
  126. case OBSD_SIGPROF:
  127. return GDB_SIGNAL_PROF;
  128. case OBSD_SIGWINCH:
  129. return GDB_SIGNAL_WINCH;
  130. case OBSD_SIGINFO:
  131. return GDB_SIGNAL_INFO;
  132. case OBSD_SIGUSR1:
  133. return GDB_SIGNAL_USR1;
  134. case OBSD_SIGUSR2:
  135. return GDB_SIGNAL_USR2;
  136. }
  137. return GDB_SIGNAL_UNKNOWN;
  138. }
  139. /* Implement the "gdb_signal_to_target" gdbarch method. */
  140. static int
  141. obsd_gdb_signal_to_target (struct gdbarch *gdbarch,
  142. enum gdb_signal signal)
  143. {
  144. switch (signal)
  145. {
  146. case GDB_SIGNAL_0:
  147. return 0;
  148. case GDB_SIGNAL_HUP:
  149. return OBSD_SIGHUP;
  150. case GDB_SIGNAL_INT:
  151. return OBSD_SIGINT;
  152. case GDB_SIGNAL_QUIT:
  153. return OBSD_SIGQUIT;
  154. case GDB_SIGNAL_ILL:
  155. return OBSD_SIGILL;
  156. case GDB_SIGNAL_TRAP:
  157. return OBSD_SIGTRAP;
  158. case GDB_SIGNAL_ABRT:
  159. return OBSD_SIGABRT;
  160. case GDB_SIGNAL_EMT:
  161. return OBSD_SIGEMT;
  162. case GDB_SIGNAL_FPE:
  163. return OBSD_SIGFPE;
  164. case GDB_SIGNAL_KILL:
  165. return OBSD_SIGKILL;
  166. case GDB_SIGNAL_BUS:
  167. return OBSD_SIGBUS;
  168. case GDB_SIGNAL_SEGV:
  169. return OBSD_SIGSEGV;
  170. case GDB_SIGNAL_SYS:
  171. return OBSD_SIGSYS;
  172. case GDB_SIGNAL_PIPE:
  173. return OBSD_SIGPIPE;
  174. case GDB_SIGNAL_ALRM:
  175. return OBSD_SIGALRM;
  176. case GDB_SIGNAL_TERM:
  177. return OBSD_SIGTERM;
  178. case GDB_SIGNAL_URG:
  179. return OBSD_SIGURG;
  180. case GDB_SIGNAL_STOP:
  181. return OBSD_SIGSTOP;
  182. case GDB_SIGNAL_TSTP:
  183. return OBSD_SIGTSTP;
  184. case GDB_SIGNAL_CONT:
  185. return OBSD_SIGCONT;
  186. case GDB_SIGNAL_CHLD:
  187. return OBSD_SIGCHLD;
  188. case GDB_SIGNAL_TTIN:
  189. return OBSD_SIGTTIN;
  190. case GDB_SIGNAL_TTOU:
  191. return OBSD_SIGTTOU;
  192. case GDB_SIGNAL_IO:
  193. return OBSD_SIGIO;
  194. case GDB_SIGNAL_XCPU:
  195. return OBSD_SIGXCPU;
  196. case GDB_SIGNAL_XFSZ:
  197. return OBSD_SIGXFSZ;
  198. case GDB_SIGNAL_VTALRM:
  199. return OBSD_SIGVTALRM;
  200. case GDB_SIGNAL_PROF:
  201. return OBSD_SIGPROF;
  202. case GDB_SIGNAL_WINCH:
  203. return OBSD_SIGWINCH;
  204. case GDB_SIGNAL_USR1:
  205. return OBSD_SIGUSR1;
  206. case GDB_SIGNAL_USR2:
  207. return OBSD_SIGUSR2;
  208. case GDB_SIGNAL_INFO:
  209. return OBSD_SIGINFO;
  210. }
  211. return -1;
  212. }
  213. void
  214. obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
  215. {
  216. set_gdbarch_gdb_signal_from_target (gdbarch,
  217. obsd_gdb_signal_from_target);
  218. set_gdbarch_gdb_signal_to_target (gdbarch,
  219. obsd_gdb_signal_to_target);
  220. set_gdbarch_auxv_parse (gdbarch, svr4_auxv_parse);
  221. }