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