Lines Matching refs:code
8 # * Redistributions of source code must retain the above copyright
84 class Code(object):
85 """Code object."""
94 self.id = Code._id
95 Code._id += 1
106 self.codetype = Code.OPTIMIZED
108 self.codetype = Code.FULL_CODEGEN
110 self.codetype = Code.V8INTERNAL
112 self.codetype = Code.UNKNOWN
216 """Group of adjacent code objects."""
238 def Add(self, code):
239 self.code_objects.append(code)
241 def Remove(self, code):
242 self.code_objects.remove(code)
246 for i, code in enumerate(code_objects):
247 if code.start_address <= pc < code.end_address:
248 code_objects[0], code_objects[i] = code, code_objects[0]
249 return code
257 """Code object map."""
264 def Add(self, code, max_pages=-1):
265 page_id = CodePage.PageId(code.start_address)
266 limit_id = CodePage.PageId(code.end_address + CodePage.SIZE - 1)
272 max_pages, code.name, code.origin)
279 page.Add(code)
282 self.min_address = min(self.min_address, code.start_address)
283 self.max_address = max(self.max_address, code.end_address)
285 def Remove(self, code):
286 page_id = CodePage.PageId(code.start_address)
287 limit_id = CodePage.PageId(code.end_address + CodePage.SIZE - 1)
294 page.Remove(code)
301 for code in page:
302 if CodePage.PageAddress(code.start_address) == page.address:
303 yield code
306 for code in self.AllCode():
307 if code.IsUsed():
308 yield code
311 for code in self.AllCode():
312 print code
324 """Generic info about generated code objects."""
388 code = Code(name, start_address, end_address, origin, origin_offset)
391 if not (conficting_code.start_address == code.start_address and
392 conficting_code.end_address == code.end_address):
395 LogReader._HandleCodeConflict(conficting_code, code)
397 # attempts to reconstruct code log from the snapshot.
399 # "Warning: Skipping duplicate code log entry %s" % code
401 self.code_map.Add(code)
410 # Skip useless code move entries.
412 code = self.code_map.Find(old_start_address)
413 if not code:
416 assert code.start_address == old_start_address, \
417 "Inexact move address %x for %s" % (old_start_address, code)
418 self.code_map.Remove(code)
419 size = code.end_address - code.start_address
420 code.start_address = new_start_address
421 code.end_address = new_start_address + size
422 self.code_map.Add(code)
441 "Conficting code log entries %s and %s" % (old_code, new_code)
444 # Code object may be shared by a few functions. Collect the full
736 if line.find("CODE") != -1:
764 code_map.Add(Code(name, start_address, start_address + size,
792 code = None
799 if code:
800 code.end_address = start_address
801 code_map.Add(code, 16)
802 code = Code(name, start_address, end_address, "kernel", 0)
808 used_code = [code for code in code_map.UsedCode()]
810 for i, code in enumerate(used_code):
811 code_ticks = code.self_ticks
813 code.FullName(), code.origin)
815 code.PrintAnnotated(arch, options)
828 for code in code_map.UsedCode():
829 if code.self_ticks < 10:
831 print "n%d [shape=box,label=\"%s\"];" % (code.id, code.name)
832 if code.callee_ticks:
833 for callee, ticks in code.callee_ticks.iteritems():
834 print "n%d -> n%d [label=\"%d\"];" % (code.id, callee.id, ticks)
907 print "Generated code architecture: %s" % log_reader.arch
911 # Process the code and trace logs.
940 code = code_map.Find(sample.ip)
941 if code:
942 code.Tick(sample.ip)
943 if code.codetype == Code.OPTIMIZED:
945 elif code.codetype == Code.FULL_CODEGEN:
947 elif code.codetype == Code.V8INTERNAL:
951 if not library_repo.Tick(sample.ip) and not code:
957 if code:
958 caller_code.CalleeTick(code)
959 code = caller_code
980 PrintTicks(optimized_ticks, ticks, "ticks in optimized code")
981 PrintTicks(generated_ticks, ticks, "ticks in other lazily compiled code")