1 /*
2  * Generate definitions needed by assembly language modules.
3  * This code generates raw asm output which is post-processed
4  * to extract and format the required data.
5  */
6 #define COMPILE_OFFSETS
7 
8 #include <xen/types.h>
9 #include <xen/sched.h>
10 #include <xen/bitops.h>
11 #include <public/xen.h>
12 #include <asm/current.h>
13 #include <asm/procinfo.h>
14 #include <asm/setup.h>
15 
16 #define DEFINE(_sym, _val)                                                 \
17     asm volatile ( "\n.ascii\"==>#define " #_sym " %0 /* " #_val " */<==\""\
18                    :: "i" (_val) )
19 #define BLANK()                                                            \
20     asm volatile ( "\n.ascii\"==><==\"" )
21 #define OFFSET(_sym, _str, _mem)                                           \
22     DEFINE(_sym, offsetof(_str, _mem))
23 
__dummy__(void)24 void __dummy__(void)
25 {
26    OFFSET(UREGS_sp, struct cpu_user_regs, sp);
27    OFFSET(UREGS_lr, struct cpu_user_regs, lr);
28    OFFSET(UREGS_pc, struct cpu_user_regs, pc);
29    OFFSET(UREGS_cpsr, struct cpu_user_regs, cpsr);
30    OFFSET(UREGS_hsr, struct cpu_user_regs, hsr);
31 
32    OFFSET(UREGS_LR_usr, struct cpu_user_regs, lr_usr);
33    OFFSET(UREGS_SP_usr, struct cpu_user_regs, sp_usr);
34 
35    OFFSET(UREGS_SP_svc, struct cpu_user_regs, sp_svc);
36    OFFSET(UREGS_LR_svc, struct cpu_user_regs, lr_svc);
37    OFFSET(UREGS_SPSR_svc, struct cpu_user_regs, spsr_svc);
38 
39    OFFSET(UREGS_SP_abt, struct cpu_user_regs, sp_abt);
40    OFFSET(UREGS_LR_abt, struct cpu_user_regs, lr_abt);
41    OFFSET(UREGS_SPSR_abt, struct cpu_user_regs, spsr_abt);
42 
43    OFFSET(UREGS_SP_und, struct cpu_user_regs, sp_und);
44    OFFSET(UREGS_LR_und, struct cpu_user_regs, lr_und);
45    OFFSET(UREGS_SPSR_und, struct cpu_user_regs, spsr_und);
46 
47    OFFSET(UREGS_SP_irq, struct cpu_user_regs, sp_irq);
48    OFFSET(UREGS_LR_irq, struct cpu_user_regs, lr_irq);
49    OFFSET(UREGS_SPSR_irq, struct cpu_user_regs, spsr_irq);
50 
51    OFFSET(UREGS_SP_fiq, struct cpu_user_regs, sp_fiq);
52    OFFSET(UREGS_LR_fiq, struct cpu_user_regs, lr_fiq);
53    OFFSET(UREGS_SPSR_fiq, struct cpu_user_regs, spsr_fiq);
54 
55    OFFSET(UREGS_R8_fiq, struct cpu_user_regs, r8_fiq);
56    OFFSET(UREGS_R9_fiq, struct cpu_user_regs, r9_fiq);
57    OFFSET(UREGS_R10_fiq, struct cpu_user_regs, r10_fiq);
58    OFFSET(UREGS_R11_fiq, struct cpu_user_regs, r11_fiq);
59    OFFSET(UREGS_R12_fiq, struct cpu_user_regs, r12_fiq);
60 
61    OFFSET(UREGS_kernel_sizeof, struct cpu_user_regs, cpsr);
62    BLANK();
63 
64    DEFINE(CPUINFO_sizeof, sizeof(struct cpu_info));
65    BLANK();
66 
67    OFFSET(VCPU_arch_saved_context, struct vcpu, arch.saved_context);
68    BLANK();
69 
70    DEFINE(PROCINFO_sizeof, sizeof(struct proc_info_list));
71    OFFSET(PROCINFO_cpu_val, struct proc_info_list, cpu_val);
72    OFFSET(PROCINFO_cpu_mask, struct proc_info_list, cpu_mask);
73    OFFSET(PROCINFO_cpu_init, struct proc_info_list, cpu_init);
74    BLANK();
75 
76    OFFSET(INITINFO_stack, struct init_info, stack);
77    BLANK();
78 
79 #ifdef CONFIG_MPU
80    DEFINE(XEN_MPUMAP_MASK_sizeof, sizeof(xen_mpumap_mask));
81    DEFINE(XEN_MPUMAP_sizeof, sizeof(xen_mpumap));
82    BLANK();
83 #endif
84 }
85 
86 /*
87  * Local variables:
88  * mode: C
89  * c-file-style: "BSD"
90  * c-basic-offset: 4
91  * indent-tabs-mode: nil
92  * End:
93  */
94