asm-offsets.c 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  1. // SPDX-License-Identifier: GPL-2.0-only
  2. /*
  3. * Copyright (C) 2012 Regents of the University of California
  4. * Copyright (C) 2017 SiFive
  5. */
  6. #define GENERATING_ASM_OFFSETS
  7. #include <linux/kbuild.h>
  8. #include <linux/mm.h>
  9. #include <linux/sched.h>
  10. #include <asm/kvm_host.h>
  11. #include <asm/thread_info.h>
  12. #include <asm/ptrace.h>
  13. #include <asm/cpu_ops_sbi.h>
  14. #include <asm/suspend.h>
  15. void asm_offsets(void);
  16. void asm_offsets(void)
  17. {
  18. OFFSET(TASK_THREAD_RA, task_struct, thread.ra);
  19. OFFSET(TASK_THREAD_SP, task_struct, thread.sp);
  20. OFFSET(TASK_THREAD_S0, task_struct, thread.s[0]);
  21. OFFSET(TASK_THREAD_S1, task_struct, thread.s[1]);
  22. OFFSET(TASK_THREAD_S2, task_struct, thread.s[2]);
  23. OFFSET(TASK_THREAD_S3, task_struct, thread.s[3]);
  24. OFFSET(TASK_THREAD_S4, task_struct, thread.s[4]);
  25. OFFSET(TASK_THREAD_S5, task_struct, thread.s[5]);
  26. OFFSET(TASK_THREAD_S6, task_struct, thread.s[6]);
  27. OFFSET(TASK_THREAD_S7, task_struct, thread.s[7]);
  28. OFFSET(TASK_THREAD_S8, task_struct, thread.s[8]);
  29. OFFSET(TASK_THREAD_S9, task_struct, thread.s[9]);
  30. OFFSET(TASK_THREAD_S10, task_struct, thread.s[10]);
  31. OFFSET(TASK_THREAD_S11, task_struct, thread.s[11]);
  32. OFFSET(TASK_TI_FLAGS, task_struct, thread_info.flags);
  33. OFFSET(TASK_TI_PREEMPT_COUNT, task_struct, thread_info.preempt_count);
  34. OFFSET(TASK_TI_KERNEL_SP, task_struct, thread_info.kernel_sp);
  35. OFFSET(TASK_TI_USER_SP, task_struct, thread_info.user_sp);
  36. OFFSET(TASK_THREAD_F0, task_struct, thread.fstate.f[0]);
  37. OFFSET(TASK_THREAD_F1, task_struct, thread.fstate.f[1]);
  38. OFFSET(TASK_THREAD_F2, task_struct, thread.fstate.f[2]);
  39. OFFSET(TASK_THREAD_F3, task_struct, thread.fstate.f[3]);
  40. OFFSET(TASK_THREAD_F4, task_struct, thread.fstate.f[4]);
  41. OFFSET(TASK_THREAD_F5, task_struct, thread.fstate.f[5]);
  42. OFFSET(TASK_THREAD_F6, task_struct, thread.fstate.f[6]);
  43. OFFSET(TASK_THREAD_F7, task_struct, thread.fstate.f[7]);
  44. OFFSET(TASK_THREAD_F8, task_struct, thread.fstate.f[8]);
  45. OFFSET(TASK_THREAD_F9, task_struct, thread.fstate.f[9]);
  46. OFFSET(TASK_THREAD_F10, task_struct, thread.fstate.f[10]);
  47. OFFSET(TASK_THREAD_F11, task_struct, thread.fstate.f[11]);
  48. OFFSET(TASK_THREAD_F12, task_struct, thread.fstate.f[12]);
  49. OFFSET(TASK_THREAD_F13, task_struct, thread.fstate.f[13]);
  50. OFFSET(TASK_THREAD_F14, task_struct, thread.fstate.f[14]);
  51. OFFSET(TASK_THREAD_F15, task_struct, thread.fstate.f[15]);
  52. OFFSET(TASK_THREAD_F16, task_struct, thread.fstate.f[16]);
  53. OFFSET(TASK_THREAD_F17, task_struct, thread.fstate.f[17]);
  54. OFFSET(TASK_THREAD_F18, task_struct, thread.fstate.f[18]);
  55. OFFSET(TASK_THREAD_F19, task_struct, thread.fstate.f[19]);
  56. OFFSET(TASK_THREAD_F20, task_struct, thread.fstate.f[20]);
  57. OFFSET(TASK_THREAD_F21, task_struct, thread.fstate.f[21]);
  58. OFFSET(TASK_THREAD_F22, task_struct, thread.fstate.f[22]);
  59. OFFSET(TASK_THREAD_F23, task_struct, thread.fstate.f[23]);
  60. OFFSET(TASK_THREAD_F24, task_struct, thread.fstate.f[24]);
  61. OFFSET(TASK_THREAD_F25, task_struct, thread.fstate.f[25]);
  62. OFFSET(TASK_THREAD_F26, task_struct, thread.fstate.f[26]);
  63. OFFSET(TASK_THREAD_F27, task_struct, thread.fstate.f[27]);
  64. OFFSET(TASK_THREAD_F28, task_struct, thread.fstate.f[28]);
  65. OFFSET(TASK_THREAD_F29, task_struct, thread.fstate.f[29]);
  66. OFFSET(TASK_THREAD_F30, task_struct, thread.fstate.f[30]);
  67. OFFSET(TASK_THREAD_F31, task_struct, thread.fstate.f[31]);
  68. OFFSET(TASK_THREAD_FCSR, task_struct, thread.fstate.fcsr);
  69. #ifdef CONFIG_STACKPROTECTOR
  70. OFFSET(TSK_STACK_CANARY, task_struct, stack_canary);
  71. #endif
  72. DEFINE(PT_SIZE, sizeof(struct pt_regs));
  73. OFFSET(PT_EPC, pt_regs, epc);
  74. OFFSET(PT_RA, pt_regs, ra);
  75. OFFSET(PT_FP, pt_regs, s0);
  76. OFFSET(PT_S0, pt_regs, s0);
  77. OFFSET(PT_S1, pt_regs, s1);
  78. OFFSET(PT_S2, pt_regs, s2);
  79. OFFSET(PT_S3, pt_regs, s3);
  80. OFFSET(PT_S4, pt_regs, s4);
  81. OFFSET(PT_S5, pt_regs, s5);
  82. OFFSET(PT_S6, pt_regs, s6);
  83. OFFSET(PT_S7, pt_regs, s7);
  84. OFFSET(PT_S8, pt_regs, s8);
  85. OFFSET(PT_S9, pt_regs, s9);
  86. OFFSET(PT_S10, pt_regs, s10);
  87. OFFSET(PT_S11, pt_regs, s11);
  88. OFFSET(PT_SP, pt_regs, sp);
  89. OFFSET(PT_TP, pt_regs, tp);
  90. OFFSET(PT_A0, pt_regs, a0);
  91. OFFSET(PT_A1, pt_regs, a1);
  92. OFFSET(PT_A2, pt_regs, a2);
  93. OFFSET(PT_A3, pt_regs, a3);
  94. OFFSET(PT_A4, pt_regs, a4);
  95. OFFSET(PT_A5, pt_regs, a5);
  96. OFFSET(PT_A6, pt_regs, a6);
  97. OFFSET(PT_A7, pt_regs, a7);
  98. OFFSET(PT_T0, pt_regs, t0);
  99. OFFSET(PT_T1, pt_regs, t1);
  100. OFFSET(PT_T2, pt_regs, t2);
  101. OFFSET(PT_T3, pt_regs, t3);
  102. OFFSET(PT_T4, pt_regs, t4);
  103. OFFSET(PT_T5, pt_regs, t5);
  104. OFFSET(PT_T6, pt_regs, t6);
  105. OFFSET(PT_GP, pt_regs, gp);
  106. OFFSET(PT_ORIG_A0, pt_regs, orig_a0);
  107. OFFSET(PT_STATUS, pt_regs, status);
  108. OFFSET(PT_BADADDR, pt_regs, badaddr);
  109. OFFSET(PT_CAUSE, pt_regs, cause);
  110. OFFSET(SUSPEND_CONTEXT_REGS, suspend_context, regs);
  111. OFFSET(KVM_ARCH_GUEST_ZERO, kvm_vcpu_arch, guest_context.zero);
  112. OFFSET(KVM_ARCH_GUEST_RA, kvm_vcpu_arch, guest_context.ra);
  113. OFFSET(KVM_ARCH_GUEST_SP, kvm_vcpu_arch, guest_context.sp);
  114. OFFSET(KVM_ARCH_GUEST_GP, kvm_vcpu_arch, guest_context.gp);
  115. OFFSET(KVM_ARCH_GUEST_TP, kvm_vcpu_arch, guest_context.tp);
  116. OFFSET(KVM_ARCH_GUEST_T0, kvm_vcpu_arch, guest_context.t0);
  117. OFFSET(KVM_ARCH_GUEST_T1, kvm_vcpu_arch, guest_context.t1);
  118. OFFSET(KVM_ARCH_GUEST_T2, kvm_vcpu_arch, guest_context.t2);
  119. OFFSET(KVM_ARCH_GUEST_S0, kvm_vcpu_arch, guest_context.s0);
  120. OFFSET(KVM_ARCH_GUEST_S1, kvm_vcpu_arch, guest_context.s1);
  121. OFFSET(KVM_ARCH_GUEST_A0, kvm_vcpu_arch, guest_context.a0);
  122. OFFSET(KVM_ARCH_GUEST_A1, kvm_vcpu_arch, guest_context.a1);
  123. OFFSET(KVM_ARCH_GUEST_A2, kvm_vcpu_arch, guest_context.a2);
  124. OFFSET(KVM_ARCH_GUEST_A3, kvm_vcpu_arch, guest_context.a3);
  125. OFFSET(KVM_ARCH_GUEST_A4, kvm_vcpu_arch, guest_context.a4);
  126. OFFSET(KVM_ARCH_GUEST_A5, kvm_vcpu_arch, guest_context.a5);
  127. OFFSET(KVM_ARCH_GUEST_A6, kvm_vcpu_arch, guest_context.a6);
  128. OFFSET(KVM_ARCH_GUEST_A7, kvm_vcpu_arch, guest_context.a7);
  129. OFFSET(KVM_ARCH_GUEST_S2, kvm_vcpu_arch, guest_context.s2);
  130. OFFSET(KVM_ARCH_GUEST_S3, kvm_vcpu_arch, guest_context.s3);
  131. OFFSET(KVM_ARCH_GUEST_S4, kvm_vcpu_arch, guest_context.s4);
  132. OFFSET(KVM_ARCH_GUEST_S5, kvm_vcpu_arch, guest_context.s5);
  133. OFFSET(KVM_ARCH_GUEST_S6, kvm_vcpu_arch, guest_context.s6);
  134. OFFSET(KVM_ARCH_GUEST_S7, kvm_vcpu_arch, guest_context.s7);
  135. OFFSET(KVM_ARCH_GUEST_S8, kvm_vcpu_arch, guest_context.s8);
  136. OFFSET(KVM_ARCH_GUEST_S9, kvm_vcpu_arch, guest_context.s9);
  137. OFFSET(KVM_ARCH_GUEST_S10, kvm_vcpu_arch, guest_context.s10);
  138. OFFSET(KVM_ARCH_GUEST_S11, kvm_vcpu_arch, guest_context.s11);
  139. OFFSET(KVM_ARCH_GUEST_T3, kvm_vcpu_arch, guest_context.t3);
  140. OFFSET(KVM_ARCH_GUEST_T4, kvm_vcpu_arch, guest_context.t4);
  141. OFFSET(KVM_ARCH_GUEST_T5, kvm_vcpu_arch, guest_context.t5);
  142. OFFSET(KVM_ARCH_GUEST_T6, kvm_vcpu_arch, guest_context.t6);
  143. OFFSET(KVM_ARCH_GUEST_SEPC, kvm_vcpu_arch, guest_context.sepc);
  144. OFFSET(KVM_ARCH_GUEST_SSTATUS, kvm_vcpu_arch, guest_context.sstatus);
  145. OFFSET(KVM_ARCH_GUEST_HSTATUS, kvm_vcpu_arch, guest_context.hstatus);
  146. OFFSET(KVM_ARCH_GUEST_SCOUNTEREN, kvm_vcpu_arch, guest_csr.scounteren);
  147. OFFSET(KVM_ARCH_HOST_ZERO, kvm_vcpu_arch, host_context.zero);
  148. OFFSET(KVM_ARCH_HOST_RA, kvm_vcpu_arch, host_context.ra);
  149. OFFSET(KVM_ARCH_HOST_SP, kvm_vcpu_arch, host_context.sp);
  150. OFFSET(KVM_ARCH_HOST_GP, kvm_vcpu_arch, host_context.gp);
  151. OFFSET(KVM_ARCH_HOST_TP, kvm_vcpu_arch, host_context.tp);
  152. OFFSET(KVM_ARCH_HOST_T0, kvm_vcpu_arch, host_context.t0);
  153. OFFSET(KVM_ARCH_HOST_T1, kvm_vcpu_arch, host_context.t1);
  154. OFFSET(KVM_ARCH_HOST_T2, kvm_vcpu_arch, host_context.t2);
  155. OFFSET(KVM_ARCH_HOST_S0, kvm_vcpu_arch, host_context.s0);
  156. OFFSET(KVM_ARCH_HOST_S1, kvm_vcpu_arch, host_context.s1);
  157. OFFSET(KVM_ARCH_HOST_A0, kvm_vcpu_arch, host_context.a0);
  158. OFFSET(KVM_ARCH_HOST_A1, kvm_vcpu_arch, host_context.a1);
  159. OFFSET(KVM_ARCH_HOST_A2, kvm_vcpu_arch, host_context.a2);
  160. OFFSET(KVM_ARCH_HOST_A3, kvm_vcpu_arch, host_context.a3);
  161. OFFSET(KVM_ARCH_HOST_A4, kvm_vcpu_arch, host_context.a4);
  162. OFFSET(KVM_ARCH_HOST_A5, kvm_vcpu_arch, host_context.a5);
  163. OFFSET(KVM_ARCH_HOST_A6, kvm_vcpu_arch, host_context.a6);
  164. OFFSET(KVM_ARCH_HOST_A7, kvm_vcpu_arch, host_context.a7);
  165. OFFSET(KVM_ARCH_HOST_S2, kvm_vcpu_arch, host_context.s2);
  166. OFFSET(KVM_ARCH_HOST_S3, kvm_vcpu_arch, host_context.s3);
  167. OFFSET(KVM_ARCH_HOST_S4, kvm_vcpu_arch, host_context.s4);
  168. OFFSET(KVM_ARCH_HOST_S5, kvm_vcpu_arch, host_context.s5);
  169. OFFSET(KVM_ARCH_HOST_S6, kvm_vcpu_arch, host_context.s6);
  170. OFFSET(KVM_ARCH_HOST_S7, kvm_vcpu_arch, host_context.s7);
  171. OFFSET(KVM_ARCH_HOST_S8, kvm_vcpu_arch, host_context.s8);
  172. OFFSET(KVM_ARCH_HOST_S9, kvm_vcpu_arch, host_context.s9);
  173. OFFSET(KVM_ARCH_HOST_S10, kvm_vcpu_arch, host_context.s10);
  174. OFFSET(KVM_ARCH_HOST_S11, kvm_vcpu_arch, host_context.s11);
  175. OFFSET(KVM_ARCH_HOST_T3, kvm_vcpu_arch, host_context.t3);
  176. OFFSET(KVM_ARCH_HOST_T4, kvm_vcpu_arch, host_context.t4);
  177. OFFSET(KVM_ARCH_HOST_T5, kvm_vcpu_arch, host_context.t5);
  178. OFFSET(KVM_ARCH_HOST_T6, kvm_vcpu_arch, host_context.t6);
  179. OFFSET(KVM_ARCH_HOST_SEPC, kvm_vcpu_arch, host_context.sepc);
  180. OFFSET(KVM_ARCH_HOST_SSTATUS, kvm_vcpu_arch, host_context.sstatus);
  181. OFFSET(KVM_ARCH_HOST_HSTATUS, kvm_vcpu_arch, host_context.hstatus);
  182. OFFSET(KVM_ARCH_HOST_SSCRATCH, kvm_vcpu_arch, host_sscratch);
  183. OFFSET(KVM_ARCH_HOST_STVEC, kvm_vcpu_arch, host_stvec);
  184. OFFSET(KVM_ARCH_HOST_SCOUNTEREN, kvm_vcpu_arch, host_scounteren);
  185. OFFSET(KVM_ARCH_TRAP_SEPC, kvm_cpu_trap, sepc);
  186. OFFSET(KVM_ARCH_TRAP_SCAUSE, kvm_cpu_trap, scause);
  187. OFFSET(KVM_ARCH_TRAP_STVAL, kvm_cpu_trap, stval);
  188. OFFSET(KVM_ARCH_TRAP_HTVAL, kvm_cpu_trap, htval);
  189. OFFSET(KVM_ARCH_TRAP_HTINST, kvm_cpu_trap, htinst);
  190. /* F extension */
  191. OFFSET(KVM_ARCH_FP_F_F0, kvm_cpu_context, fp.f.f[0]);
  192. OFFSET(KVM_ARCH_FP_F_F1, kvm_cpu_context, fp.f.f[1]);
  193. OFFSET(KVM_ARCH_FP_F_F2, kvm_cpu_context, fp.f.f[2]);
  194. OFFSET(KVM_ARCH_FP_F_F3, kvm_cpu_context, fp.f.f[3]);
  195. OFFSET(KVM_ARCH_FP_F_F4, kvm_cpu_context, fp.f.f[4]);
  196. OFFSET(KVM_ARCH_FP_F_F5, kvm_cpu_context, fp.f.f[5]);
  197. OFFSET(KVM_ARCH_FP_F_F6, kvm_cpu_context, fp.f.f[6]);
  198. OFFSET(KVM_ARCH_FP_F_F7, kvm_cpu_context, fp.f.f[7]);
  199. OFFSET(KVM_ARCH_FP_F_F8, kvm_cpu_context, fp.f.f[8]);
  200. OFFSET(KVM_ARCH_FP_F_F9, kvm_cpu_context, fp.f.f[9]);
  201. OFFSET(KVM_ARCH_FP_F_F10, kvm_cpu_context, fp.f.f[10]);
  202. OFFSET(KVM_ARCH_FP_F_F11, kvm_cpu_context, fp.f.f[11]);
  203. OFFSET(KVM_ARCH_FP_F_F12, kvm_cpu_context, fp.f.f[12]);
  204. OFFSET(KVM_ARCH_FP_F_F13, kvm_cpu_context, fp.f.f[13]);
  205. OFFSET(KVM_ARCH_FP_F_F14, kvm_cpu_context, fp.f.f[14]);
  206. OFFSET(KVM_ARCH_FP_F_F15, kvm_cpu_context, fp.f.f[15]);
  207. OFFSET(KVM_ARCH_FP_F_F16, kvm_cpu_context, fp.f.f[16]);
  208. OFFSET(KVM_ARCH_FP_F_F17, kvm_cpu_context, fp.f.f[17]);
  209. OFFSET(KVM_ARCH_FP_F_F18, kvm_cpu_context, fp.f.f[18]);
  210. OFFSET(KVM_ARCH_FP_F_F19, kvm_cpu_context, fp.f.f[19]);
  211. OFFSET(KVM_ARCH_FP_F_F20, kvm_cpu_context, fp.f.f[20]);
  212. OFFSET(KVM_ARCH_FP_F_F21, kvm_cpu_context, fp.f.f[21]);
  213. OFFSET(KVM_ARCH_FP_F_F22, kvm_cpu_context, fp.f.f[22]);
  214. OFFSET(KVM_ARCH_FP_F_F23, kvm_cpu_context, fp.f.f[23]);
  215. OFFSET(KVM_ARCH_FP_F_F24, kvm_cpu_context, fp.f.f[24]);
  216. OFFSET(KVM_ARCH_FP_F_F25, kvm_cpu_context, fp.f.f[25]);
  217. OFFSET(KVM_ARCH_FP_F_F26, kvm_cpu_context, fp.f.f[26]);
  218. OFFSET(KVM_ARCH_FP_F_F27, kvm_cpu_context, fp.f.f[27]);
  219. OFFSET(KVM_ARCH_FP_F_F28, kvm_cpu_context, fp.f.f[28]);
  220. OFFSET(KVM_ARCH_FP_F_F29, kvm_cpu_context, fp.f.f[29]);
  221. OFFSET(KVM_ARCH_FP_F_F30, kvm_cpu_context, fp.f.f[30]);
  222. OFFSET(KVM_ARCH_FP_F_F31, kvm_cpu_context, fp.f.f[31]);
  223. OFFSET(KVM_ARCH_FP_F_FCSR, kvm_cpu_context, fp.f.fcsr);
  224. /* D extension */
  225. OFFSET(KVM_ARCH_FP_D_F0, kvm_cpu_context, fp.d.f[0]);
  226. OFFSET(KVM_ARCH_FP_D_F1, kvm_cpu_context, fp.d.f[1]);
  227. OFFSET(KVM_ARCH_FP_D_F2, kvm_cpu_context, fp.d.f[2]);
  228. OFFSET(KVM_ARCH_FP_D_F3, kvm_cpu_context, fp.d.f[3]);
  229. OFFSET(KVM_ARCH_FP_D_F4, kvm_cpu_context, fp.d.f[4]);
  230. OFFSET(KVM_ARCH_FP_D_F5, kvm_cpu_context, fp.d.f[5]);
  231. OFFSET(KVM_ARCH_FP_D_F6, kvm_cpu_context, fp.d.f[6]);
  232. OFFSET(KVM_ARCH_FP_D_F7, kvm_cpu_context, fp.d.f[7]);
  233. OFFSET(KVM_ARCH_FP_D_F8, kvm_cpu_context, fp.d.f[8]);
  234. OFFSET(KVM_ARCH_FP_D_F9, kvm_cpu_context, fp.d.f[9]);
  235. OFFSET(KVM_ARCH_FP_D_F10, kvm_cpu_context, fp.d.f[10]);
  236. OFFSET(KVM_ARCH_FP_D_F11, kvm_cpu_context, fp.d.f[11]);
  237. OFFSET(KVM_ARCH_FP_D_F12, kvm_cpu_context, fp.d.f[12]);
  238. OFFSET(KVM_ARCH_FP_D_F13, kvm_cpu_context, fp.d.f[13]);
  239. OFFSET(KVM_ARCH_FP_D_F14, kvm_cpu_context, fp.d.f[14]);
  240. OFFSET(KVM_ARCH_FP_D_F15, kvm_cpu_context, fp.d.f[15]);
  241. OFFSET(KVM_ARCH_FP_D_F16, kvm_cpu_context, fp.d.f[16]);
  242. OFFSET(KVM_ARCH_FP_D_F17, kvm_cpu_context, fp.d.f[17]);
  243. OFFSET(KVM_ARCH_FP_D_F18, kvm_cpu_context, fp.d.f[18]);
  244. OFFSET(KVM_ARCH_FP_D_F19, kvm_cpu_context, fp.d.f[19]);
  245. OFFSET(KVM_ARCH_FP_D_F20, kvm_cpu_context, fp.d.f[20]);
  246. OFFSET(KVM_ARCH_FP_D_F21, kvm_cpu_context, fp.d.f[21]);
  247. OFFSET(KVM_ARCH_FP_D_F22, kvm_cpu_context, fp.d.f[22]);
  248. OFFSET(KVM_ARCH_FP_D_F23, kvm_cpu_context, fp.d.f[23]);
  249. OFFSET(KVM_ARCH_FP_D_F24, kvm_cpu_context, fp.d.f[24]);
  250. OFFSET(KVM_ARCH_FP_D_F25, kvm_cpu_context, fp.d.f[25]);
  251. OFFSET(KVM_ARCH_FP_D_F26, kvm_cpu_context, fp.d.f[26]);
  252. OFFSET(KVM_ARCH_FP_D_F27, kvm_cpu_context, fp.d.f[27]);
  253. OFFSET(KVM_ARCH_FP_D_F28, kvm_cpu_context, fp.d.f[28]);
  254. OFFSET(KVM_ARCH_FP_D_F29, kvm_cpu_context, fp.d.f[29]);
  255. OFFSET(KVM_ARCH_FP_D_F30, kvm_cpu_context, fp.d.f[30]);
  256. OFFSET(KVM_ARCH_FP_D_F31, kvm_cpu_context, fp.d.f[31]);
  257. OFFSET(KVM_ARCH_FP_D_FCSR, kvm_cpu_context, fp.d.fcsr);
  258. /*
  259. * THREAD_{F,X}* might be larger than a S-type offset can handle, but
  260. * these are used in performance-sensitive assembly so we can't resort
  261. * to loading the long immediate every time.
  262. */
  263. DEFINE(TASK_THREAD_RA_RA,
  264. offsetof(struct task_struct, thread.ra)
  265. - offsetof(struct task_struct, thread.ra)
  266. );
  267. DEFINE(TASK_THREAD_SP_RA,
  268. offsetof(struct task_struct, thread.sp)
  269. - offsetof(struct task_struct, thread.ra)
  270. );
  271. DEFINE(TASK_THREAD_S0_RA,
  272. offsetof(struct task_struct, thread.s[0])
  273. - offsetof(struct task_struct, thread.ra)
  274. );
  275. DEFINE(TASK_THREAD_S1_RA,
  276. offsetof(struct task_struct, thread.s[1])
  277. - offsetof(struct task_struct, thread.ra)
  278. );
  279. DEFINE(TASK_THREAD_S2_RA,
  280. offsetof(struct task_struct, thread.s[2])
  281. - offsetof(struct task_struct, thread.ra)
  282. );
  283. DEFINE(TASK_THREAD_S3_RA,
  284. offsetof(struct task_struct, thread.s[3])
  285. - offsetof(struct task_struct, thread.ra)
  286. );
  287. DEFINE(TASK_THREAD_S4_RA,
  288. offsetof(struct task_struct, thread.s[4])
  289. - offsetof(struct task_struct, thread.ra)
  290. );
  291. DEFINE(TASK_THREAD_S5_RA,
  292. offsetof(struct task_struct, thread.s[5])
  293. - offsetof(struct task_struct, thread.ra)
  294. );
  295. DEFINE(TASK_THREAD_S6_RA,
  296. offsetof(struct task_struct, thread.s[6])
  297. - offsetof(struct task_struct, thread.ra)
  298. );
  299. DEFINE(TASK_THREAD_S7_RA,
  300. offsetof(struct task_struct, thread.s[7])
  301. - offsetof(struct task_struct, thread.ra)
  302. );
  303. DEFINE(TASK_THREAD_S8_RA,
  304. offsetof(struct task_struct, thread.s[8])
  305. - offsetof(struct task_struct, thread.ra)
  306. );
  307. DEFINE(TASK_THREAD_S9_RA,
  308. offsetof(struct task_struct, thread.s[9])
  309. - offsetof(struct task_struct, thread.ra)
  310. );
  311. DEFINE(TASK_THREAD_S10_RA,
  312. offsetof(struct task_struct, thread.s[10])
  313. - offsetof(struct task_struct, thread.ra)
  314. );
  315. DEFINE(TASK_THREAD_S11_RA,
  316. offsetof(struct task_struct, thread.s[11])
  317. - offsetof(struct task_struct, thread.ra)
  318. );
  319. DEFINE(TASK_THREAD_F0_F0,
  320. offsetof(struct task_struct, thread.fstate.f[0])
  321. - offsetof(struct task_struct, thread.fstate.f[0])
  322. );
  323. DEFINE(TASK_THREAD_F1_F0,
  324. offsetof(struct task_struct, thread.fstate.f[1])
  325. - offsetof(struct task_struct, thread.fstate.f[0])
  326. );
  327. DEFINE(TASK_THREAD_F2_F0,
  328. offsetof(struct task_struct, thread.fstate.f[2])
  329. - offsetof(struct task_struct, thread.fstate.f[0])
  330. );
  331. DEFINE(TASK_THREAD_F3_F0,
  332. offsetof(struct task_struct, thread.fstate.f[3])
  333. - offsetof(struct task_struct, thread.fstate.f[0])
  334. );
  335. DEFINE(TASK_THREAD_F4_F0,
  336. offsetof(struct task_struct, thread.fstate.f[4])
  337. - offsetof(struct task_struct, thread.fstate.f[0])
  338. );
  339. DEFINE(TASK_THREAD_F5_F0,
  340. offsetof(struct task_struct, thread.fstate.f[5])
  341. - offsetof(struct task_struct, thread.fstate.f[0])
  342. );
  343. DEFINE(TASK_THREAD_F6_F0,
  344. offsetof(struct task_struct, thread.fstate.f[6])
  345. - offsetof(struct task_struct, thread.fstate.f[0])
  346. );
  347. DEFINE(TASK_THREAD_F7_F0,
  348. offsetof(struct task_struct, thread.fstate.f[7])
  349. - offsetof(struct task_struct, thread.fstate.f[0])
  350. );
  351. DEFINE(TASK_THREAD_F8_F0,
  352. offsetof(struct task_struct, thread.fstate.f[8])
  353. - offsetof(struct task_struct, thread.fstate.f[0])
  354. );
  355. DEFINE(TASK_THREAD_F9_F0,
  356. offsetof(struct task_struct, thread.fstate.f[9])
  357. - offsetof(struct task_struct, thread.fstate.f[0])
  358. );
  359. DEFINE(TASK_THREAD_F10_F0,
  360. offsetof(struct task_struct, thread.fstate.f[10])
  361. - offsetof(struct task_struct, thread.fstate.f[0])
  362. );
  363. DEFINE(TASK_THREAD_F11_F0,
  364. offsetof(struct task_struct, thread.fstate.f[11])
  365. - offsetof(struct task_struct, thread.fstate.f[0])
  366. );
  367. DEFINE(TASK_THREAD_F12_F0,
  368. offsetof(struct task_struct, thread.fstate.f[12])
  369. - offsetof(struct task_struct, thread.fstate.f[0])
  370. );
  371. DEFINE(TASK_THREAD_F13_F0,
  372. offsetof(struct task_struct, thread.fstate.f[13])
  373. - offsetof(struct task_struct, thread.fstate.f[0])
  374. );
  375. DEFINE(TASK_THREAD_F14_F0,
  376. offsetof(struct task_struct, thread.fstate.f[14])
  377. - offsetof(struct task_struct, thread.fstate.f[0])
  378. );
  379. DEFINE(TASK_THREAD_F15_F0,
  380. offsetof(struct task_struct, thread.fstate.f[15])
  381. - offsetof(struct task_struct, thread.fstate.f[0])
  382. );
  383. DEFINE(TASK_THREAD_F16_F0,
  384. offsetof(struct task_struct, thread.fstate.f[16])
  385. - offsetof(struct task_struct, thread.fstate.f[0])
  386. );
  387. DEFINE(TASK_THREAD_F17_F0,
  388. offsetof(struct task_struct, thread.fstate.f[17])
  389. - offsetof(struct task_struct, thread.fstate.f[0])
  390. );
  391. DEFINE(TASK_THREAD_F18_F0,
  392. offsetof(struct task_struct, thread.fstate.f[18])
  393. - offsetof(struct task_struct, thread.fstate.f[0])
  394. );
  395. DEFINE(TASK_THREAD_F19_F0,
  396. offsetof(struct task_struct, thread.fstate.f[19])
  397. - offsetof(struct task_struct, thread.fstate.f[0])
  398. );
  399. DEFINE(TASK_THREAD_F20_F0,
  400. offsetof(struct task_struct, thread.fstate.f[20])
  401. - offsetof(struct task_struct, thread.fstate.f[0])
  402. );
  403. DEFINE(TASK_THREAD_F21_F0,
  404. offsetof(struct task_struct, thread.fstate.f[21])
  405. - offsetof(struct task_struct, thread.fstate.f[0])
  406. );
  407. DEFINE(TASK_THREAD_F22_F0,
  408. offsetof(struct task_struct, thread.fstate.f[22])
  409. - offsetof(struct task_struct, thread.fstate.f[0])
  410. );
  411. DEFINE(TASK_THREAD_F23_F0,
  412. offsetof(struct task_struct, thread.fstate.f[23])
  413. - offsetof(struct task_struct, thread.fstate.f[0])
  414. );
  415. DEFINE(TASK_THREAD_F24_F0,
  416. offsetof(struct task_struct, thread.fstate.f[24])
  417. - offsetof(struct task_struct, thread.fstate.f[0])
  418. );
  419. DEFINE(TASK_THREAD_F25_F0,
  420. offsetof(struct task_struct, thread.fstate.f[25])
  421. - offsetof(struct task_struct, thread.fstate.f[0])
  422. );
  423. DEFINE(TASK_THREAD_F26_F0,
  424. offsetof(struct task_struct, thread.fstate.f[26])
  425. - offsetof(struct task_struct, thread.fstate.f[0])
  426. );
  427. DEFINE(TASK_THREAD_F27_F0,
  428. offsetof(struct task_struct, thread.fstate.f[27])
  429. - offsetof(struct task_struct, thread.fstate.f[0])
  430. );
  431. DEFINE(TASK_THREAD_F28_F0,
  432. offsetof(struct task_struct, thread.fstate.f[28])
  433. - offsetof(struct task_struct, thread.fstate.f[0])
  434. );
  435. DEFINE(TASK_THREAD_F29_F0,
  436. offsetof(struct task_struct, thread.fstate.f[29])
  437. - offsetof(struct task_struct, thread.fstate.f[0])
  438. );
  439. DEFINE(TASK_THREAD_F30_F0,
  440. offsetof(struct task_struct, thread.fstate.f[30])
  441. - offsetof(struct task_struct, thread.fstate.f[0])
  442. );
  443. DEFINE(TASK_THREAD_F31_F0,
  444. offsetof(struct task_struct, thread.fstate.f[31])
  445. - offsetof(struct task_struct, thread.fstate.f[0])
  446. );
  447. DEFINE(TASK_THREAD_FCSR_F0,
  448. offsetof(struct task_struct, thread.fstate.fcsr)
  449. - offsetof(struct task_struct, thread.fstate.f[0])
  450. );
  451. /*
  452. * We allocate a pt_regs on the stack when entering the kernel. This
  453. * ensures the alignment is sane.
  454. */
  455. DEFINE(PT_SIZE_ON_STACK, ALIGN(sizeof(struct pt_regs), STACK_ALIGN));
  456. OFFSET(KERNEL_MAP_VIRT_ADDR, kernel_mapping, virt_addr);
  457. OFFSET(SBI_HART_BOOT_TASK_PTR_OFFSET, sbi_hart_boot_data, task_ptr);
  458. OFFSET(SBI_HART_BOOT_STACK_PTR_OFFSET, sbi_hart_boot_data, stack_ptr);
  459. }