sigcontext.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
  2. /*
  3. * Copyright (C) 2012 ARM Ltd.
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License version 2 as
  7. * published by the Free Software Foundation.
  8. *
  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. *
  14. * You should have received a copy of the GNU General Public License
  15. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  16. */
  17. #ifndef _UAPI__ASM_SIGCONTEXT_H
  18. #define _UAPI__ASM_SIGCONTEXT_H
  19. #include <linux/types.h>
  20. /*
  21. * Signal context structure - contains all info to do with the state
  22. * before the signal handler was invoked.
  23. */
  24. struct sigcontext {
  25. __u64 fault_address;
  26. /* AArch64 registers */
  27. __u64 regs[31];
  28. __u64 sp;
  29. __u64 pc;
  30. __u64 pstate;
  31. /* 4K reserved for FP/SIMD state and future expansion */
  32. __u8 __reserved[4096] __attribute__((__aligned__(16)));
  33. };
  34. /*
  35. * Allocation of __reserved[]:
  36. * (Note: records do not necessarily occur in the order shown here.)
  37. *
  38. * size description
  39. *
  40. * 0x210 fpsimd_context
  41. * 0x10 esr_context
  42. * 0x20 extra_context (optional)
  43. * 0x10 terminator (null _aarch64_ctx)
  44. *
  45. * 0xdb0 (reserved for future allocation)
  46. *
  47. * New records that can exceed this space need to be opt-in for userspace, so
  48. * that an expanded signal frame is not generated unexpectedly. The mechanism
  49. * for opting in will depend on the extension that generates each new record.
  50. * The above table documents the maximum set and sizes of records than can be
  51. * generated when userspace does not opt in for any such extension.
  52. */
  53. /*
  54. * Header to be used at the beginning of structures extending the user
  55. * context. Such structures must be placed after the rt_sigframe on the stack
  56. * and be 16-byte aligned. The last structure must be a dummy one with the
  57. * magic and size set to 0.
  58. */
  59. struct _aarch64_ctx {
  60. __u32 magic;
  61. __u32 size;
  62. };
  63. #define FPSIMD_MAGIC 0x46508001
  64. struct fpsimd_context {
  65. struct _aarch64_ctx head;
  66. __u32 fpsr;
  67. __u32 fpcr;
  68. __uint128_t vregs[32];
  69. };
  70. /* ESR_EL1 context */
  71. #define ESR_MAGIC 0x45535201
  72. struct esr_context {
  73. struct _aarch64_ctx head;
  74. __u64 esr;
  75. };
  76. /*
  77. * extra_context: describes extra space in the signal frame for
  78. * additional structures that don't fit in sigcontext.__reserved[].
  79. *
  80. * Note:
  81. *
  82. * 1) fpsimd_context, esr_context and extra_context must be placed in
  83. * sigcontext.__reserved[] if present. They cannot be placed in the
  84. * extra space. Any other record can be placed either in the extra
  85. * space or in sigcontext.__reserved[], unless otherwise specified in
  86. * this file.
  87. *
  88. * 2) There must not be more than one extra_context.
  89. *
  90. * 3) If extra_context is present, it must be followed immediately in
  91. * sigcontext.__reserved[] by the terminating null _aarch64_ctx.
  92. *
  93. * 4) The extra space to which datap points must start at the first
  94. * 16-byte aligned address immediately after the terminating null
  95. * _aarch64_ctx that follows the extra_context structure in
  96. * __reserved[]. The extra space may overrun the end of __reserved[],
  97. * as indicated by a sufficiently large value for the size field.
  98. *
  99. * 5) The extra space must itself be terminated with a null
  100. * _aarch64_ctx.
  101. */
  102. #define EXTRA_MAGIC 0x45585401
  103. struct extra_context {
  104. struct _aarch64_ctx head;
  105. __u64 datap; /* 16-byte aligned pointer to extra space cast to __u64 */
  106. __u32 size; /* size in bytes of the extra space */
  107. __u32 __reserved[3];
  108. };
  109. #endif /* _UAPI__ASM_SIGCONTEXT_H */