@@ -17,11 +17,14 @@ def read_ptr_from_memory(self, process, addr):
1717
1818 # Check that the CFA chain is correctly built
1919 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+ )
2123 expected_cfas = [async_cfas [0 ]]
2224 # The CFA chain ends in nullptr.
2325 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 ))
2528
2629 self .assertEqual (async_cfas , expected_cfas [:- 1 ])
2730
@@ -43,13 +46,10 @@ def check_async_regs_one_frame(self, frame, process):
4346
4447 cfa = frame .GetCFA ()
4548 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 ()
4850 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 ))
5353
5454 def check_async_regs (self , async_frames , process ):
5555 for frame in async_frames :
0 commit comments