1 from envi.archs.arm.const import *
2 import envi.registers as e_reg
3
4 arm_regs = (
5 ('r0', 32),
6 ('r1', 32),
7 ('r2', 32),
8 ('r3', 32),
9 ('r4', 32),
10 ('r5', 32),
11 ('r6', 32),
12 ('r7', 32),
13 ('r8', 32),
14 ('r9', 32),
15 ('sl', 32),
16 ('fp', 32),
17 ('ip', 32),
18 ('sp', 32),
19 ('lr', 32),
20 ('pc', 32),
21 ('cpsr', 32),
22
23
24 )
25
26 l = locals()
27 e_reg.addLocalEnums(l, arm_regs)
28
29 PSR_N = 31
30 PSR_Z = 30
31 PSR_C = 29
32 PSR_V = 28
33 PSR_Q = 27
34 PSR_J = 24
35 PSR_GE = 16
36 PSR_E = 9
37 PSR_A = 8
38 PSR_I = 7
39 PSR_F = 6
40 PSR_T = 5
41 PSR_M = 0
42
43 PSR_C_bit = 1 << PSR_C
44 PSR_C_mask = 0xffffffff ^ PSR_C_bit
45
46 psr_fields = [None for x in xrange(32)]
47 psr_fields[PSR_M] = "M"
48 psr_fields[PSR_T] = "T"
49 psr_fields[PSR_F] = "F"
50 psr_fields[PSR_I] = "I"
51 psr_fields[PSR_A] = "A"
52 psr_fields[PSR_E] = "E"
53 psr_fields[PSR_GE] = "GE"
54 psr_fields[PSR_GE+1] = "GE+1"
55 psr_fields[PSR_GE+2] = "GE+2"
56 psr_fields[PSR_GE+3] = "GE+3"
57 psr_fields[PSR_J] = "J"
58 psr_fields[PSR_Q] = "Q"
59 psr_fields[PSR_V] = "V"
60 psr_fields[PSR_C] = "C"
61 psr_fields[PSR_Z] = "Z"
62 psr_fields[PSR_N] = "N"
63
64
65 ArmMeta =tuple([("N", REG_FLAGS, PSR_N, 1),
66 ("Z", REG_FLAGS, PSR_Z, 1),
67 ("C", REG_FLAGS, PSR_C, 1),
68 ("V", REG_FLAGS, PSR_V, 1),
69 ("Q", REG_FLAGS, PSR_Q, 1),
70 ("J", REG_FLAGS, PSR_J, 1),
71 ("GE",REG_FLAGS, PSR_GE, 4),
72 ("E", REG_FLAGS, PSR_E, 1),
73 ("A", REG_FLAGS, PSR_A, 1),
74 ("I", REG_FLAGS, PSR_I, 1),
75 ("F", REG_FLAGS, PSR_F, 1),
76 ("T", REG_FLAGS, PSR_T, 1),
77 ("M", REG_FLAGS, PSR_M, 5),
78 ])
79
80
81 -class ArmRegisterContext(e_reg.RegisterContext):
87