linux/arch/arm/kernel/asm-offsets.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 1995-2003 Russell King
   3 *               2001-2002 Keith Owens
   4 *     
   5 * Generate definitions needed by assembly language modules.
   6 * This code generates raw asm output which is post-processed to extract
   7 * and format the required data.
   8 *
   9 * This program is free software; you can redistribute it and/or modify
  10 * it under the terms of the GNU General Public License version 2 as
  11 * published by the Free Software Foundation.
  12 */
  13#include <linux/sched.h>
  14#include <linux/mm.h>
  15#include <asm/mach/arch.h>
  16#include <asm/thread_info.h>
  17#include <asm/memory.h>
  18#include <asm/procinfo.h>
  19#include <linux/kbuild.h>
  20
  21/*
  22 * Make sure that the compiler and target are compatible.
  23 */
  24#if defined(__APCS_26__)
  25#error Sorry, your compiler targets APCS-26 but this kernel requires APCS-32
  26#endif
  27/*
  28 * GCC 3.0, 3.1: general bad code generation.
  29 * GCC 3.2.0: incorrect function argument offset calculation.
  30 * GCC 3.2.x: miscompiles NEW_AUX_ENT in fs/binfmt_elf.c
  31 *            (http://gcc.gnu.org/PR8896) and incorrect structure
  32 *            initialisation in fs/jffs2/erase.c
  33 */
  34#if (__GNUC__ == 3 && __GNUC_MINOR__ < 3)
  35#error Your compiler is too buggy; it is known to miscompile kernels.
  36#error    Known good compilers: 3.3
  37#endif
  38
  39int main(void)
  40{
  41  DEFINE(TSK_ACTIVE_MM,         offsetof(struct task_struct, active_mm));
  42  BLANK();
  43  DEFINE(TI_FLAGS,              offsetof(struct thread_info, flags));
  44  DEFINE(TI_PREEMPT,            offsetof(struct thread_info, preempt_count));
  45  DEFINE(TI_ADDR_LIMIT,         offsetof(struct thread_info, addr_limit));
  46  DEFINE(TI_TASK,               offsetof(struct thread_info, task));
  47  DEFINE(TI_EXEC_DOMAIN,        offsetof(struct thread_info, exec_domain));
  48  DEFINE(TI_CPU,                offsetof(struct thread_info, cpu));
  49  DEFINE(TI_CPU_DOMAIN,         offsetof(struct thread_info, cpu_domain));
  50  DEFINE(TI_CPU_SAVE,           offsetof(struct thread_info, cpu_context));
  51  DEFINE(TI_USED_CP,            offsetof(struct thread_info, used_cp));
  52  DEFINE(TI_TP_VALUE,           offsetof(struct thread_info, tp_value));
  53  DEFINE(TI_FPSTATE,            offsetof(struct thread_info, fpstate));
  54  DEFINE(TI_VFPSTATE,           offsetof(struct thread_info, vfpstate));
  55#ifdef CONFIG_ARM_THUMBEE
  56  DEFINE(TI_THUMBEE_STATE,      offsetof(struct thread_info, thumbee_state));
  57#endif
  58#ifdef CONFIG_IWMMXT
  59  DEFINE(TI_IWMMXT_STATE,       offsetof(struct thread_info, fpstate.iwmmxt));
  60#endif
  61#ifdef CONFIG_CRUNCH
  62  DEFINE(TI_CRUNCH_STATE,       offsetof(struct thread_info, crunchstate));
  63#endif
  64  BLANK();
  65  DEFINE(S_R0,                  offsetof(struct pt_regs, ARM_r0));
  66  DEFINE(S_R1,                  offsetof(struct pt_regs, ARM_r1));
  67  DEFINE(S_R2,                  offsetof(struct pt_regs, ARM_r2));
  68  DEFINE(S_R3,                  offsetof(struct pt_regs, ARM_r3));
  69  DEFINE(S_R4,                  offsetof(struct pt_regs, ARM_r4));
  70  DEFINE(S_R5,                  offsetof(struct pt_regs, ARM_r5));
  71  DEFINE(S_R6,                  offsetof(struct pt_regs, ARM_r6));
  72  DEFINE(S_R7,                  offsetof(struct pt_regs, ARM_r7));
  73  DEFINE(S_R8,                  offsetof(struct pt_regs, ARM_r8));
  74  DEFINE(S_R9,                  offsetof(struct pt_regs, ARM_r9));
  75  DEFINE(S_R10,                 offsetof(struct pt_regs, ARM_r10));
  76  DEFINE(S_FP,                  offsetof(struct pt_regs, ARM_fp));
  77  DEFINE(S_IP,                  offsetof(struct pt_regs, ARM_ip));
  78  DEFINE(S_SP,                  offsetof(struct pt_regs, ARM_sp));
  79  DEFINE(S_LR,                  offsetof(struct pt_regs, ARM_lr));
  80  DEFINE(S_PC,                  offsetof(struct pt_regs, ARM_pc));
  81  DEFINE(S_PSR,                 offsetof(struct pt_regs, ARM_cpsr));
  82  DEFINE(S_OLD_R0,              offsetof(struct pt_regs, ARM_ORIG_r0));
  83  DEFINE(S_FRAME_SIZE,          sizeof(struct pt_regs));
  84  BLANK();
  85#ifdef CONFIG_CPU_HAS_ASID
  86  DEFINE(MM_CONTEXT_ID,         offsetof(struct mm_struct, context.id));
  87  BLANK();
  88#endif
  89  DEFINE(VMA_VM_MM,             offsetof(struct vm_area_struct, vm_mm));
  90  DEFINE(VMA_VM_FLAGS,          offsetof(struct vm_area_struct, vm_flags));
  91  BLANK();
  92  DEFINE(VM_EXEC,               VM_EXEC);
  93  BLANK();
  94  DEFINE(PAGE_SZ,               PAGE_SIZE);
  95  BLANK();
  96  DEFINE(SYS_ERROR0,            0x9f0000);
  97  BLANK();
  98  DEFINE(SIZEOF_MACHINE_DESC,   sizeof(struct machine_desc));
  99  DEFINE(MACHINFO_TYPE,         offsetof(struct machine_desc, nr));
 100  DEFINE(MACHINFO_NAME,         offsetof(struct machine_desc, name));
 101  DEFINE(MACHINFO_PHYSIO,       offsetof(struct machine_desc, phys_io));
 102  DEFINE(MACHINFO_PGOFFIO,      offsetof(struct machine_desc, io_pg_offst));
 103  BLANK();
 104  DEFINE(PROC_INFO_SZ,          sizeof(struct proc_info_list));
 105  DEFINE(PROCINFO_INITFUNC,     offsetof(struct proc_info_list, __cpu_flush));
 106  DEFINE(PROCINFO_MM_MMUFLAGS,  offsetof(struct proc_info_list, __cpu_mm_mmu_flags));
 107  DEFINE(PROCINFO_IO_MMUFLAGS,  offsetof(struct proc_info_list, __cpu_io_mmu_flags));
 108  BLANK();
 109#ifdef MULTI_DABORT
 110  DEFINE(PROCESSOR_DABT_FUNC,   offsetof(struct processor, _data_abort));
 111#endif
 112#ifdef MULTI_PABORT
 113  DEFINE(PROCESSOR_PABT_FUNC,   offsetof(struct processor, _prefetch_abort));
 114#endif
 115  return 0; 
 116}
 117