@@ -19,21 +19,49 @@ def test(self):
1919 """Test that we can read the contents of the SME/SVE registers on Darwin"""
2020 self .build ()
2121 (target , process , thread , bkpt ) = lldbutil .run_to_source_breakpoint (
22- self , "break here " , lldb .SBFileSpec ("main.c" )
22+ self , "break before sme " , lldb .SBFileSpec ("main.c" )
2323 )
2424 frame = thread .GetFrameAtIndex (0 )
2525 self .assertTrue (frame .IsValid ())
2626
27+ self .assertTrue (
28+ target .BreakpointCreateBySourceRegex (
29+ "break while sme" , lldb .SBFileSpec ("main.c" )
30+ ).IsValid ()
31+ )
32+ self .assertTrue (
33+ target .BreakpointCreateBySourceRegex (
34+ "break after sme" , lldb .SBFileSpec ("main.c" )
35+ ).IsValid ()
36+ )
37+
2738 if self .TraceOn ():
2839 self .runCmd ("reg read -a" )
2940
30- svl_reg = frame .register ["svl" ]
31- svl = svl_reg .GetValueAsUnsigned ()
41+ self .assertTrue (frame .register ["svl" ].GetError ().Fail ())
42+ self .assertTrue (frame .register ["z0" ].GetError ().Fail ())
43+ self .assertTrue (frame .register ["p0" ].GetError ().Fail ())
44+ self .assertTrue (frame .register ["za" ].GetError ().Fail ())
45+ self .assertTrue (frame .register ["zt0" ].GetError ().Fail ())
46+
47+ process .Continue ()
48+ frame = thread .GetFrameAtIndex (0 )
49+ self .assertEqual (thread .GetStopReason (), lldb .eStopReasonBreakpoint )
50+
51+ # Now in SME enabled mode
52+ self .assertTrue (frame .register ["svl" ].GetError ().Success ())
53+ self .assertTrue (frame .register ["z0" ].GetError ().Success ())
54+ self .assertTrue (frame .register ["p0" ].GetError ().Success ())
55+ self .assertTrue (frame .register ["za" ].GetError ().Success ())
56+ self .assertTrue (frame .register ["zt0" ].GetError ().Success ())
3257
3358 # SSVE and SME modes should be enabled (reflecting PSTATE.SM and PSTATE.ZA)
3459 svcr = frame .register ["svcr" ]
3560 self .assertEqual (svcr .GetValueAsUnsigned (), 3 )
3661
62+ svl_reg = frame .register ["svl" ]
63+ svl = svl_reg .GetValueAsUnsigned ()
64+
3765 z0 = frame .register ["z0" ]
3866 self .assertEqual (z0 .GetNumChildren (), svl )
3967 self .assertEqual (z0 .GetChildAtIndex (0 ).GetValueAsUnsigned (), 0x1 )
@@ -72,50 +100,66 @@ def test(self):
72100 zt0_final = zt0 .GetChildAtIndex (63 )
73101 self .assertEqual (zt0_final .GetValueAsUnsigned (), 63 )
74102
103+ # Modify all of the registers, instruction step, confirm that the
104+ # registers have the new values. Without the instruction step, it's
105+ # possible debugserver or lldb could lie about the write succeeding.
106+
75107 z0_old_values = []
108+ z0_new_values = []
76109 z0_new_str = '"{'
77110 for i in range (svl ):
78111 z0_old_values .append (z0 .GetChildAtIndex (i ).GetValueAsUnsigned ())
112+ z0_new_values .append (z0 .GetChildAtIndex (i ).GetValueAsUnsigned () + 5 )
79113 z0_new_str = z0_new_str + ("0x%02x " % (z0_old_values [i ] + 5 ))
80114 z0_new_str = z0_new_str + '}"'
81115 self .runCmd ("reg write z0 %s" % z0_new_str )
82116
83117 z31_old_values = []
118+ z31_new_values = []
84119 z31_new_str = '"{'
85120 for i in range (svl ):
86121 z31_old_values .append (z31 .GetChildAtIndex (i ).GetValueAsUnsigned ())
122+ z31_new_values .append (z31 .GetChildAtIndex (i ).GetValueAsUnsigned () + 3 )
87123 z31_new_str = z31_new_str + ("0x%02x " % (z31_old_values [i ] + 3 ))
88124 z31_new_str = z31_new_str + '}"'
89125 self .runCmd ("reg write z31 %s" % z31_new_str )
90126
91127 p0_old_values = []
128+ p0_new_values = []
92129 p0_new_str = '"{'
93130 for i in range (int (svl / 8 )):
94131 p0_old_values .append (p0 .GetChildAtIndex (i ).GetValueAsUnsigned ())
132+ p0_new_values .append (p0 .GetChildAtIndex (i ).GetValueAsUnsigned () - 5 )
95133 p0_new_str = p0_new_str + ("0x%02x " % (p0_old_values [i ] - 5 ))
96134 p0_new_str = p0_new_str + '}"'
97135 self .runCmd ("reg write p0 %s" % p0_new_str )
98136
99137 p15_old_values = []
138+ p15_new_values = []
100139 p15_new_str = '"{'
101140 for i in range (int (svl / 8 )):
102141 p15_old_values .append (p15 .GetChildAtIndex (i ).GetValueAsUnsigned ())
142+ p15_new_values .append (p15 .GetChildAtIndex (i ).GetValueAsUnsigned () - 8 )
103143 p15_new_str = p15_new_str + ("0x%02x " % (p15_old_values [i ] - 8 ))
104144 p15_new_str = p15_new_str + '}"'
105145 self .runCmd ("reg write p15 %s" % p15_new_str )
106146
107147 za_old_values = []
148+ za_new_values = []
108149 za_new_str = '"{'
109150 for i in range (svl * svl ):
110151 za_old_values .append (za .GetChildAtIndex (i ).GetValueAsUnsigned ())
152+ za_new_values .append (za .GetChildAtIndex (i ).GetValueAsUnsigned () + 7 )
111153 za_new_str = za_new_str + ("0x%02x " % (za_old_values [i ] + 7 ))
112154 za_new_str = za_new_str + '}"'
113155 self .runCmd ("reg write za %s" % za_new_str )
114156
115157 zt0_old_values = []
158+ zt0_new_values = []
116159 zt0_new_str = '"{'
117160 for i in range (64 ):
118161 zt0_old_values .append (zt0 .GetChildAtIndex (i ).GetValueAsUnsigned ())
162+ zt0_new_values .append (zt0 .GetChildAtIndex (i ).GetValueAsUnsigned () + 2 )
119163 zt0_new_str = zt0_new_str + ("0x%02x " % (zt0_old_values [i ] + 2 ))
120164 zt0_new_str = zt0_new_str + '}"'
121165 self .runCmd ("reg write zt0 %s" % zt0_new_str )
@@ -129,35 +173,45 @@ def test(self):
129173 z0 = frame .register ["z0" ]
130174 for i in range (z0 .GetNumChildren ()):
131175 self .assertEqual (
132- z0_old_values [i ] + 5 , z0 .GetChildAtIndex (i ).GetValueAsUnsigned ()
176+ z0_new_values [i ], z0 .GetChildAtIndex (i ).GetValueAsUnsigned ()
133177 )
134178
135179 z31 = frame .register ["z31" ]
136180 for i in range (z31 .GetNumChildren ()):
137181 self .assertEqual (
138- z31_old_values [i ] + 3 , z31 .GetChildAtIndex (i ).GetValueAsUnsigned ()
182+ z31_new_values [i ], z31 .GetChildAtIndex (i ).GetValueAsUnsigned ()
139183 )
140184
141185 p0 = frame .register ["p0" ]
142186 for i in range (p0 .GetNumChildren ()):
143187 self .assertEqual (
144- p0_old_values [i ] - 5 , p0 .GetChildAtIndex (i ).GetValueAsUnsigned ()
188+ p0_new_values [i ], p0 .GetChildAtIndex (i ).GetValueAsUnsigned ()
145189 )
146190
147191 p15 = frame .register ["p15" ]
148192 for i in range (p15 .GetNumChildren ()):
149193 self .assertEqual (
150- p15_old_values [i ] - 8 , p15 .GetChildAtIndex (i ).GetValueAsUnsigned ()
194+ p15_new_values [i ], p15 .GetChildAtIndex (i ).GetValueAsUnsigned ()
151195 )
152196
153197 za = frame .register ["za" ]
154198 for i in range (za .GetNumChildren ()):
155199 self .assertEqual (
156- za_old_values [i ] + 7 , za .GetChildAtIndex (i ).GetValueAsUnsigned ()
200+ za_new_values [i ], za .GetChildAtIndex (i ).GetValueAsUnsigned ()
157201 )
158202
159203 zt0 = frame .register ["zt0" ]
160204 for i in range (zt0 .GetNumChildren ()):
161205 self .assertEqual (
162- zt0_old_values [i ] + 2 , zt0 .GetChildAtIndex (i ).GetValueAsUnsigned ()
206+ zt0_new_values [i ], zt0 .GetChildAtIndex (i ).GetValueAsUnsigned ()
163207 )
208+
209+ process .Continue ()
210+ frame = thread .GetFrameAtIndex (0 )
211+ self .assertEqual (thread .GetStopReason (), lldb .eStopReasonBreakpoint )
212+
213+ self .assertTrue (frame .register ["svl" ].GetError ().Fail ())
214+ self .assertTrue (frame .register ["z0" ].GetError ().Fail ())
215+ self .assertTrue (frame .register ["p0" ].GetError ().Fail ())
216+ self .assertTrue (frame .register ["za" ].GetError ().Fail ())
217+ self .assertTrue (frame .register ["zt0" ].GetError ().Fail ())
0 commit comments