MCPcopy Create free account
hub / github.com/iovisor/bcc / print_ct_map

Method print_ct_map

src/python/bcc/disassembler.py:378–427  ·  view source on GitHub ↗
(cls, t, indent="", offset=0, sizeinfo=False)

Source from the content-addressed store, hash-verified

376
377 @classmethod
378 def print_ct_map(cls, t, indent="", offset=0, sizeinfo=False):
379 map_lines = []
380 try:
381 for field_name, field_type in t._fields_:
382 is_structured = (issubclass(field_type, ct.Structure) or
383 issubclass(field_type, ct.Union))
384 field_type_name = cls.get_ct_name(field_type)
385 field_offset = getattr(t, field_name).offset
386 field_size = ct.sizeof(field_type)
387 sizedesc = cls.format_size_info(offset + field_offset,
388 field_size, sizeinfo)
389 if is_structured:
390 map_lines.append("%s%s%s {" % (indent, sizedesc, field_type_name))
391 map_lines += cls.print_ct_map(field_type,
392 indent + " ",
393 offset + field_offset)
394 map_lines.append("%s} %s;" % (indent, field_name))
395 else:
396 map_lines.append("%s%s%s %s;" % (indent, sizedesc,
397 field_type_name,
398 field_name))
399 except ValueError:
400 # is a bit field
401 offset_bits = 0
402 for field in t._fields_:
403 if len(field) == 3:
404 field_name, field_type, field_bits = field
405 field_type_name = cls.get_ct_name(field_type)
406 sizedesc = cls.format_size_info(offset, offset_bits,
407 sizeinfo, field_bits)
408 map_lines.append("%s%s%s %s:%d;" % (indent, sizedesc,
409 field_type_name,
410 field_name,
411 field_bits))
412 else:
413 # end of previous bit field
414 field_name, field_type = field
415 field_type_name = cls.get_ct_name(field_type)
416 field_offset = getattr(t, field_name).offset
417 field_size = ct.sizeof(field_type)
418 field_bits = 0
419 offset_bits = 0
420 sizedesc = cls.format_size_info(offset + field_offset,
421 field_size, sizeinfo)
422 map_lines.append("%s%s%s %s;" % (indent, sizedesc,
423 field_type_name,
424 field_name))
425 offset += field_offset
426 offset_bits += field_bits
427 return map_lines
428
429 @classmethod
430 def print_map_ctype(cls, t, field_name, sizeinfo):

Callers 1

print_map_ctypeMethod · 0.80

Calls 2

get_ct_nameMethod · 0.80
format_size_infoMethod · 0.80

Tested by

no test coverage detected