diff --git a/gdb-port/parser.py b/gdb-port/parser.py index cbdd8c9397824cea264a652ccbf34b4d37baefd9..5cc5cd5533908f148c14778476e2a42b7b5ca235 100644 --- a/gdb-port/parser.py +++ b/gdb-port/parser.py @@ -268,6 +268,7 @@ class ParserStack: current_frame_alloc = current_event[1] - previous_event[1] #print("commit_at_pop: current_frame_alloc", current_frame_alloc) # DEBUG pop_allocs = {} + parser_cache = {} # TODO: clean up if len(ev_list) == 1: @@ -277,22 +278,28 @@ class ParserStack: self.committed = len(self.stack_events)-1 # print("commit_at_pop: pop_allocs:", { current_event[2].address: current_frame_alloc }) # DEBUG pop_allocs[current_event[2].address] = pop_allocs.get(current_event[2].address, 0) + current_frame_alloc + parser_cache[current_event[2].address] = current_event[2] # return { current_event[2].address: current_frame_alloc } elif len(ev_list) > 1: - bytes_list = [ev[1] for ev in ev_list] + #bytes_list = [ev[1] for ev in ev_list] - differences = map(lambda smaller, bigger: bigger-smaller, bytes_list[:-1], bytes_list[1:]) + #differences = map(lambda smaller, bigger: bigger-smaller, bytes_list[:-1], bytes_list[1:]) + differences = [bigger[1]-smaller[1] for bigger, smaller in zip(ev_list[1:], ev_list[:-1])] + # TODO: this could be a list comprehension too for index, event in enumerate(ev_list[:-1]): - alloc = next(differences) + parser_cache[int(event[2].address)] = event[2] + alloc = differences[index] + pop_allocs[event[2].address] = pop_allocs.get(event[2].address, 0) + alloc + #alloc = next(differences) #print("commit_at_pop: alloc:", alloc) # DEBUG #print("commit_at_pop: adding to parser", event[2].name, hex(event[2].address)) #event[2].add_mem_use(int(self.arena), alloc) - pop_allocs[event[2].address] = pop_allocs.get(event[2].address, 0) + alloc #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) + #top_level_parse.parser_by_address(parser_addr).add_mem_use(int(self.arena), alloc) + parser_cache[parser_addr].add_mem_use(int(self.arena), alloc) self.committed = len(self.stack_events)-1 return pop_allocs