linux-s390-ipa.cc 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463
  1. /* GNU/Linux S/390 specific low level interface, for the in-process
  2. agent library for GDB.
  3. Copyright (C) 2016-2022 Free Software Foundation, Inc.
  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 "server.h"
  16. #include <sys/mman.h>
  17. #include "tracepoint.h"
  18. #include "linux-s390-tdesc.h"
  19. #include <elf.h>
  20. #ifdef HAVE_GETAUXVAL
  21. #include <sys/auxv.h>
  22. #endif
  23. #define FT_FPR(x) (0x000 + (x) * 0x10)
  24. #define FT_VR(x) (0x000 + (x) * 0x10)
  25. #define FT_VR_L(x) (0x008 + (x) * 0x10)
  26. #define FT_GPR(x) (0x200 + (x) * 8)
  27. #define FT_GPR_U(x) (0x200 + (x) * 8)
  28. #define FT_GPR_L(x) (0x204 + (x) * 8)
  29. #define FT_GPR(x) (0x200 + (x) * 8)
  30. #define FT_ACR(x) (0x280 + (x) * 4)
  31. #define FT_PSWM 0x2c0
  32. #define FT_PSWM_U 0x2c0
  33. #define FT_PSWA 0x2c8
  34. #define FT_PSWA_L 0x2cc
  35. #define FT_FPC 0x2d0
  36. /* Mappings between registers collected by the jump pad and GDB's register
  37. array layout used by regcache.
  38. See linux-s390-low.c (s390_install_fast_tracepoint_jump_pad) for more
  39. details. */
  40. #ifndef __s390x__
  41. /* Used for s390-linux32, s390-linux32v1, s390-linux32v2. */
  42. static const int s390_linux32_ft_collect_regmap[] = {
  43. /* 32-bit PSWA and PSWM. */
  44. FT_PSWM_U, FT_PSWA_L,
  45. /* 32-bit GPRs (mapped to lower halves of 64-bit slots). */
  46. FT_GPR_L (0), FT_GPR_L (1), FT_GPR_L (2), FT_GPR_L (3),
  47. FT_GPR_L (4), FT_GPR_L (5), FT_GPR_L (6), FT_GPR_L (7),
  48. FT_GPR_L (8), FT_GPR_L (9), FT_GPR_L (10), FT_GPR_L (11),
  49. FT_GPR_L (12), FT_GPR_L (13), FT_GPR_L (14), FT_GPR_L (15),
  50. /* ACRs */
  51. FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
  52. FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
  53. FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
  54. FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
  55. /* FPRs (mapped to upper halves of 128-bit VR slots). */
  56. FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
  57. FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
  58. FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
  59. FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
  60. /* orig_r2, last_break, system_call */
  61. -1, -1, -1,
  62. };
  63. /* Used for s390-linux64, s390-linux64v1, s390-linux64v2, s390-vx-linux64. */
  64. static const int s390_linux64_ft_collect_regmap[] = {
  65. /* 32-bit PSWA and PSWM. */
  66. FT_PSWM_U, FT_PSWA_L,
  67. /* 32-bit halves of 64-bit GPRs. */
  68. FT_GPR_U (0), FT_GPR_L (0),
  69. FT_GPR_U (1), FT_GPR_L (1),
  70. FT_GPR_U (2), FT_GPR_L (2),
  71. FT_GPR_U (3), FT_GPR_L (3),
  72. FT_GPR_U (4), FT_GPR_L (4),
  73. FT_GPR_U (5), FT_GPR_L (5),
  74. FT_GPR_U (6), FT_GPR_L (6),
  75. FT_GPR_U (7), FT_GPR_L (7),
  76. FT_GPR_U (8), FT_GPR_L (8),
  77. FT_GPR_U (9), FT_GPR_L (9),
  78. FT_GPR_U (10), FT_GPR_L (10),
  79. FT_GPR_U (11), FT_GPR_L (11),
  80. FT_GPR_U (12), FT_GPR_L (12),
  81. FT_GPR_U (13), FT_GPR_L (13),
  82. FT_GPR_U (14), FT_GPR_L (14),
  83. FT_GPR_U (15), FT_GPR_L (15),
  84. /* ACRs */
  85. FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
  86. FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
  87. FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
  88. FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
  89. /* FPRs (mapped to upper halves of 128-bit VR slots). */
  90. FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
  91. FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
  92. FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
  93. FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
  94. /* orig_r2, last_break, system_call */
  95. -1, -1, -1,
  96. /* Lower halves of 128-bit VRs. */
  97. FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3),
  98. FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7),
  99. FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11),
  100. FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15),
  101. /* And the next 16 VRs. */
  102. FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19),
  103. FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23),
  104. FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27),
  105. FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31),
  106. };
  107. /* Used for s390-te-linux64, s390-tevx-linux64, and s390-gs-linux64. */
  108. static const int s390_te_linux64_ft_collect_regmap[] = {
  109. /* 32-bit PSWA and PSWM. */
  110. FT_PSWM_U, FT_PSWA_L,
  111. /* 32-bit halves of 64-bit GPRs. */
  112. FT_GPR_U (0), FT_GPR_L (0),
  113. FT_GPR_U (1), FT_GPR_L (1),
  114. FT_GPR_U (2), FT_GPR_L (2),
  115. FT_GPR_U (3), FT_GPR_L (3),
  116. FT_GPR_U (4), FT_GPR_L (4),
  117. FT_GPR_U (5), FT_GPR_L (5),
  118. FT_GPR_U (6), FT_GPR_L (6),
  119. FT_GPR_U (7), FT_GPR_L (7),
  120. FT_GPR_U (8), FT_GPR_L (8),
  121. FT_GPR_U (9), FT_GPR_L (9),
  122. FT_GPR_U (10), FT_GPR_L (10),
  123. FT_GPR_U (11), FT_GPR_L (11),
  124. FT_GPR_U (12), FT_GPR_L (12),
  125. FT_GPR_U (13), FT_GPR_L (13),
  126. FT_GPR_U (14), FT_GPR_L (14),
  127. FT_GPR_U (15), FT_GPR_L (15),
  128. /* ACRs */
  129. FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
  130. FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
  131. FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
  132. FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
  133. /* FPRs (mapped to upper halves of 128-bit VR slots). */
  134. FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
  135. FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
  136. FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
  137. FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
  138. /* orig_r2, last_break, system_call */
  139. -1, -1, -1,
  140. /* TDB */
  141. -1, -1, -1, -1,
  142. -1, -1, -1, -1,
  143. -1, -1, -1, -1,
  144. -1, -1, -1, -1,
  145. -1, -1, -1, -1,
  146. /* Lower halves of 128-bit VRs. */
  147. FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3),
  148. FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7),
  149. FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11),
  150. FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15),
  151. /* And the next 16 VRs. */
  152. FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19),
  153. FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23),
  154. FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27),
  155. FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31),
  156. };
  157. #else /* __s390x__ */
  158. /* Used for s390x-linux64, s390x-linux64v1, s390x-linux64v2, s390x-vx-linux64. */
  159. static const int s390x_ft_collect_regmap[] = {
  160. /* 64-bit PSWA and PSWM. */
  161. FT_PSWM, FT_PSWA,
  162. /* 64-bit GPRs. */
  163. FT_GPR (0), FT_GPR (1), FT_GPR (2), FT_GPR (3),
  164. FT_GPR (4), FT_GPR (5), FT_GPR (6), FT_GPR (7),
  165. FT_GPR (8), FT_GPR (9), FT_GPR (10), FT_GPR (11),
  166. FT_GPR (12), FT_GPR (13), FT_GPR (14), FT_GPR (15),
  167. /* ACRs */
  168. FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
  169. FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
  170. FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
  171. FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
  172. /* FPRs (mapped to upper halves of 128-bit VR slots). */
  173. FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
  174. FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
  175. FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
  176. FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
  177. /* orig_r2, last_break, system_call */
  178. -1, -1, -1,
  179. /* Lower halves of 128-bit VRs. */
  180. FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3),
  181. FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7),
  182. FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11),
  183. FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15),
  184. /* And the next 16 VRs. */
  185. FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19),
  186. FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23),
  187. FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27),
  188. FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31),
  189. };
  190. /* Used for s390x-te-linux64, s390x-tevx-linux64, and
  191. s390x-gs-linux64. */
  192. static const int s390x_te_ft_collect_regmap[] = {
  193. /* 64-bit PSWA and PSWM. */
  194. FT_PSWM, FT_PSWA,
  195. /* 64-bit GPRs. */
  196. FT_GPR (0), FT_GPR (1), FT_GPR (2), FT_GPR (3),
  197. FT_GPR (4), FT_GPR (5), FT_GPR (6), FT_GPR (7),
  198. FT_GPR (8), FT_GPR (9), FT_GPR (10), FT_GPR (11),
  199. FT_GPR (12), FT_GPR (13), FT_GPR (14), FT_GPR (15),
  200. /* ACRs */
  201. FT_ACR (0), FT_ACR (1), FT_ACR (2), FT_ACR (3),
  202. FT_ACR (4), FT_ACR (5), FT_ACR (6), FT_ACR (7),
  203. FT_ACR (8), FT_ACR (9), FT_ACR (10), FT_ACR (11),
  204. FT_ACR (12), FT_ACR (13), FT_ACR (14), FT_ACR (15),
  205. /* FPRs (mapped to upper halves of 128-bit VR slots). */
  206. FT_FPR (0), FT_FPR (1), FT_FPR (2), FT_FPR (3),
  207. FT_FPR (4), FT_FPR (5), FT_FPR (6), FT_FPR (7),
  208. FT_FPR (8), FT_FPR (9), FT_FPR (10), FT_FPR (11),
  209. FT_FPR (12), FT_FPR (13), FT_FPR (14), FT_FPR (15),
  210. /* orig_r2, last_break, system_call */
  211. -1, -1, -1,
  212. /* TDB */
  213. -1, -1, -1, -1,
  214. -1, -1, -1, -1,
  215. -1, -1, -1, -1,
  216. -1, -1, -1, -1,
  217. -1, -1, -1, -1,
  218. /* Lower halves of 128-bit VRs. */
  219. FT_VR_L (0), FT_VR_L (1), FT_VR_L (2), FT_VR_L (3),
  220. FT_VR_L (4), FT_VR_L (5), FT_VR_L (6), FT_VR_L (7),
  221. FT_VR_L (8), FT_VR_L (9), FT_VR_L (10), FT_VR_L (11),
  222. FT_VR_L (12), FT_VR_L (13), FT_VR_L (14), FT_VR_L (15),
  223. /* And the next 16 VRs. */
  224. FT_VR (16), FT_VR (17), FT_VR (18), FT_VR (19),
  225. FT_VR (20), FT_VR (21), FT_VR (22), FT_VR (23),
  226. FT_VR (24), FT_VR (25), FT_VR (26), FT_VR (27),
  227. FT_VR (28), FT_VR (29), FT_VR (30), FT_VR (31),
  228. };
  229. #endif
  230. /* Initialized by get_ipa_tdesc according to the tdesc in use. */
  231. static const int *s390_regmap;
  232. static int s390_regnum;
  233. /* Fill in REGCACHE with registers saved by the jump pad in BUF. */
  234. void
  235. supply_fast_tracepoint_registers (struct regcache *regcache,
  236. const unsigned char *buf)
  237. {
  238. int i;
  239. for (i = 0; i < s390_regnum; i++)
  240. if (s390_regmap[i] != -1)
  241. supply_register (regcache, i, ((char *) buf) + s390_regmap[i]);
  242. }
  243. ULONGEST
  244. get_raw_reg (const unsigned char *raw_regs, int regnum)
  245. {
  246. int offset;
  247. if (regnum >= s390_regnum)
  248. return 0;
  249. offset = s390_regmap[regnum];
  250. if (offset == -1)
  251. return 0;
  252. /* The regnums are variable, better to figure out size by FT offset. */
  253. /* 64-bit ones. */
  254. if (offset < FT_VR(16)
  255. #ifdef __s390x__
  256. || (offset >= FT_GPR(0) && offset < FT_ACR(0))
  257. || offset == FT_PSWM
  258. || offset == FT_PSWA
  259. #endif
  260. )
  261. return *(uint64_t *) (raw_regs + offset);
  262. if (offset >= FT_ACR(0 && offset < FT_PSWM)
  263. || offset == FT_FPC
  264. #ifndef __s390x__
  265. || (offset >= FT_GPR(0) && offset < FT_ACR(0))
  266. || offset == FT_PSWM_U
  267. || offset == FT_PSWA_L
  268. #endif
  269. )
  270. return *(uint32_t *) (raw_regs + offset);
  271. /* This leaves 128-bit VX. No way to return them. */
  272. return 0;
  273. }
  274. /* Return target_desc to use for IPA, given the tdesc index passed by
  275. gdbserver. For s390, it also sets s390_regmap and s390_regnum. */
  276. const struct target_desc *
  277. get_ipa_tdesc (int idx)
  278. {
  279. #define SET_REGMAP(regmap, skip_last) \
  280. do { \
  281. s390_regmap = regmap; \
  282. s390_regnum = (sizeof regmap / sizeof regmap[0]) - skip_last; \
  283. } while(0)
  284. switch (idx)
  285. {
  286. #ifdef __s390x__
  287. case S390_TDESC_64:
  288. /* Subtract number of VX regs. */
  289. SET_REGMAP(s390x_ft_collect_regmap, 32);
  290. return tdesc_s390x_linux64;
  291. case S390_TDESC_64V1:
  292. SET_REGMAP(s390x_ft_collect_regmap, 32);
  293. return tdesc_s390x_linux64v1;
  294. case S390_TDESC_64V2:
  295. SET_REGMAP(s390x_ft_collect_regmap, 32);
  296. return tdesc_s390x_linux64v2;
  297. case S390_TDESC_TE:
  298. SET_REGMAP(s390x_te_ft_collect_regmap, 32);
  299. return tdesc_s390x_te_linux64;
  300. case S390_TDESC_VX:
  301. SET_REGMAP(s390x_ft_collect_regmap, 0);
  302. return tdesc_s390x_vx_linux64;
  303. case S390_TDESC_TEVX:
  304. SET_REGMAP(s390x_te_ft_collect_regmap, 0);
  305. return tdesc_s390x_tevx_linux64;
  306. case S390_TDESC_GS:
  307. SET_REGMAP(s390x_te_ft_collect_regmap, 0);
  308. return tdesc_s390x_gs_linux64;
  309. #else
  310. case S390_TDESC_32:
  311. SET_REGMAP(s390_linux32_ft_collect_regmap, 0);
  312. return tdesc_s390_linux32;
  313. case S390_TDESC_32V1:
  314. SET_REGMAP(s390_linux32_ft_collect_regmap, 0);
  315. return tdesc_s390_linux32v1;
  316. case S390_TDESC_32V2:
  317. SET_REGMAP(s390_linux32_ft_collect_regmap, 0);
  318. return tdesc_s390_linux32v2;
  319. case S390_TDESC_64:
  320. SET_REGMAP(s390_linux64_ft_collect_regmap, 32);
  321. return tdesc_s390_linux64;
  322. case S390_TDESC_64V1:
  323. SET_REGMAP(s390_linux64_ft_collect_regmap, 32);
  324. return tdesc_s390_linux64v1;
  325. case S390_TDESC_64V2:
  326. SET_REGMAP(s390_linux64_ft_collect_regmap, 32);
  327. return tdesc_s390_linux64v2;
  328. case S390_TDESC_TE:
  329. SET_REGMAP(s390_te_linux64_ft_collect_regmap, 32);
  330. return tdesc_s390_te_linux64;
  331. case S390_TDESC_VX:
  332. SET_REGMAP(s390_linux64_ft_collect_regmap, 0);
  333. return tdesc_s390_vx_linux64;
  334. case S390_TDESC_TEVX:
  335. SET_REGMAP(s390_te_linux64_ft_collect_regmap, 0);
  336. return tdesc_s390_tevx_linux64;
  337. case S390_TDESC_GS:
  338. SET_REGMAP(s390_te_linux64_ft_collect_regmap, 0);
  339. return tdesc_s390_gs_linux64;
  340. #endif
  341. default:
  342. internal_error (__FILE__, __LINE__,
  343. "unknown ipa tdesc index: %d", idx);
  344. #ifdef __s390x__
  345. return tdesc_s390x_linux64;
  346. #else
  347. return tdesc_s390_linux32;
  348. #endif
  349. }
  350. }
  351. /* Allocate buffer for the jump pads. On 31-bit, JG reaches everywhere,
  352. so just allocate normally. On 64-bit, we have +/-4GiB of reach, and
  353. the executable is usually mapped at 0x80000000 - aim for somewhere
  354. below it. */
  355. void *
  356. alloc_jump_pad_buffer (size_t size)
  357. {
  358. #ifdef __s390x__
  359. uintptr_t addr;
  360. uintptr_t exec_base = getauxval (AT_PHDR);
  361. int pagesize;
  362. void *res;
  363. if (exec_base == 0)
  364. exec_base = 0x80000000;
  365. pagesize = sysconf (_SC_PAGE_SIZE);
  366. if (pagesize == -1)
  367. perror_with_name ("sysconf");
  368. addr = exec_base - size;
  369. /* size should already be page-aligned, but this can't hurt. */
  370. addr &= ~(pagesize - 1);
  371. /* Search for a free area. If we hit 0, we're out of luck. */
  372. for (; addr; addr -= pagesize)
  373. {
  374. /* No MAP_FIXED - we don't want to zap someone's mapping. */
  375. res = mmap ((void *) addr, size,
  376. PROT_READ | PROT_WRITE | PROT_EXEC,
  377. MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  378. /* If we got what we wanted, return. */
  379. if ((uintptr_t) res == addr)
  380. return res;
  381. /* If we got a mapping, but at a wrong address, undo it. */
  382. if (res != MAP_FAILED)
  383. munmap (res, size);
  384. }
  385. return NULL;
  386. #else
  387. void *res = mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_EXEC,
  388. MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
  389. if (res == MAP_FAILED)
  390. return NULL;
  391. return res;
  392. #endif
  393. }
  394. void
  395. initialize_low_tracepoint (void)
  396. {
  397. #ifdef __s390x__
  398. init_registers_s390x_linux64 ();
  399. init_registers_s390x_linux64v1 ();
  400. init_registers_s390x_linux64v2 ();
  401. init_registers_s390x_te_linux64 ();
  402. init_registers_s390x_vx_linux64 ();
  403. init_registers_s390x_tevx_linux64 ();
  404. init_registers_s390x_gs_linux64 ();
  405. #else
  406. init_registers_s390_linux32 ();
  407. init_registers_s390_linux32v1 ();
  408. init_registers_s390_linux32v2 ();
  409. init_registers_s390_linux64 ();
  410. init_registers_s390_linux64v1 ();
  411. init_registers_s390_linux64v2 ();
  412. init_registers_s390_te_linux64 ();
  413. init_registers_s390_vx_linux64 ();
  414. init_registers_s390_tevx_linux64 ();
  415. init_registers_s390_gs_linux64 ();
  416. #endif
  417. }