From 1d5f11a0b5d14e77962efb7dfe103616b1a317d7 Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Sat, 13 May 2023 19:28:01 +0200 Subject: [PATCH] (WIP) commit_at_pop no longer updates the parsers directly --- gdb-port/parser.py | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/gdb-port/parser.py b/gdb-port/parser.py index e6774d0..bc5d24b 100644 --- a/gdb-port/parser.py +++ b/gdb-port/parser.py @@ -148,8 +148,10 @@ class ParserStack: # TODO: where should commit_at_push() be called? HDoParseBreakpoint determines whether to stop, which ParserStack doesn't know about. could be a bool parameter to push() if should_commit: allocs = self.commit_at_push() + pending_allocs = self.pending_allocs.get(self.arena_int, {}) for addr, alloc in allocs.items(): - self.pending_allocs[self.arena_int][addr] = self.pending_allocs[self.arena_int].get(addr, 0) + alloc + pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc + self.pending_allocs[self.arena_int] = pending_allocs def pop(self): parser_obj = self.peek() @@ -161,9 +163,11 @@ class ParserStack: self.stack_events.append((StackEvent.POP, int(self.parse_state_gdbval['arena']['arena_malloc_bytes']), parser_obj)) allocs = self.commit_at_pop() + penting_allocs = self.pending_allocs.get(self.arena_int, {}) # TODO: where do we commit unclaimed allocs in a parserstack? for addr, alloc in allocs.items(): - self.pending_allocs[self.arena_int][addr] = self.pending_allocs[self.arena_int].get(addr, 0) + alloc + pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc + self.pending_allocs[self.arena_int] = pending_allocs #print("adding mem use: parser:", str(parser_obj), "arena:", hex(int(self.arena)), "bytes:", allocated_bytes) # DEBUG #print("adding mem use (alternate): parser:", str(parser_obj), "arena:", hex(int(self.arena)), "bytes:", allocs) # DEBUG #parser_obj.add_mem_use(int(self.arena), allocs) @@ -314,9 +318,9 @@ class ParserStack: #print("commit_at_pop: pop_allocs:", pop_allocs) # DEBUG self.unclaimed_mem_use += pop_allocs.pop(0,0) # Account for allocs and remove with no parser, so it doesn't cause problems in the loop below - for parser_addr, alloc in pop_allocs.items(): - #top_level_parse.parser_by_address(parser_addr).add_mem_use(int(self.arena), alloc) - parser_cache[parser_addr].add_mem_use(self.arena_int, alloc) + #for parser_addr, alloc in pop_allocs.items(): + ##top_level_parse.parser_by_address(parser_addr).add_mem_use(int(self.arena), alloc) + #parser_cache[parser_addr].add_mem_use(self.arena_int, alloc) self.committed = len(self.stack_events)-1 return pop_allocs -- GitLab