From af5a9eec9a364519123b050bdef0675f1564b031 Mon Sep 17 00:00:00 2001 From: pompolic <pompolic@special-circumstanc.es> Date: Sun, 14 May 2023 21:21:02 +0200 Subject: [PATCH] (WIP) Update ParserStack.push() and .pop() --- gdb-port/parser.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/gdb-port/parser.py b/gdb-port/parser.py index cbc97e6..5c10d08 100644 --- a/gdb-port/parser.py +++ b/gdb-port/parser.py @@ -148,10 +148,9 @@ 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(): - pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc - self.pending_allocs[self.arena_int] = pending_allocs + for parser, allocs_by_arena in allocs.items(): + updated_allocs = { k : v + allocs_by_arena.get(self.arena_int, 0) for k,v in self.pending_allocs.get(parser, {}).items() } + self.pending_allocs[parser] = allocs_by_arena | updated_allocs def pop(self): parser_obj = self.peek() @@ -163,11 +162,10 @@ class ParserStack: self.stack_events.append((StackEvent.POP, int(self.parse_state_gdbval['arena']['arena_malloc_bytes']), parser_obj)) allocs = self.commit_at_pop() - pending_allocs = self.pending_allocs.get(self.arena_int, {}) # TODO: where do we commit unclaimed allocs in a parserstack? - for addr, alloc in allocs.items(): - pending_allocs[addr] = pending_allocs.get(addr, 0) + alloc - self.pending_allocs[self.arena_int] = pending_allocs + for parser, allocs_by_arena in allocs.items(): + updated_allocs = { k : v + allocs_by_arena.get(self.arena_int, 0) for k,v in self.pending_allocs.get(parser, {}).items() } + self.pending_allocs[parser] = allocs_by_arena | updated_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) -- GitLab