source: rtems-tools/tools/gdb/python/sparc.py @ 04a5204

4.105
Last change on this file since 04a5204 was 04a5204, checked in by Sebastian Huber <sebastian.huber@…>, on 11/12/15 at 10:15:23

Python 3 compatibility

  • Property mode set to 100644
File size: 3.5 KB
Line 
1#
2# RTEMS gdb extensions
3# sparc archetecture specific abstractions
4
5from helper import test_bit
6
7
8
9class register:
10    '''SPARC Registers'''
11
12    class psr:
13        '''status register'''
14
15        sv_table = {
16            0 : 'user',
17            1 : 'superviser'
18        }
19
20
21        def __init__(self, psr):
22            self.psr = psr
23
24        def current_window(self):
25            return int(self.psr & 0xf)
26
27        def traps(self):
28            return test_bit(self.psr, 5)
29
30        def prev_superviser(self):
31            return int(test_bit(self.psr,6))
32
33        def superviser(self):
34            return int(test_bit(self.psr,7))
35
36        def interrupt_level(self):
37            # bits 8 to 11
38            return (self.spr & 0x780) >> 7
39
40        def floating_point_status(self):
41            return test_bit(self.psr, 12)
42
43        def coproc_status(self):
44            return test_bit(self.psr,13)
45
46        def carry(self):
47            return test_bit(self.psr, 20)
48
49        def overflow(self):
50            return test_bit(self.psr, 21)
51
52        def zero(self):
53            return test_bit(self.psr, 22)
54
55        def icc(self):
56            n = test_bit(self.psr,23)
57            z = test_bit(self.psr,22)
58            v = test_bit(self.psr,21)
59            c = test_bit(self.psr,20)
60            return (n,z,v,c)
61
62        def to_string(self):
63            val = "     Status Register"
64            val += "\n         R Window : " + str(self.current_window())
65            val += "\n    Traps Enabled : " + str(self.traps())
66            val += "\n   Flaoting Point : " + str(self.floating_point_status())
67            val += "\n      Coprocessor : " + str(self.coproc_status())
68            val += "\n   Processor Mode : " + self.sv_table[self.superviser()]
69            val += "\n       Prev. Mode : " + self.sv_table[self.superviser()]
70            val += "\n            Carry : " + str(int(self.carry()))
71            val += "\n         Overflow : " + str(int(self.overflow()))
72            val += "\n             Zero : " + str(int(self.zero()))
73
74            return val
75
76    def __init__(self, reg):
77        self.reg = reg
78
79    def global_regs(self):
80        val = [self.reg['g0_g1']]
81
82        for i in range(2,7):
83            val.append(int(self.reg['g'+str(i)]))
84        return val
85
86    def local_regs(self):
87        val = []
88
89        for i in range(0,8):
90            val.append(self.reg['l'+str(i)])
91        return val
92
93    def in_regs(self):
94        val = []
95
96        for i in range(0,8):
97            if i==6:
98                val.append(self.reg['i6_fp'])
99            else:
100                val.append(self.reg['i'+str(i)])
101        return val
102
103    def out_regs(self):
104        val = []
105
106        for i in range(0,8):
107            if i==6:
108                val.append(self.reg['o6_sp'])
109            else:
110                val.append(self.reg['o'+str(i)])
111        return val
112
113    def status(self):
114        return self.psr(self.reg['psr'])
115
116    def show(self):
117        print('         Global Regs:',)
118        print(' [',)
119        for i in self.global_regs():
120            print(str(i)+',',)
121        print('\b\b ]')
122
123        print('          Local Regs:',)
124        print(' [',)
125        for i in self.local_regs():
126            print(str(i)+',',)
127        print('\b\b ]')
128
129        print('             In Regs:',)
130        print(' [',)
131        for i in self.in_regs():
132            print(str(i)+',',)
133        print('\b\b ]')
134
135        print('            Out Regs:',)
136        print(' [',)
137        for i in self.out_regs():
138            print(str(i)+',',)
139        print('\b\b ]')
140
141        sr = self.status()
142        print(sr.to_string())
Note: See TracBrowser for help on using the repository browser.