1 /*
2 * Utility to generate asm-ia64/offsets.h.
3 *
4 * Copyright (C) 2002-2003 Fenghua Yu <fenghua.yu@intel.com>
5 * Copyright (C) 1999-2001 Hewlett-Packard Co
6 * David Mosberger-Tang <davidm@hpl.hp.com>
7 *
8 * Note that this file has dual use: when building the kernel
9 * natively, the file is translated into a binary and executed. When
10 * building the kernel in a cross-development environment, this file
11 * gets translated into an assembly file which, in turn, is processed
12 * by awk to generate offsets.h. So if you make any changes to this
13 * file, be sure to verify that the awk procedure still works (see
14 * print_offsets.awk).
15 */
16 #include <linux/config.h>
17
18 #include <linux/sched.h>
19
20 #include <asm-ia64/processor.h>
21 #include <asm-ia64/ptrace.h>
22 #include <asm-ia64/siginfo.h>
23 #include <asm-ia64/sigcontext.h>
24 #include <asm-ia64/mca.h>
25
26 #include "../kernel/sigframe.h"
27
28 #ifdef offsetof
29 # undef offsetof
30 #endif
31
32 /*
33 * We _can't_ include the host's standard header file, as those are in
34 * potential conflict with the what the Linux kernel declares for the
35 * target system.
36 */
37 extern int printf (const char *, ...);
38
39 #define offsetof(type,field) ((char *) &((type *) 0)->field - (char *) 0)
40
41 struct
42 {
43 const char name[256];
44 unsigned long value;
45 }
46 tab[] =
47 {
48 { "IA64_TASK_SIZE", sizeof (struct task_struct) },
49 { "IA64_PT_REGS_SIZE", sizeof (struct pt_regs) },
50 { "IA64_SWITCH_STACK_SIZE", sizeof (struct switch_stack) },
51 { "IA64_SIGINFO_SIZE", sizeof (struct siginfo) },
52 { "IA64_CPU_SIZE", sizeof (struct cpuinfo_ia64) },
53 { "SIGFRAME_SIZE", sizeof (struct sigframe) },
54 { "UNW_FRAME_INFO_SIZE", sizeof (struct unw_frame_info) },
55 { "", 0 }, /* spacer */
56 { "IA64_TASK_PTRACE_OFFSET", offsetof (struct task_struct, ptrace) },
57 { "IA64_TASK_SIGPENDING_OFFSET", offsetof (struct task_struct, sigpending) },
58 { "IA64_TASK_NEED_RESCHED_OFFSET", offsetof (struct task_struct, need_resched) },
59 { "IA64_TASK_PROCESSOR_OFFSET", offsetof (struct task_struct, processor) },
60 { "IA64_TASK_THREAD_OFFSET", offsetof (struct task_struct, thread) },
61 { "IA64_TASK_THREAD_KSP_OFFSET", offsetof (struct task_struct, thread.ksp) },
62 #ifdef CONFIG_PERFMON
63 { "IA64_TASK_PFM_OVFL_BLOCK_RESET_OFFSET",
64 offsetof(struct task_struct, thread.pfm_ovfl_block_reset) },
65 #endif
66 { "IA64_TASK_PID_OFFSET", offsetof (struct task_struct, pid) },
67 { "IA64_TASK_MM_OFFSET", offsetof (struct task_struct, mm) },
68 { "IA64_PT_REGS_B6_OFFSET", offsetof (struct pt_regs, b6) },
69 { "IA64_PT_REGS_B7_OFFSET", offsetof (struct pt_regs, b7) },
70 { "IA64_PT_REGS_AR_CSD_OFFSET", offsetof (struct pt_regs, ar_csd) },
71 { "IA64_PT_REGS_AR_SSD_OFFSET", offsetof (struct pt_regs, ar_ssd) },
72 { "IA64_PT_REGS_R8_OFFSET", offsetof (struct pt_regs, r8) },
73 { "IA64_PT_REGS_R9_OFFSET", offsetof (struct pt_regs, r9) },
74 { "IA64_PT_REGS_R10_OFFSET", offsetof (struct pt_regs, r10) },
75 { "IA64_PT_REGS_R11_OFFSET", offsetof (struct pt_regs, r11) },
76 { "IA64_PT_REGS_CR_IPSR_OFFSET", offsetof (struct pt_regs, cr_ipsr) },
77 { "IA64_PT_REGS_CR_IIP_OFFSET", offsetof (struct pt_regs, cr_iip) },
78 { "IA64_PT_REGS_CR_IFS_OFFSET", offsetof (struct pt_regs, cr_ifs) },
79 { "IA64_PT_REGS_AR_UNAT_OFFSET", offsetof (struct pt_regs, ar_unat) },
80 { "IA64_PT_REGS_AR_PFS_OFFSET", offsetof (struct pt_regs, ar_pfs) },
81 { "IA64_PT_REGS_AR_RSC_OFFSET", offsetof (struct pt_regs, ar_rsc) },
82 { "IA64_PT_REGS_AR_RNAT_OFFSET", offsetof (struct pt_regs, ar_rnat) },
83 { "IA64_PT_REGS_AR_BSPSTORE_OFFSET",offsetof (struct pt_regs, ar_bspstore) },
84 { "IA64_PT_REGS_PR_OFFSET", offsetof (struct pt_regs, pr) },
85 { "IA64_PT_REGS_B0_OFFSET", offsetof (struct pt_regs, b0) },
86 { "IA64_PT_REGS_LOADRS_OFFSET", offsetof (struct pt_regs, loadrs) },
87 { "IA64_PT_REGS_R1_OFFSET", offsetof (struct pt_regs, r1) },
88 { "IA64_PT_REGS_R12_OFFSET", offsetof (struct pt_regs, r12) },
89 { "IA64_PT_REGS_R13_OFFSET", offsetof (struct pt_regs, r13) },
90 { "IA64_PT_REGS_AR_FPSR_OFFSET", offsetof (struct pt_regs, ar_fpsr) },
91 { "IA64_PT_REGS_R15_OFFSET", offsetof (struct pt_regs, r15) },
92 { "IA64_PT_REGS_R14_OFFSET", offsetof (struct pt_regs, r14) },
93 { "IA64_PT_REGS_R2_OFFSET", offsetof (struct pt_regs, r2) },
94 { "IA64_PT_REGS_R3_OFFSET", offsetof (struct pt_regs, r3) },
95 { "IA64_PT_REGS_R16_OFFSET", offsetof (struct pt_regs, r16) },
96 { "IA64_PT_REGS_R17_OFFSET", offsetof (struct pt_regs, r17) },
97 { "IA64_PT_REGS_R18_OFFSET", offsetof (struct pt_regs, r18) },
98 { "IA64_PT_REGS_R19_OFFSET", offsetof (struct pt_regs, r19) },
99 { "IA64_PT_REGS_R20_OFFSET", offsetof (struct pt_regs, r20) },
100 { "IA64_PT_REGS_R21_OFFSET", offsetof (struct pt_regs, r21) },
101 { "IA64_PT_REGS_R22_OFFSET", offsetof (struct pt_regs, r22) },
102 { "IA64_PT_REGS_R23_OFFSET", offsetof (struct pt_regs, r23) },
103 { "IA64_PT_REGS_R24_OFFSET", offsetof (struct pt_regs, r24) },
104 { "IA64_PT_REGS_R25_OFFSET", offsetof (struct pt_regs, r25) },
105 { "IA64_PT_REGS_R26_OFFSET", offsetof (struct pt_regs, r26) },
106 { "IA64_PT_REGS_R27_OFFSET", offsetof (struct pt_regs, r27) },
107 { "IA64_PT_REGS_R28_OFFSET", offsetof (struct pt_regs, r28) },
108 { "IA64_PT_REGS_R29_OFFSET", offsetof (struct pt_regs, r29) },
109 { "IA64_PT_REGS_R30_OFFSET", offsetof (struct pt_regs, r30) },
110 { "IA64_PT_REGS_R31_OFFSET", offsetof (struct pt_regs, r31) },
111 { "IA64_PT_REGS_AR_CCV_OFFSET", offsetof (struct pt_regs, ar_ccv) },
112 { "IA64_PT_REGS_F6_OFFSET", offsetof (struct pt_regs, f6) },
113 { "IA64_PT_REGS_F7_OFFSET", offsetof (struct pt_regs, f7) },
114 { "IA64_PT_REGS_F8_OFFSET", offsetof (struct pt_regs, f8) },
115 { "IA64_PT_REGS_F9_OFFSET", offsetof (struct pt_regs, f9) },
116 { "IA64_PT_REGS_F10_OFFSET", offsetof (struct pt_regs, f10) },
117 { "IA64_PT_REGS_F11_OFFSET", offsetof (struct pt_regs, f11) },
118 { "IA64_SWITCH_STACK_CALLER_UNAT_OFFSET", offsetof (struct switch_stack, caller_unat) },
119 { "IA64_SWITCH_STACK_AR_FPSR_OFFSET", offsetof (struct switch_stack, ar_fpsr) },
120 { "IA64_SWITCH_STACK_F2_OFFSET", offsetof (struct switch_stack, f2) },
121 { "IA64_SWITCH_STACK_F3_OFFSET", offsetof (struct switch_stack, f3) },
122 { "IA64_SWITCH_STACK_F4_OFFSET", offsetof (struct switch_stack, f4) },
123 { "IA64_SWITCH_STACK_F5_OFFSET", offsetof (struct switch_stack, f5) },
124 { "IA64_SWITCH_STACK_F12_OFFSET", offsetof (struct switch_stack, f12) },
125 { "IA64_SWITCH_STACK_F13_OFFSET", offsetof (struct switch_stack, f13) },
126 { "IA64_SWITCH_STACK_F14_OFFSET", offsetof (struct switch_stack, f14) },
127 { "IA64_SWITCH_STACK_F15_OFFSET", offsetof (struct switch_stack, f15) },
128 { "IA64_SWITCH_STACK_F16_OFFSET", offsetof (struct switch_stack, f16) },
129 { "IA64_SWITCH_STACK_F17_OFFSET", offsetof (struct switch_stack, f17) },
130 { "IA64_SWITCH_STACK_F18_OFFSET", offsetof (struct switch_stack, f18) },
131 { "IA64_SWITCH_STACK_F19_OFFSET", offsetof (struct switch_stack, f19) },
132 { "IA64_SWITCH_STACK_F20_OFFSET", offsetof (struct switch_stack, f20) },
133 { "IA64_SWITCH_STACK_F21_OFFSET", offsetof (struct switch_stack, f21) },
134 { "IA64_SWITCH_STACK_F22_OFFSET", offsetof (struct switch_stack, f22) },
135 { "IA64_SWITCH_STACK_F23_OFFSET", offsetof (struct switch_stack, f23) },
136 { "IA64_SWITCH_STACK_F24_OFFSET", offsetof (struct switch_stack, f24) },
137 { "IA64_SWITCH_STACK_F25_OFFSET", offsetof (struct switch_stack, f25) },
138 { "IA64_SWITCH_STACK_F26_OFFSET", offsetof (struct switch_stack, f26) },
139 { "IA64_SWITCH_STACK_F27_OFFSET", offsetof (struct switch_stack, f27) },
140 { "IA64_SWITCH_STACK_F28_OFFSET", offsetof (struct switch_stack, f28) },
141 { "IA64_SWITCH_STACK_F29_OFFSET", offsetof (struct switch_stack, f29) },
142 { "IA64_SWITCH_STACK_F30_OFFSET", offsetof (struct switch_stack, f30) },
143 { "IA64_SWITCH_STACK_F31_OFFSET", offsetof (struct switch_stack, f31) },
144 { "IA64_SWITCH_STACK_R4_OFFSET", offsetof (struct switch_stack, r4) },
145 { "IA64_SWITCH_STACK_R5_OFFSET", offsetof (struct switch_stack, r5) },
146 { "IA64_SWITCH_STACK_R6_OFFSET", offsetof (struct switch_stack, r6) },
147 { "IA64_SWITCH_STACK_R7_OFFSET", offsetof (struct switch_stack, r7) },
148 { "IA64_SWITCH_STACK_B0_OFFSET", offsetof (struct switch_stack, b0) },
149 { "IA64_SWITCH_STACK_B1_OFFSET", offsetof (struct switch_stack, b1) },
150 { "IA64_SWITCH_STACK_B2_OFFSET", offsetof (struct switch_stack, b2) },
151 { "IA64_SWITCH_STACK_B3_OFFSET", offsetof (struct switch_stack, b3) },
152 { "IA64_SWITCH_STACK_B4_OFFSET", offsetof (struct switch_stack, b4) },
153 { "IA64_SWITCH_STACK_B5_OFFSET", offsetof (struct switch_stack, b5) },
154 { "IA64_SWITCH_STACK_AR_PFS_OFFSET", offsetof (struct switch_stack, ar_pfs) },
155 { "IA64_SWITCH_STACK_AR_LC_OFFSET", offsetof (struct switch_stack, ar_lc) },
156 { "IA64_SWITCH_STACK_AR_UNAT_OFFSET", offsetof (struct switch_stack, ar_unat) },
157 { "IA64_SWITCH_STACK_AR_RNAT_OFFSET", offsetof (struct switch_stack, ar_rnat) },
158 { "IA64_SWITCH_STACK_AR_BSPSTORE_OFFSET", offsetof (struct switch_stack, ar_bspstore) },
159 { "IA64_SWITCH_STACK_PR_OFFSET", offsetof (struct switch_stack, pr) },
160 { "IA64_SIGCONTEXT_IP_OFFSET", offsetof (struct sigcontext, sc_ip) },
161 { "IA64_SIGCONTEXT_AR_BSP_OFFSET", offsetof (struct sigcontext, sc_ar_bsp) },
162 { "IA64_SIGCONTEXT_AR_FPSR_OFFSET", offsetof (struct sigcontext, sc_ar_fpsr) },
163 { "IA64_SIGCONTEXT_AR_RNAT_OFFSET", offsetof (struct sigcontext, sc_ar_rnat) },
164 { "IA64_SIGCONTEXT_AR_UNAT_OFFSET", offsetof (struct sigcontext, sc_ar_unat) },
165 { "IA64_SIGCONTEXT_B0_OFFSET", offsetof (struct sigcontext, sc_br[0]) },
166 { "IA64_SIGCONTEXT_CFM_OFFSET", offsetof (struct sigcontext, sc_cfm) },
167 { "IA64_SIGCONTEXT_FLAGS_OFFSET", offsetof (struct sigcontext, sc_flags) },
168 { "IA64_SIGCONTEXT_FR6_OFFSET", offsetof (struct sigcontext, sc_fr[6]) },
169 { "IA64_SIGCONTEXT_PR_OFFSET", offsetof (struct sigcontext, sc_pr) },
170 { "IA64_SIGCONTEXT_R12_OFFSET", offsetof (struct sigcontext, sc_gr[12]) },
171 { "IA64_SIGCONTEXT_RBS_BASE_OFFSET",offsetof (struct sigcontext, sc_rbs_base) },
172 { "IA64_SIGCONTEXT_LOADRS_OFFSET", offsetof (struct sigcontext, sc_loadrs) },
173 { "IA64_SIGFRAME_ARG0_OFFSET", offsetof (struct sigframe, arg0) },
174 { "IA64_SIGFRAME_ARG1_OFFSET", offsetof (struct sigframe, arg1) },
175 { "IA64_SIGFRAME_ARG2_OFFSET", offsetof (struct sigframe, arg2) },
176 { "IA64_SIGFRAME_HANDLER_OFFSET", offsetof (struct sigframe, handler) },
177 { "IA64_SIGFRAME_SIGCONTEXT_OFFSET", offsetof (struct sigframe, sc) },
178 { "IA64_CLONE_VFORK", CLONE_VFORK },
179 { "IA64_CLONE_VM", CLONE_VM },
180 { "IA64_CPU_IRQ_COUNT_OFFSET", offsetof (struct cpuinfo_ia64, irq_stat.f.irq_count) },
181 { "IA64_CPU_BH_COUNT_OFFSET", offsetof (struct cpuinfo_ia64, irq_stat.f.bh_count) },
182 { "IA64_CPU_PHYS_STACKED_SIZE_P8_OFFSET",offsetof (struct cpuinfo_ia64, phys_stacked_size_p8)},
183 { "IA64_MCA_TLB_INFO_SIZE", sizeof (struct ia64_mca_tlb_info) },
184 };
185
186 static const char *tabs = "\t\t\t\t\t\t\t\t\t\t";
187
188 int
main(int argc,char ** argv)189 main (int argc, char **argv)
190 {
191 const char *space;
192 int i, num_tabs;
193 size_t len;
194
195 printf ("#ifndef _ASM_IA64_OFFSETS_H\n");
196 printf ("#define _ASM_IA64_OFFSETS_H\n\n");
197
198 printf ("/*\n * DO NOT MODIFY\n *\n * This file was generated by "
199 "arch/ia64/tools/print_offsets.\n *\n */\n\n");
200
201 /* This is stretching things a bit, but entry.S needs the bit number
202 for PT_PTRACED and it can't include <linux/sched.h> so this seems
203 like a reasonably solution. At least the code won't break in
204 subtle ways should PT_PTRACED ever change. Ditto for
205 PT_TRACESYS_BIT. */
206 printf ("#define PT_PTRACED_BIT\t\t\t%u\n", ffs (PT_PTRACED) - 1);
207 printf ("#define PT_TRACESYS_BIT\t\t\t%u\n\n", ffs (PT_TRACESYS) - 1);
208
209 for (i = 0; i < sizeof (tab) / sizeof (tab[0]); ++i)
210 {
211 if (tab[i].name[0] == '\0')
212 printf ("\n");
213 else
214 {
215 len = strlen (tab[i].name);
216
217 num_tabs = (40 - len) / 8;
218 if (num_tabs <= 0)
219 space = " ";
220 else
221 space = strchr(tabs, '\0') - (40 - len) / 8;
222
223 printf ("#define %s%s%lu\t/* 0x%lx */\n",
224 tab[i].name, space, tab[i].value, tab[i].value);
225 }
226 }
227
228 printf ("\n#endif /* _ASM_IA64_OFFSETS_H */\n");
229 return 0;
230 }
231