ucontext.h 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451
  1. /* Copyright (C) 1999, 2000, 2001, 2003 Free Software Foundation, Inc.
  2. This file is part of the GNU C Library.
  3. The GNU C Library is free software; you can redistribute it and/or
  4. modify it under the terms of the GNU Library General Public License as
  5. published by the Free Software Foundation; either version 2 of the
  6. License, or (at your option) any later version.
  7. The GNU C Library is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  10. Library General Public License for more details.
  11. You should have received a copy of the GNU Library General Public
  12. License along with the GNU C Library; see the file COPYING.LIB. If not,
  13. write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  14. Boston, MA 02111-1307, USA. */
  15. #ifndef _SYS_UCONTEXT_H
  16. #define _SYS_UCONTEXT_H 1
  17. #include <features.h>
  18. #include <signal.h>
  19. /* We need the signal context definitions even if they are not used
  20. included in <signal.h>. */
  21. #include <bits/sigcontext.h>
  22. typedef unsigned long greg_t;
  23. /* Number of general registers. */
  24. #define NGREG (10+2+64)
  25. /* Container for all general registers. */
  26. typedef greg_t gregset_t[NGREG];
  27. #ifdef __USE_GNU
  28. /* Number of each register is the `gregset_t' array. */
  29. enum
  30. {
  31. PSR = 0,
  32. #define PSR PSR
  33. ISR = 1,
  34. #define ISR ISR
  35. CCR = 2,
  36. #define CCR CCR
  37. CCCR = 3,
  38. #define CCCR CCCR
  39. LR = 4,
  40. #define LR LR
  41. LCR = 5,
  42. #define LCR LCR
  43. PC = 6,
  44. #define PC PC
  45. __STATUS = 7,
  46. #define __STATUS __STATUS
  47. SYSCALLNO = 8,
  48. #define SYSCALLNO SYSCALLNO
  49. ORIG_GR8 = 9,
  50. #define ORIG_GR8 ORIG_GR8
  51. GNER0 = 10,
  52. #define GNER0 GNER0
  53. GNER1 = 11,
  54. #define GNER1 GNER1
  55. GR0 = 12,
  56. #define GR0 GR0
  57. GR1 = 13,
  58. #define GR1 GR1
  59. GR2 = 14,
  60. #define GR2 GR2
  61. GR3 = 15,
  62. #define GR3 GR3
  63. GR4 = 16,
  64. #define GR4 GR4
  65. GR5 = 17,
  66. #define GR5 GR5
  67. GR6 = 18,
  68. #define GR6 GR6
  69. GR7 = 19,
  70. #define GR7 GR7
  71. GR8 = 20,
  72. #define GR8 GR8
  73. GR9 = 21,
  74. #define GR9 GR9
  75. GR10 = 22,
  76. #define GR10 GR10
  77. GR11 = 23,
  78. #define GR11 GR11
  79. GR12 = 24,
  80. #define GR12 GR12
  81. GR13 = 25,
  82. #define GR13 GR13
  83. GR14 = 26,
  84. #define GR14 GR14
  85. GR15 = 27,
  86. #define GR15 GR15
  87. GR16 = 28,
  88. #define GR16 GR16
  89. GR17 = 29,
  90. #define GR17 GR17
  91. GR18 = 30,
  92. #define GR18 GR18
  93. GR19 = 31,
  94. #define GR19 GR19
  95. GR20 = 32,
  96. #define GR20 GR20
  97. GR21 = 33,
  98. #define GR21 GR21
  99. GR22 = 34,
  100. #define GR22 GR22
  101. GR23 = 35,
  102. #define GR23 GR23
  103. GR24 = 36,
  104. #define GR24 GR24
  105. GR25 = 37,
  106. #define GR25 GR25
  107. GR26 = 38,
  108. #define GR26 GR26
  109. GR27 = 39,
  110. #define GR27 GR27
  111. GR28 = 40,
  112. #define GR28 GR28
  113. GR29 = 41,
  114. #define GR29 GR29
  115. GR30 = 42,
  116. #define GR30 GR30
  117. GR31 = 43,
  118. #define GR31 GR31
  119. GR32 = 44,
  120. #define GR32 GR32
  121. GR33 = 45,
  122. #define GR33 GR33
  123. GR34 = 46,
  124. #define GR34 GR34
  125. GR35 = 47,
  126. #define GR35 GR35
  127. GR36 = 48,
  128. #define GR36 GR36
  129. GR37 = 49,
  130. #define GR37 GR37
  131. GR38 = 50,
  132. #define GR38 GR38
  133. GR39 = 51,
  134. #define GR39 GR39
  135. GR40 = 52,
  136. #define GR40 GR40
  137. GR41 = 53,
  138. #define GR41 GR41
  139. GR42 = 54,
  140. #define GR42 GR42
  141. GR43 = 55,
  142. #define GR43 GR43
  143. GR44 = 56,
  144. #define GR44 GR44
  145. GR45 = 57,
  146. #define GR45 GR45
  147. GR46 = 58,
  148. #define GR46 GR46
  149. GR47 = 59,
  150. #define GR47 GR47
  151. GR48 = 60,
  152. #define GR48 GR48
  153. GR49 = 61,
  154. #define GR49 GR49
  155. GR50 = 62,
  156. #define GR50 GR50
  157. GR51 = 63,
  158. #define GR51 GR51
  159. GR52 = 64,
  160. #define GR52 GR52
  161. GR53 = 65,
  162. #define GR53 GR53
  163. GR54 = 66,
  164. #define GR54 GR54
  165. GR55 = 67,
  166. #define GR55 GR55
  167. GR56 = 68,
  168. #define GR56 GR56
  169. GR57 = 69,
  170. #define GR57 GR57
  171. GR58 = 70,
  172. #define GR58 GR58
  173. GR59 = 71,
  174. #define GR59 GR59
  175. GR60 = 72,
  176. #define GR60 GR60
  177. GR61 = 73,
  178. #define GR61 GR61
  179. GR62 = 74,
  180. #define GR62 GR62
  181. GR63 = 75,
  182. #define GR63 GR63
  183. };
  184. #endif
  185. typedef unsigned long freg_t;
  186. /* Number of FPU registers. */
  187. #define NFPREG (64+2+2+8+2+1)
  188. #ifdef __USE_GNU
  189. /* Number of each register is the `gregset_t' array. */
  190. enum
  191. {
  192. FR0 = 0,
  193. #define FR0 FR0
  194. FR1 = 1,
  195. #define FR1 FR1
  196. FR2 = 2,
  197. #define FR2 FR2
  198. FR3 = 3,
  199. #define FR3 FR3
  200. FR4 = 4,
  201. #define FR4 FR4
  202. FR5 = 5,
  203. #define FR5 FR5
  204. FR6 = 6,
  205. #define FR6 FR6
  206. FR7 = 7,
  207. #define FR7 FR7
  208. FR8 = 8,
  209. #define FR8 FR8
  210. FR9 = 9,
  211. #define FR9 FR9
  212. FR10 = 10,
  213. #define FR10 FR10
  214. FR11 = 11,
  215. #define FR11 FR11
  216. FR12 = 12,
  217. #define FR12 FR12
  218. FR13 = 13,
  219. #define FR13 FR13
  220. FR14 = 14,
  221. #define FR14 FR14
  222. FR15 = 15,
  223. #define FR15 FR15
  224. FR16 = 16,
  225. #define FR16 FR16
  226. FR17 = 17,
  227. #define FR17 FR17
  228. FR18 = 18,
  229. #define FR18 FR18
  230. FR19 = 19,
  231. #define FR19 FR19
  232. FR20 = 20,
  233. #define FR20 FR20
  234. FR21 = 21,
  235. #define FR21 FR21
  236. FR22 = 22,
  237. #define FR22 FR22
  238. FR23 = 23,
  239. #define FR23 FR23
  240. FR24 = 24,
  241. #define FR24 FR24
  242. FR25 = 25,
  243. #define FR25 FR25
  244. FR26 = 26,
  245. #define FR26 FR26
  246. FR27 = 27,
  247. #define FR27 FR27
  248. FR28 = 28,
  249. #define FR28 FR28
  250. FR29 = 29,
  251. #define FR29 FR29
  252. FR30 = 30,
  253. #define FR30 FR30
  254. FR31 = 31,
  255. #define FR31 FR31
  256. FR32 = 32,
  257. #define FR32 FR32
  258. FR33 = 33,
  259. #define FR33 FR33
  260. FR34 = 34,
  261. #define FR34 FR34
  262. FR35 = 35,
  263. #define FR35 FR35
  264. FR36 = 36,
  265. #define FR36 FR36
  266. FR37 = 37,
  267. #define FR37 FR37
  268. FR38 = 38,
  269. #define FR38 FR38
  270. FR39 = 39,
  271. #define FR39 FR39
  272. FR40 = 40,
  273. #define FR40 FR40
  274. FR41 = 41,
  275. #define FR41 FR41
  276. FR42 = 42,
  277. #define FR42 FR42
  278. FR43 = 43,
  279. #define FR43 FR43
  280. FR44 = 44,
  281. #define FR44 FR44
  282. FR45 = 45,
  283. #define FR45 FR45
  284. FR46 = 46,
  285. #define FR46 FR46
  286. FR47 = 47,
  287. #define FR47 FR47
  288. FR48 = 48,
  289. #define FR48 FR48
  290. FR49 = 49,
  291. #define FR49 FR49
  292. FR50 = 50,
  293. #define FR50 FR50
  294. FR51 = 51,
  295. #define FR51 FR51
  296. FR52 = 52,
  297. #define FR52 FR52
  298. FR53 = 53,
  299. #define FR53 FR53
  300. FR54 = 54,
  301. #define FR54 FR54
  302. FR55 = 55,
  303. #define FR55 FR55
  304. FR56 = 56,
  305. #define FR56 FR56
  306. FR57 = 57,
  307. #define FR57 FR57
  308. FR58 = 58,
  309. #define FR58 FR58
  310. FR59 = 59,
  311. #define FR59 FR59
  312. FR60 = 60,
  313. #define FR60 FR60
  314. FR61 = 61,
  315. #define FR61 FR61
  316. FR62 = 62,
  317. #define FR62 FR62
  318. FR63 = 63,
  319. #define FR63 FR63
  320. FNER0 = 64,
  321. #define FNER0 FNER0
  322. FNER1 = 65,
  323. #define FNER1 FNER1
  324. MSR0 = 66,
  325. #define MSR0 MSR0
  326. MSR1 = 67,
  327. #define MSR1 MSR1
  328. ACC0 = 68,
  329. #define ACC0 ACC0
  330. ACC1 = 69,
  331. #define ACC1 ACC1
  332. ACC2 = 70,
  333. #define ACC2 ACC2
  334. ACC3 = 71,
  335. #define ACC3 ACC3
  336. ACC4 = 72,
  337. #define ACC4 ACC4
  338. ACC5 = 73,
  339. #define ACC5 ACC5
  340. ACC6 = 74,
  341. #define ACC6 ACC6
  342. ACC7 = 75,
  343. #define ACC7 ACC7
  344. ACCG0123 = 76,
  345. #define ACCG0123 ACCG0123
  346. ACCG4567 = 77,
  347. #define ACCG4567 ACCG4567
  348. FSR0 = 78,
  349. #define FSR0 FSR0
  350. };
  351. #endif
  352. /* Structure to describe FPU registers. */
  353. typedef freg_t fpregset_t[NFPREG];
  354. /* Context to describe whole processor state. */
  355. typedef struct
  356. {
  357. gregset_t gregs;
  358. fpregset_t fpregs;
  359. void *extension;
  360. unsigned long sc_oldmask; /* old sigmask */
  361. } __attribute__((aligned(8))) mcontext_t;
  362. #ifdef __USE_GNU
  363. struct kernel_user_int_regs
  364. {
  365. /* integer registers
  366. * - up to gr[31] mirror pt_regs in the kernel
  367. */
  368. unsigned long psr; /* Processor Status Register */
  369. unsigned long isr; /* Integer Status Register */
  370. unsigned long ccr; /* Condition Code Register */
  371. unsigned long cccr; /* Condition Code for Conditional Insns Register */
  372. unsigned long lr; /* Link Register */
  373. unsigned long lcr; /* Loop Count Register */
  374. unsigned long pc; /* Program Counter Register */
  375. unsigned long __status; /* exception status */
  376. unsigned long syscallno; /* syscall number or -1 */
  377. unsigned long orig_gr8; /* original syscall arg #1 */
  378. unsigned long gner[2];
  379. union {
  380. unsigned long tbr;
  381. unsigned long gr[64];
  382. };
  383. };
  384. struct kernel_user_fpmedia_regs
  385. {
  386. /* FP/Media registers */
  387. unsigned long fr[64];
  388. unsigned long fner[2];
  389. unsigned long msr[2];
  390. unsigned long acc[8];
  391. unsigned char accg[8];
  392. unsigned long fsr[1];
  393. };
  394. struct kernel_user_context
  395. {
  396. struct kernel_user_int_regs i;
  397. struct kernel_user_fpmedia_regs f;
  398. /* we provide a context extension so that we can save the regs for CPUs that
  399. * implement many more of Fujitsu's lavish register spec
  400. */
  401. void *extension;
  402. /* This is not part of the kernel's struct user_context, but
  403. rather of the enclosing struct sigcontext, but we add it
  404. here to parallel mcontext_t, just for completeness. */
  405. unsigned long sc_oldmask; /* old sigmask */
  406. } __attribute__((aligned(8)));
  407. /* This union enables alias-safe casts from mcontext_t* to the union
  408. type, that can then be dereferenced as_aliases. */
  409. union kmcontext_t
  410. {
  411. mcontext_t as_regsets;
  412. /* as_aliases is actually missing sc_oldmask, that is present in
  413. mcontext_t. */
  414. struct kernel_user_context as_aliases;
  415. };
  416. #endif
  417. /* Userlevel context. */
  418. typedef struct ucontext
  419. {
  420. unsigned long int uc_flags;
  421. struct ucontext *uc_link;
  422. stack_t uc_stack;
  423. mcontext_t uc_mcontext;
  424. __sigset_t uc_sigmask;
  425. } ucontext_t;
  426. #endif /* sys/ucontext.h */