ptrace.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:2k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  *  linux/include/asm-arm/proc-armo/ptrace.h
  3.  *
  4.  *  Copyright (C) 1996-2001 Russell King
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  */
  10. #ifndef __ASM_PROC_PTRACE_H
  11. #define __ASM_PROC_PTRACE_H
  12. #define USR26_MODE 0x00
  13. #define FIQ26_MODE 0x01
  14. #define IRQ26_MODE 0x02
  15. #define SVC26_MODE 0x03
  16. #define USR_MODE USR26_MODE
  17. #define FIQ_MODE FIQ26_MODE
  18. #define IRQ_MODE IRQ26_MODE
  19. #define SVC_MODE SVC26_MODE
  20. #define MODE_MASK 0x03
  21. #define F_BIT (1 << 26)
  22. #define I_BIT (1 << 27)
  23. #define CC_V_BIT (1 << 28)
  24. #define CC_C_BIT (1 << 29)
  25. #define CC_Z_BIT (1 << 30)
  26. #define CC_N_BIT (1 << 31)
  27. #define PCMASK 0xfc000003
  28. #ifndef __ASSEMBLY__
  29. /* this struct defines the way the registers are stored on the
  30.    stack during a system call. */
  31. struct pt_regs {
  32. long uregs[17];
  33. };
  34. #define ARM_pc uregs[15]
  35. #define ARM_lr uregs[14]
  36. #define ARM_sp uregs[13]
  37. #define ARM_ip uregs[12]
  38. #define ARM_fp uregs[11]
  39. #define ARM_r10 uregs[10]
  40. #define ARM_r9 uregs[9]
  41. #define ARM_r8 uregs[8]
  42. #define ARM_r7 uregs[7]
  43. #define ARM_r6 uregs[6]
  44. #define ARM_r5 uregs[5]
  45. #define ARM_r4 uregs[4]
  46. #define ARM_r3 uregs[3]
  47. #define ARM_r2 uregs[2]
  48. #define ARM_r1 uregs[1]
  49. #define ARM_r0 uregs[0]
  50. #define ARM_ORIG_r0 uregs[16]
  51. #ifdef __KERNEL__
  52. #define processor_mode(regs) 
  53. ((regs)->ARM_pc & MODE_MASK)
  54. #define user_mode(regs) 
  55. (processor_mode(regs) == USR26_MODE)
  56. #define thumb_mode(regs) (0)
  57. #define interrupts_enabled(regs) 
  58. (!((regs)->ARM_pc & I_BIT))
  59. #define fast_interrupts_enabled(regs) 
  60. (!((regs)->ARM_pc & F_BIT))
  61. #define condition_codes(regs) 
  62. ((regs)->ARM_pc & (CC_V_BIT|CC_C_BIT|CC_Z_BIT|CC_N_BIT))
  63. /* Are the current registers suitable for user mode?
  64.  * (used to maintain security in signal handlers)
  65.  */
  66. static inline int valid_user_regs(struct pt_regs *regs)
  67. {
  68. if (user_mode(regs) &&
  69.     (regs->ARM_pc & (F_BIT | I_BIT)) == 0)
  70. return 1;
  71. /*
  72.  * force it to be something sensible
  73.  */
  74. regs->ARM_pc &= ~(MODE_MASK | F_BIT | I_BIT);
  75. return 0;
  76. }
  77. #endif /* __KERNEL__ */
  78. #endif /* __ASSEMBLY__ */
  79. #endif