xref: /kvm-unit-tests/lib/arm/asm-offsets.c (revision 8cca5668ff14cbceb2ac77375f483e478ee907b5)
1d3aacb4fSAndrew Jones /*
2d3aacb4fSAndrew Jones  * Adapted from arch/arm/kernel/asm-offsets.c
3d3aacb4fSAndrew Jones  *
4d3aacb4fSAndrew Jones  * Copyright (C) 2014, Red Hat Inc, Andrew Jones <drjones@redhat.com>
5d3aacb4fSAndrew Jones  *
6d3aacb4fSAndrew Jones  * This work is licensed under the terms of the GNU LGPL, version 2.
7d3aacb4fSAndrew Jones  */
8*8cca5668SAndrew Jones #include <libcflat.h>
9*8cca5668SAndrew Jones #include <asm/ptrace.h>
10d3aacb4fSAndrew Jones 
11d3aacb4fSAndrew Jones #define DEFINE(sym, val) \
12d3aacb4fSAndrew Jones 	asm volatile("\n->" #sym " %0 " #val : : "i" (val))
13d3aacb4fSAndrew Jones #define OFFSET(sym, str, mem)	DEFINE(sym, offsetof(struct str, mem))
14d3aacb4fSAndrew Jones #define COMMENT(x)		asm volatile("\n->#" x)
15d3aacb4fSAndrew Jones #define BLANK()			asm volatile("\n->" : : )
16d3aacb4fSAndrew Jones 
17d3aacb4fSAndrew Jones int main(void)
18d3aacb4fSAndrew Jones {
19d3aacb4fSAndrew Jones 	OFFSET(S_R0, pt_regs, ARM_r0);
20d3aacb4fSAndrew Jones 	OFFSET(S_R1, pt_regs, ARM_r1);
21d3aacb4fSAndrew Jones 	OFFSET(S_R2, pt_regs, ARM_r2);
22d3aacb4fSAndrew Jones 	OFFSET(S_R3, pt_regs, ARM_r3);
23d3aacb4fSAndrew Jones 	OFFSET(S_R4, pt_regs, ARM_r4);
24d3aacb4fSAndrew Jones 	OFFSET(S_R5, pt_regs, ARM_r5);
25d3aacb4fSAndrew Jones 	OFFSET(S_R6, pt_regs, ARM_r6);
26d3aacb4fSAndrew Jones 	OFFSET(S_R7, pt_regs, ARM_r7);
27d3aacb4fSAndrew Jones 	OFFSET(S_R8, pt_regs, ARM_r8);
28d3aacb4fSAndrew Jones 	OFFSET(S_R9, pt_regs, ARM_r9);
29d3aacb4fSAndrew Jones 	OFFSET(S_R10, pt_regs, ARM_r10);
30d3aacb4fSAndrew Jones 	OFFSET(S_FP, pt_regs, ARM_fp);
31d3aacb4fSAndrew Jones 	OFFSET(S_IP, pt_regs, ARM_ip);
32d3aacb4fSAndrew Jones 	OFFSET(S_SP, pt_regs, ARM_sp);
33d3aacb4fSAndrew Jones 	OFFSET(S_LR, pt_regs, ARM_lr);
34d3aacb4fSAndrew Jones 	OFFSET(S_PC, pt_regs, ARM_pc);
35d3aacb4fSAndrew Jones 	OFFSET(S_PSR, pt_regs, ARM_cpsr);
36d3aacb4fSAndrew Jones 	OFFSET(S_OLD_R0, pt_regs, ARM_ORIG_r0);
37d3aacb4fSAndrew Jones 	DEFINE(S_FRAME_SIZE, sizeof(struct pt_regs));
38d3aacb4fSAndrew Jones 	return 0;
39d3aacb4fSAndrew Jones }
40