2 * This program is used to generate definitions needed by
3 * assembly language modules.
5 * We use the technique used in the OSF Mach kernel code:
6 * generate asm statements containing #defines,
7 * compile this file to assembler, and then extract the
8 * #defines from the assembly-language output.
12 #include <linux/config.h>
13 #include <linux/signal.h>
14 #include <linux/sched.h>
15 #include <linux/kernel.h>
16 #include <linux/errno.h>
17 #include <linux/string.h>
18 #include <linux/types.h>
19 #include <linux/ptrace.h>
20 #include <linux/mman.h>
24 #include <asm/pgtable.h>
25 #include <asm/processor.h>
27 #define DEFINE(sym, val) \
28 asm volatile("\n#define\t" #sym "\t%0" : : "i" (val))
33 /*DEFINE(KERNELBASE, KERNELBASE);*/
34 DEFINE(STATE
, offsetof(struct task_struct
, state
));
35 DEFINE(NEXT_TASK
, offsetof(struct task_struct
, next_task
));
36 DEFINE(COUNTER
, offsetof(struct task_struct
, counter
));
37 DEFINE(PROCESSOR
, offsetof(struct task_struct
, processor
));
38 DEFINE(SIGPENDING
, offsetof(struct task_struct
, sigpending
));
39 DEFINE(THREAD
, offsetof(struct task_struct
, thread
));
40 DEFINE(MM
, offsetof(struct task_struct
, mm
));
41 DEFINE(ACTIVE_MM
, offsetof(struct task_struct
, active_mm
));
42 DEFINE(TASK_STRUCT_SIZE
, sizeof(struct task_struct
));
43 DEFINE(KSP
, offsetof(struct thread_struct
, ksp
));
44 DEFINE(PGDIR
, offsetof(struct thread_struct
, pgdir
));
45 DEFINE(LAST_SYSCALL
, offsetof(struct thread_struct
, last_syscall
));
46 DEFINE(PT_REGS
, offsetof(struct thread_struct
, regs
));
47 DEFINE(PF_TRACESYS
, PF_TRACESYS
);
48 DEFINE(TASK_FLAGS
, offsetof(struct task_struct
, flags
));
49 DEFINE(NEED_RESCHED
, offsetof(struct task_struct
, need_resched
));
50 DEFINE(THREAD_FPR0
, offsetof(struct thread_struct
, fpr
[0]));
51 DEFINE(THREAD_FPSCR
, offsetof(struct thread_struct
, fpscr
));
53 DEFINE(THREAD_VR0
, offsetof(struct thread_struct
, vr
[0]));
54 DEFINE(THREAD_VRSAVE
, offsetof(struct thread_struct
, vrsave
));
55 DEFINE(THREAD_VSCR
, offsetof(struct thread_struct
, vscr
));
56 #endif /* CONFIG_ALTIVEC */
57 /* Interrupt register frame */
58 DEFINE(TASK_UNION_SIZE
, sizeof(union task_union
));
59 DEFINE(STACK_FRAME_OVERHEAD
, STACK_FRAME_OVERHEAD
);
60 DEFINE(INT_FRAME_SIZE
, STACK_FRAME_OVERHEAD
+ sizeof(struct pt_regs
));
61 /* in fact we only use gpr0 - gpr9 and gpr20 - gpr23 */
62 DEFINE(GPR0
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[0]));
63 DEFINE(GPR1
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[1]));
64 DEFINE(GPR2
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[2]));
65 DEFINE(GPR3
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[3]));
66 DEFINE(GPR4
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[4]));
67 DEFINE(GPR5
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[5]));
68 DEFINE(GPR6
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[6]));
69 DEFINE(GPR7
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[7]));
70 DEFINE(GPR8
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[8]));
71 DEFINE(GPR9
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[9]));
72 DEFINE(GPR10
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[10]));
73 DEFINE(GPR11
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[11]));
74 DEFINE(GPR12
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[12]));
75 DEFINE(GPR13
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[13]));
76 DEFINE(GPR14
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[14]));
77 DEFINE(GPR15
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[15]));
78 DEFINE(GPR16
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[16]));
79 DEFINE(GPR17
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[17]));
80 DEFINE(GPR18
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[18]));
81 DEFINE(GPR19
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[19]));
82 DEFINE(GPR20
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[20]));
83 DEFINE(GPR21
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[21]));
84 DEFINE(GPR22
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[22]));
85 DEFINE(GPR23
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[23]));
86 DEFINE(GPR24
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[24]));
87 DEFINE(GPR25
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[25]));
88 DEFINE(GPR26
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[26]));
89 DEFINE(GPR27
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[27]));
90 DEFINE(GPR28
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[28]));
91 DEFINE(GPR29
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[29]));
92 DEFINE(GPR30
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[30]));
93 DEFINE(GPR31
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, gpr
[31]));
94 /* Note: these symbols include _ because they overlap with special
97 DEFINE(_NIP
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, nip
));
98 DEFINE(_MSR
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, msr
));
99 DEFINE(_CTR
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, ctr
));
100 DEFINE(_LINK
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, link
));
101 DEFINE(_CCR
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, ccr
));
102 DEFINE(_XER
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, xer
));
103 DEFINE(_DAR
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, dar
));
104 DEFINE(_DSISR
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, dsisr
));
105 /* The PowerPC 400-class processors have neither the DAR nor the DSISR
106 * SPRs. Hence, we overload them to hold the similar DEAR and ESR SPRs
107 * for such processors.
109 DEFINE(_DEAR
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, dar
));
110 DEFINE(_ESR
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, dsisr
));
111 DEFINE(ORIG_GPR3
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, orig_gpr3
));
112 DEFINE(RESULT
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, result
));
113 DEFINE(TRAP
, STACK_FRAME_OVERHEAD
+offsetof(struct pt_regs
, trap
));
114 DEFINE(CLONE_VM
, CLONE_VM
);