@@ -17,11 +17,14 @@ def read_ptr_from_memory(self, process, addr):
17
17
18
18
# Check that the CFA chain is correctly built
19
19
def check_cfas (self , async_frames , process ):
20
- async_cfas = list (map (lambda frame : frame .GetCFA (), async_frames ))
20
+ async_cfas = list (
21
+ map (lambda frame : process .FixAddress (frame .GetCFA ()), async_frames )
22
+ )
21
23
expected_cfas = [async_cfas [0 ]]
22
24
# The CFA chain ends in nullptr.
23
25
while expected_cfas [- 1 ] != 0 :
24
- expected_cfas .append (self .read_ptr_from_memory (process , expected_cfas [- 1 ]))
26
+ indirect_ctx = self .read_ptr_from_memory (process , expected_cfas [- 1 ])
27
+ expected_cfas .append (process .FixAddress (indirect_ctx ))
25
28
26
29
self .assertEqual (async_cfas , expected_cfas [:- 1 ])
27
30
@@ -43,13 +46,10 @@ def check_async_regs_one_frame(self, frame, process):
43
46
44
47
cfa = frame .GetCFA ()
45
48
is_indirect = "await resume" in frame .GetFunctionName ()
46
- async_register = frame .FindRegister (async_reg_name ).GetValueAsUnsigned ()
47
-
49
+ async_ctx = frame .FindRegister (async_reg_name ).GetValueAsUnsigned ()
48
50
if is_indirect :
49
- deref_async_reg = self .read_ptr_from_memory (process , async_register )
50
- self .assertEqual (deref_async_reg , cfa )
51
- else :
52
- self .assertEqual (async_register , cfa )
51
+ async_ctx = self .read_ptr_from_memory (process , async_ctx )
52
+ self .assertEqual (process .FixAddress (async_ctx ), process .FixAddress (cfa ))
53
53
54
54
def check_async_regs (self , async_frames , process ):
55
55
for frame in async_frames :
0 commit comments