diff --git a/gdb-port/tests/integration/test_stack_frame_parser_context.py b/gdb-port/tests/integration/test_stack_frame_parser_context.py index e41f6dbe3c5fa2f43e2f150637fdfd26f882e858..59e3abe10ad0672b799f40906b8389119629f5c6 100644 --- a/gdb-port/tests/integration/test_stack_frame_parser_context.py +++ b/gdb-port/tests/integration/test_stack_frame_parser_context.py @@ -46,6 +46,13 @@ class TestParserContextWhenReturningFromStackFrames(unittest.TestCase): def setUp(self): self.a = Parser("a", 128) self.b = Parser("b", 32) + self.harena_t = gdb.lookup_type("HArena") + self.arena = gdb.parse_and_eval("malloc(sizeof(HArena))").cast(self.harena_t.pointer()).dereference() # Quick and dirty way to allocate something in the process GDB is debugging (the inferior) + self.hps_t = gdb.lookup_type("HParseState") + self.test_parse_state = gdb.parse_and_eval("malloc(sizeof(HParseState))").cast(self.hps_t.pointer()).dereference() + # TODO: make this independent of endianness and pointer size + gdb.selected_inferior().write_memory(int(self.test_parse_state.address)+(self.hps_t['arena'].bitpos//8), int(self.arena.address).to_bytes(8, 'little')) # horrible, horrible way to set the + self.hps_t = self.test_parse_state.address.dereference() # "refresh" the gdb.Value, since the effects of .write_memory() don't seem to show up self.top_level_parse = TopLevelParse() self.top_level_parse.parser_objs[32] = self.b self.top_level_parse.parser_objs[128] = self.a @@ -55,10 +62,10 @@ class TestParserContextWhenReturningFromStackFrames(unittest.TestCase): self.top_level_parse.enter_h_packrat_parse(self.a.address) #TODO: are we initializing from scratch for every test? - self.top_level_parse.enter_h_do_parse(400, 256, self.a.address) + self.top_level_parse.enter_h_do_parse(self.test_parse_state.address, self.arena.address, self.a.address) self.top_level_parse.parse_virtual(self.a.address) self.top_level_parse.enter_perform_lowlevel_parse(self.a.address) - self.top_level_parse.enter_h_do_parse(400, 256, self.b.address) + self.top_level_parse.enter_h_do_parse(self.test_parse_state.address, self.arena.address, self.b.address) self.top_level_parse.parse_virtual(self.b.address) self.top_level_parse.enter_perform_lowlevel_parse(self.b.address) @@ -68,8 +75,9 @@ class TestParserContextWhenReturningFromStackFrames(unittest.TestCase): def test_after_return_from_h_do_parse(self): hps_t = gdb.lookup_type("HParseState") - test_parse_state = gdb.Value(b'\x00'*80, hps_t) + #test_parse_state = gdb.Value(b'\x00'*80, hps_t) + test_parse_state = gdb.parse_and_eval("malloc(sizeof(HParseState))").cast(hps_t.pointer()).dereference() self.top_level_parse.return_from_perform_lowlevel_parse() - self.top_level_parse.return_from_h_do_parse(test_parse_state, self.b.address, 0) + self.top_level_parse.return_from_h_do_parse(self.test_parse_state.address, self.b.address, 0) self.assertIs(self.top_level_parse.peek_parser(), self.a)