xref: /kvm-unit-tests/lib/riscv/asm-offsets.c (revision f372d35fb1bea99e401cc6eafc798aecfce29a07)
1 // SPDX-License-Identifier: GPL-2.0-only
2 #include <kbuild.h>
3 #include <elf.h>
4 #include <asm/processor.h>
5 #include <asm/ptrace.h>
6 #include <asm/smp.h>
7 
8 int main(void)
9 {
10 #if __riscv_xlen == 32
11 	OFFSET(ELF_RELA_OFFSET, elf32_rela, r_offset);
12 	OFFSET(ELF_RELA_ADDEND, elf32_rela, r_addend);
13 	DEFINE(ELF_RELA_SIZE, sizeof(struct elf32_rela));
14 #elif __riscv_xlen == 64
15 	OFFSET(ELF_RELA_OFFSET, elf64_rela, r_offset);
16 	OFFSET(ELF_RELA_ADDEND, elf64_rela, r_addend);
17 	DEFINE(ELF_RELA_SIZE, sizeof(struct elf64_rela));
18 #endif
19 	OFFSET(PT_EPC, pt_regs, epc);
20 	OFFSET(PT_RA, pt_regs, ra);
21 	OFFSET(PT_SP, pt_regs, sp);
22 	OFFSET(PT_GP, pt_regs, gp);
23 	OFFSET(PT_TP, pt_regs, tp);
24 	OFFSET(PT_T0, pt_regs, t0);
25 	OFFSET(PT_T1, pt_regs, t1);
26 	OFFSET(PT_T2, pt_regs, t2);
27 	OFFSET(PT_S0, pt_regs, s0);
28 	OFFSET(PT_S1, pt_regs, s1);
29 	OFFSET(PT_A0, pt_regs, a0);
30 	OFFSET(PT_A1, pt_regs, a1);
31 	OFFSET(PT_A2, pt_regs, a2);
32 	OFFSET(PT_A3, pt_regs, a3);
33 	OFFSET(PT_A4, pt_regs, a4);
34 	OFFSET(PT_A5, pt_regs, a5);
35 	OFFSET(PT_A6, pt_regs, a6);
36 	OFFSET(PT_A7, pt_regs, a7);
37 	OFFSET(PT_S2, pt_regs, s2);
38 	OFFSET(PT_S3, pt_regs, s3);
39 	OFFSET(PT_S4, pt_regs, s4);
40 	OFFSET(PT_S5, pt_regs, s5);
41 	OFFSET(PT_S6, pt_regs, s6);
42 	OFFSET(PT_S7, pt_regs, s7);
43 	OFFSET(PT_S8, pt_regs, s8);
44 	OFFSET(PT_S9, pt_regs, s9);
45 	OFFSET(PT_S10, pt_regs, s10);
46 	OFFSET(PT_S11, pt_regs, s11);
47 	OFFSET(PT_T3, pt_regs, t3);
48 	OFFSET(PT_T4, pt_regs, t4);
49 	OFFSET(PT_T5, pt_regs, t5);
50 	OFFSET(PT_T6, pt_regs, t6);
51 	OFFSET(PT_STATUS, pt_regs, status);
52 	OFFSET(PT_BADADDR, pt_regs, badaddr);
53 	OFFSET(PT_CAUSE, pt_regs, cause);
54 	OFFSET(PT_ORIG_A0, pt_regs, orig_a0);
55 	DEFINE(PT_SIZE, sizeof(struct pt_regs));
56 
57 	OFFSET(SECONDARY_SATP, secondary_data, satp);
58 	OFFSET(SECONDARY_STVEC, secondary_data, stvec);
59 	OFFSET(SECONDARY_FUNC, secondary_data, func);
60 	DEFINE(SECONDARY_DATA_SIZE, sizeof(struct secondary_data));
61 
62 	OFFSET(THREAD_INFO_CPU, thread_info, cpu);
63 	OFFSET(THREAD_INFO_HARTID, thread_info, hartid);
64 	DEFINE(THREAD_INFO_SIZE, sizeof(struct thread_info));
65 
66 	return 0;
67 }
68