asm-offsets.c 21 KB

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