offset.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /* Written 2000 by Andi Kleen */
  2. /* This program is never executed, just its assembly is examined for offsets 
  3.    (this trick is needed to get cross compiling right) */  
  4. /* $Id: offset.c,v 1.16 2002/07/18 13:41:46 ak Exp $ */
  5. #define ASM_OFFSET_H 1
  6. #ifndef __KERNEL__
  7. #define __KERNEL__ 
  8. #endif
  9. #include <linux/sched.h> 
  10. #include <linux/stddef.h>
  11. #include <linux/errno.h> 
  12. #include <asm/pda.h>
  13. #include <asm/hardirq.h>
  14. #include <asm/processor.h>
  15. #include <asm/desc.h>
  16. #define output(x) asm volatile ("--- " x)
  17. #define outconst(x,y) asm volatile ("--- " x : : "i" (y)) 
  18. int main(void) 
  19. output("/* Auto generated by arch/../tools/offset.c at " __DATE__ ". Do not edit. */n"); 
  20. output("#ifndef ASM_OFFSET_Hn");
  21. output("#define ASM_OFFSET_H 1n"); 
  22. // task struct entries needed by entry.S
  23. #define ENTRY(entry) outconst("#define tsk_" #entry " %0", offsetof(struct task_struct, entry))
  24. ENTRY(state);
  25. ENTRY(flags); 
  26. ENTRY(sigpending); 
  27. ENTRY(addr_limit); 
  28. ENTRY(need_resched); 
  29. ENTRY(exec_domain); 
  30. ENTRY(ptrace); 
  31. ENTRY(processor);
  32. ENTRY(need_resched); 
  33. ENTRY(thread); 
  34. #undef ENTRY
  35. #define ENTRY(entry) outconst("#define pda_" #entry " %0", offsetof(struct x8664_pda, entry))
  36. ENTRY(kernelstack); 
  37. ENTRY(oldrsp); 
  38. ENTRY(pcurrent); 
  39. ENTRY(irqrsp);
  40. ENTRY(irqcount);
  41. ENTRY(pgd_quick);
  42. ENTRY(pmd_quick);
  43. ENTRY(pte_quick);
  44. ENTRY(pgtable_cache_sz);
  45. ENTRY(cpunumber);
  46. ENTRY(irqstackptr);
  47. ENTRY(level4_pgt);
  48. #undef ENTRY
  49. output("#ifdef __ASSEMBLY__"); 
  50. outconst("#define PT_TRACESYS %0", PT_TRACESYS);
  51. outconst("#define TASK_SIZE %0", TASK_SIZE); 
  52. outconst("#define SIGCHLD %0", SIGCHLD);
  53. outconst("#define CLONE_VFORK %0", CLONE_VFORK); 
  54. outconst("#define CLONE_VM %0", CLONE_VM); 
  55. outconst("#define thread_flags %0" , offsetof(struct thread_struct, flags));
  56. outconst("#define ASM_THREAD_IA32 %0", THREAD_IA32);
  57. outconst("#define PER_CPU_GDT_SIZE %0", sizeof(struct per_cpu_gdt)); 
  58. output("#endif"); 
  59. output("#endifn"); 
  60. return(0);