Home | History | Annotate | Download | only in tools

Lines Matching refs:Code

8 #     * Redistributions of source code must retain the above copyright
80 class Code(object):
81 """Code object."""
86 self.id = Code._id
87 Code._id += 1
192 """Group of adjacent code objects."""
214 def Add(self, code):
215 self.code_objects.append(code)
217 def Remove(self, code):
218 self.code_objects.remove(code)
222 for i, code in enumerate(code_objects):
223 if code.start_address <= pc < code.end_address:
224 code_objects[0], code_objects[i] = code, code_objects[0]
225 return code
233 """Code object map."""
240 def Add(self, code, max_pages=-1):
241 page_id = CodePage.PageId(code.start_address)
242 limit_id = CodePage.PageId(code.end_address + CodePage.SIZE - 1)
248 max_pages, code.name, code.origin)
255 page.Add(code)
258 self.min_address = min(self.min_address, code.start_address)
259 self.max_address = max(self.max_address, code.end_address)
261 def Remove(self, code):
262 page_id = CodePage.PageId(code.start_address)
263 limit_id = CodePage.PageId(code.end_address + CodePage.SIZE - 1)
270 page.Remove(code)
277 for code in page:
278 if CodePage.PageAddress(code.start_address) == page.address:
279 yield code
282 for code in self.AllCode():
283 if code.IsUsed():
284 yield code
287 for code in self.AllCode():
288 print code
300 """Generic info about generated code objects."""
311 r"snapshot-code-name,(\d+),\"(.*)\"")
400 code = Code(name, start_address, end_address, origin, origin_offset)
403 if not (conficting_code.start_address == code.start_address and
404 conficting_code.end_address == code.end_address):
407 LogReader._HandleCodeConflict(conficting_code, code)
409 # attempts to reconstruct code log from the snapshot.
411 # "Warning: Skipping duplicate code log entry %s" % code
413 self.code_map.Add(code)
422 # Skip useless code move entries.
424 code = self.code_map.Find(old_start_address)
425 if not code:
428 assert code.start_address == old_start_address, \
429 "Inexact move address %x for %s" % (old_start_address, code)
430 self.code_map.Remove(code)
431 size = code.end_address - code.start_address
432 code.start_address = new_start_address
433 code.end_address = new_start_address + size
434 self.code_map.Add(code)
441 code = self.code_map.Find(old_start_address)
442 if not code:
445 assert code.start_address == old_start_address, \
446 "Inexact delete address %x for %s" % (old_start_address, code)
447 self.code_map.Remove(code)
477 "Conficting code log entries %s and %s" % (old_code, new_code)
480 # Code object may be shared by a few functions. Collect the full
722 if line.find("CODE") != -1:
750 code_map.Add(Code(name, start_address, start_address + size,
778 code = None
785 if code:
786 code.end_address = start_address
787 code_map.Add(code, 16)
788 code = Code(name, start_address, end_address, "kernel", 0)
794 used_code = [code for code in code_map.UsedCode()]
796 for i, code in enumerate(used_code):
797 code_ticks = code.self_ticks
799 code.FullName(), code.origin)
801 code.PrintAnnotated(arch, options)
814 for code in code_map.UsedCode():
815 if code.self_ticks < 10:
817 print "n%d [shape=box,label=\"%s\"];" % (code.id, code.name)
818 if code.callee_ticks:
819 for callee, ticks in code.callee_ticks.iteritems():
820 print "n%d -> n%d [label=\"%d\"];" % (code.id, callee.id, ticks)
892 print "Generated code architecture: %s" % log_reader.arch
896 # Process the code and trace logs.
917 code = code_map.Find(sample.ip)
918 if code:
919 code.Tick(sample.ip)
922 if not library_repo.Tick(sample.ip) and not code:
928 if code:
929 caller_code.CalleeTick(code)
930 code = caller_code