1/* 2 * Utility to generate asm-ia64/offsets.h. 3 * 4 * Copyright (C) 1999-2001 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 * prin_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 */ 35extern int printf (const char *, ...); 36 37#define offsetof(type,field) ((char *) &((type *) 0)->field - (char *) 0) 38 39struct 40 { 41 const char name[256]; 42 unsigned long value; 43 } 44tab[] = 45 { 46 { "IA64_TASK_SIZE", sizeof (struct task_struct) }, 47 { "IA64_PT_REGS_SIZE", sizeof (struct pt_regs) }, 48 { "IA64_SWITCH_STACK_SIZE", sizeof (struct switch_stack) }, 49 { "IA64_SIGINFO_SIZE", sizeof (struct siginfo) }, 50 { "IA64_CPU_SIZE", sizeof (struct cpuinfo_ia64) }, 51 { "SIGFRAME_SIZE", sizeof (struct sigframe) }, 52 { "UNW_FRAME_INFO_SIZE", sizeof (struct unw_frame_info) }, 53 { "", 0 }, /* spacer */ 54 { "IA64_TASK_PTRACE_OFFSET", offsetof (struct task_struct, ptrace) }, 55 { "IA64_TASK_SIGPENDING_OFFSET", offsetof (struct task_struct, sigpending) }, 56 { "IA64_TASK_NEED_RESCHED_OFFSET", offsetof (struct task_struct, need_resched) }, 57 { "IA64_TASK_PROCESSOR_OFFSET", offsetof (struct task_struct, processor) }, 58 { "IA64_TASK_THREAD_OFFSET", offsetof (struct task_struct, thread) }, 59 { "IA64_TASK_THREAD_KSP_OFFSET", offsetof (struct task_struct, thread.ksp) }, 60#ifdef CONFIG_PERFMON 61 { "IA64_TASK_PFM_OVFL_BLOCK_RESET_OFFSET", 62 offsetof(struct task_struct, thread.pfm_ovfl_block_reset) }, 63#endif 64 { "IA64_TASK_PID_OFFSET", offsetof (struct task_struct, pid) }, 65 { "IA64_TASK_MM_OFFSET", offsetof (struct task_struct, mm) }, 66 { "IA64_PT_REGS_CR_IPSR_OFFSET", offsetof (struct pt_regs, cr_ipsr) }, 67 { "IA64_PT_REGS_CR_IIP_OFFSET", offsetof (struct pt_regs, cr_iip) }, 68 { "IA64_PT_REGS_CR_IFS_OFFSET", offsetof (struct pt_regs, cr_ifs) }, 69 { "IA64_PT_REGS_AR_UNAT_OFFSET", offsetof (struct pt_regs, ar_unat) }, 70 { "IA64_PT_REGS_AR_PFS_OFFSET", offsetof (struct pt_regs, ar_pfs) }, 71 { "IA64_PT_REGS_AR_RSC_OFFSET", offsetof (struct pt_regs, ar_rsc) }, 72 { "IA64_PT_REGS_AR_RNAT_OFFSET", offsetof (struct pt_regs, ar_rnat) }, 73 { "IA64_PT_REGS_AR_BSPSTORE_OFFSET",offsetof (struct pt_regs, ar_bspstore) }, 74 { "IA64_PT_REGS_PR_OFFSET", offsetof (struct pt_regs, pr) }, 75 { "IA64_PT_REGS_B6_OFFSET", offsetof (struct pt_regs, b6) }, 76 { "IA64_PT_REGS_LOADRS_OFFSET", offsetof (struct pt_regs, loadrs) }, 77 { "IA64_PT_REGS_R1_OFFSET", offsetof (struct pt_regs, r1) }, 78 { "IA64_PT_REGS_R2_OFFSET", offsetof (struct pt_regs, r2) }, 79 { "IA64_PT_REGS_R3_OFFSET", offsetof (struct pt_regs, r3) }, 80 { "IA64_PT_REGS_R12_OFFSET", offsetof (struct pt_regs, r12) }, 81 { "IA64_PT_REGS_R13_OFFSET", offsetof (struct pt_regs, r13) }, 82 { "IA64_PT_REGS_R14_OFFSET", offsetof (struct pt_regs, r14) }, 83 { "IA64_PT_REGS_R15_OFFSET", offsetof (struct pt_regs, r15) }, 84 { "IA64_PT_REGS_R8_OFFSET", offsetof (struct pt_regs, r8) }, 85 { "IA64_PT_REGS_R9_OFFSET", offsetof (struct pt_regs, r9) }, 86 { "IA64_PT_REGS_R10_OFFSET", offsetof (struct pt_regs, r10) }, 87 { "IA64_PT_REGS_R11_OFFSET", offsetof (struct pt_regs, r11) }, 88 { "IA64_PT_REGS_R16_OFFSET", offsetof (struct pt_regs, r16) }, 89 { "IA64_PT_REGS_R17_OFFSET", offsetof (struct pt_regs, r17) }, 90 { "IA64_PT_REGS_R18_OFFSET", offsetof (struct pt_regs, r18) }, 91 { "IA64_PT_REGS_R19_OFFSET", offsetof (struct pt_regs, r19) }, 92 { "IA64_PT_REGS_R20_OFFSET", offsetof (struct pt_regs, r20) }, 93 { "IA64_PT_REGS_R21_OFFSET", offsetof (struct pt_regs, r21) }, 94 { "IA64_PT_REGS_R22_OFFSET", offsetof (struct pt_regs, r22) }, 95 { "IA64_PT_REGS_R23_OFFSET", offsetof (struct pt_regs, r23) }, 96 { "IA64_PT_REGS_R24_OFFSET", offsetof (struct pt_regs, r24) }, 97 { "IA64_PT_REGS_R25_OFFSET", offsetof (struct pt_regs, r25) }, 98 { "IA64_PT_REGS_R26_OFFSET", offsetof (struct pt_regs, r26) }, 99 { "IA64_PT_REGS_R27_OFFSET", offsetof (struct pt_regs, r27) }, 100 { "IA64_PT_REGS_R28_OFFSET", offsetof (struct pt_regs, r28) }, 101 { "IA64_PT_REGS_R29_OFFSET", offsetof (struct pt_regs, r29) }, 102 { "IA64_PT_REGS_R30_OFFSET", offsetof (struct pt_regs, r30) }, 103 { "IA64_PT_REGS_R31_OFFSET", offsetof (struct pt_regs, r31) }, 104 { "IA64_PT_REGS_AR_CCV_OFFSET", offsetof (struct pt_regs, ar_ccv) }, 105 { "IA64_PT_REGS_AR_FPSR_OFFSET", offsetof (struct pt_regs, ar_fpsr) }, 106 { "IA64_PT_REGS_B0_OFFSET", offsetof (struct pt_regs, b0) }, 107 { "IA64_PT_REGS_B7_OFFSET", offsetof (struct pt_regs, b7) }, 108 { "IA64_PT_REGS_F6_OFFSET", offsetof (struct pt_regs, f6) }, 109 { "IA64_PT_REGS_F7_OFFSET", offsetof (struct pt_regs, f7) }, 110 { "IA64_PT_REGS_F8_OFFSET", offsetof (struct pt_regs, f8) }, 111 { "IA64_PT_REGS_F9_OFFSET", offsetof (struct pt_regs, f9) }, 112 { "IA64_SWITCH_STACK_CALLER_UNAT_OFFSET", offsetof (struct switch_stack, caller_unat) }, 113 { "IA64_SWITCH_STACK_AR_FPSR_OFFSET", offsetof (struct switch_stack, ar_fpsr) }, 114 { "IA64_SWITCH_STACK_F2_OFFSET", offsetof (struct switch_stack, f2) }, 115 { "IA64_SWITCH_STACK_F3_OFFSET", offsetof (struct switch_stack, f3) }, 116 { "IA64_SWITCH_STACK_F4_OFFSET", offsetof (struct switch_stack, f4) }, 117 { "IA64_SWITCH_STACK_F5_OFFSET", offsetof (struct switch_stack, f5) }, 118 { "IA64_SWITCH_STACK_F10_OFFSET", offsetof (struct switch_stack, f10) }, 119 { "IA64_SWITCH_STACK_F11_OFFSET", offsetof (struct switch_stack, f11) }, 120 { "IA64_SWITCH_STACK_F12_OFFSET", offsetof (struct switch_stack, f12) }, 121 { "IA64_SWITCH_STACK_F13_OFFSET", offsetof (struct switch_stack, f13) }, 122 { "IA64_SWITCH_STACK_F14_OFFSET", offsetof (struct switch_stack, f14) }, 123 { "IA64_SWITCH_STACK_F15_OFFSET", offsetof (struct switch_stack, f15) }, 124 { "IA64_SWITCH_STACK_F16_OFFSET", offsetof (struct switch_stack, f16) }, 125 { "IA64_SWITCH_STACK_F17_OFFSET", offsetof (struct switch_stack, f17) }, 126 { "IA64_SWITCH_STACK_F18_OFFSET", offsetof (struct switch_stack, f18) }, 127 { "IA64_SWITCH_STACK_F19_OFFSET", offsetof (struct switch_stack, f19) }, 128 { "IA64_SWITCH_STACK_F20_OFFSET", offsetof (struct switch_stack, f20) }, 129 { "IA64_SWITCH_STACK_F21_OFFSET", offsetof (struct switch_stack, f21) }, 130 { "IA64_SWITCH_STACK_F22_OFFSET", offsetof (struct switch_stack, f22) }, 131 { "IA64_SWITCH_STACK_F23_OFFSET", offsetof (struct switch_stack, f23) }, 132 { "IA64_SWITCH_STACK_F24_OFFSET", offsetof (struct switch_stack, f24) }, 133 { "IA64_SWITCH_STACK_F25_OFFSET", offsetof (struct switch_stack, f25) }, 134 { "IA64_SWITCH_STACK_F26_OFFSET", offsetof (struct switch_stack, f26) }, 135 { "IA64_SWITCH_STACK_F27_OFFSET", offsetof (struct switch_stack, f27) }, 136 { "IA64_SWITCH_STACK_F28_OFFSET", offsetof (struct switch_stack, f28) }, 137 { "IA64_SWITCH_STACK_F29_OFFSET", offsetof (struct switch_stack, f29) }, 138 { "IA64_SWITCH_STACK_F30_OFFSET", offsetof (struct switch_stack, f30) }, 139 { "IA64_SWITCH_STACK_F31_OFFSET", offsetof (struct switch_stack, f31) }, 140 { "IA64_SWITCH_STACK_R4_OFFSET", offsetof (struct switch_stack, r4) }, 141 { "IA64_SWITCH_STACK_R5_OFFSET", offsetof (struct switch_stack, r5) }, 142 { "IA64_SWITCH_STACK_R6_OFFSET", offsetof (struct switch_stack, r6) }, 143 { "IA64_SWITCH_STACK_R7_OFFSET", offsetof (struct switch_stack, r7) }, 144 { "IA64_SWITCH_STACK_B0_OFFSET", offsetof (struct switch_stack, b0) }, 145 { "IA64_SWITCH_STACK_B1_OFFSET", offsetof (struct switch_stack, b1) }, 146 { "IA64_SWITCH_STACK_B2_OFFSET", offsetof (struct switch_stack, b2) }, 147 { "IA64_SWITCH_STACK_B3_OFFSET", offsetof (struct switch_stack, b3) }, 148 { "IA64_SWITCH_STACK_B4_OFFSET", offsetof (struct switch_stack, b4) }, 149 { "IA64_SWITCH_STACK_B5_OFFSET", offsetof (struct switch_stack, b5) }, 150 { "IA64_SWITCH_STACK_AR_PFS_OFFSET", offsetof (struct switch_stack, ar_pfs) }, 151 { "IA64_SWITCH_STACK_AR_LC_OFFSET", offsetof (struct switch_stack, ar_lc) }, 152 { "IA64_SWITCH_STACK_AR_UNAT_OFFSET", offsetof (struct switch_stack, ar_unat) }, 153 { "IA64_SWITCH_STACK_AR_RNAT_OFFSET", offsetof (struct switch_stack, ar_rnat) }, 154 { "IA64_SWITCH_STACK_AR_BSPSTORE_OFFSET", offsetof (struct switch_stack, ar_bspstore) }, 155 { "IA64_SWITCH_STACK_PR_OFFSET", offsetof (struct switch_stack, pr) }, 156 { "IA64_SIGCONTEXT_IP_OFFSET", offsetof (struct sigcontext, sc_ip) }, 157 { "IA64_SIGCONTEXT_AR_BSP_OFFSET", offsetof (struct sigcontext, sc_ar_bsp) }, 158 { "IA64_SIGCONTEXT_AR_FPSR_OFFSET", offsetof (struct sigcontext, sc_ar_fpsr) }, 159 { "IA64_SIGCONTEXT_AR_RNAT_OFFSET", offsetof (struct sigcontext, sc_ar_rnat) }, 160 { "IA64_SIGCONTEXT_AR_UNAT_OFFSET", offsetof (struct sigcontext, sc_ar_unat) }, 161 { "IA64_SIGCONTEXT_B0_OFFSET", offsetof (struct sigcontext, sc_br[0]) }, 162 { "IA64_SIGCONTEXT_CFM_OFFSET", offsetof (struct sigcontext, sc_cfm) }, 163 { "IA64_SIGCONTEXT_FLAGS_OFFSET", offsetof (struct sigcontext, sc_flags) }, 164 { "IA64_SIGCONTEXT_FR6_OFFSET", offsetof (struct sigcontext, sc_fr[6]) }, 165 { "IA64_SIGCONTEXT_PR_OFFSET", offsetof (struct sigcontext, sc_pr) }, 166 { "IA64_SIGCONTEXT_R12_OFFSET", offsetof (struct sigcontext, sc_gr[12]) }, 167 { "IA64_SIGCONTEXT_RBS_BASE_OFFSET",offsetof (struct sigcontext, sc_rbs_base) }, 168 { "IA64_SIGCONTEXT_LOADRS_OFFSET", offsetof (struct sigcontext, sc_loadrs) }, 169 { "IA64_SIGFRAME_ARG0_OFFSET", offsetof (struct sigframe, arg0) }, 170 { "IA64_SIGFRAME_ARG1_OFFSET", offsetof (struct sigframe, arg1) }, 171 { "IA64_SIGFRAME_ARG2_OFFSET", offsetof (struct sigframe, arg2) }, 172 { "IA64_SIGFRAME_HANDLER_OFFSET", offsetof (struct sigframe, handler) }, 173 { "IA64_SIGFRAME_SIGCONTEXT_OFFSET", offsetof (struct sigframe, sc) }, 174 { "IA64_CLONE_VFORK", CLONE_VFORK }, 175 { "IA64_CLONE_VM", CLONE_VM }, 176 { "IA64_CPU_IRQ_COUNT_OFFSET", offsetof (struct cpuinfo_ia64, irq_stat.f.irq_count) }, 177 { "IA64_CPU_BH_COUNT_OFFSET", offsetof (struct cpuinfo_ia64, irq_stat.f.bh_count) }, 178 { "IA64_CPU_PHYS_STACKED_SIZE_P8_OFFSET",offsetof (struct cpuinfo_ia64, phys_stacked_size_p8)}, 179}; 180 181static const char *tabs = "\t\t\t\t\t\t\t\t\t\t"; 182 183int 184main (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 /* This is stretching things a bit, but entry.S needs the bit number 197 for PT_PTRACED and it can't include <linux/sched.h> so this seems 198 like a reasonably solution. At least the code won't break in 199 subtle ways should PT_PTRACED ever change. Ditto for 200 PT_TRACESYS_BIT. */ 201 printf ("#define PT_PTRACED_BIT\t\t\t%u\n", ffs (PT_PTRACED) - 1); 202 printf ("#define PT_TRACESYS_BIT\t\t\t%u\n\n", ffs (PT_TRACESYS) - 1); 203 204 for (i = 0; i < sizeof (tab) / sizeof (tab[0]); ++i) 205 { 206 if (tab[i].name[0] == '\0') 207 printf ("\n"); 208 else 209 { 210 len = strlen (tab[i].name); 211 212 num_tabs = (40 - len) / 8; 213 if (num_tabs <= 0) 214 space = " "; 215 else 216 space = strchr(tabs, '\0') - (40 - len) / 8; 217 218 printf ("#define %s%s%lu\t/* 0x%lx */\n", 219 tab[i].name, space, tab[i].value, tab[i].value); 220 } 221 } 222 223 printf ("\n#endif /* _ASM_IA64_OFFSETS_H */\n"); 224 return 0; 225} 226