compile/remote-compile/lbc/tool/atobj.py (191 lines of code) (raw):

# -*- coding: utf-8 -*- """ ------------------------------------------------- File Name: atobj Description : Author : liaozhaoyan date: 2022/11/6 ------------------------------------------------- Change Activity: 2022/11/6: ------------------------------------------------- """ __author__ = 'liaozhaoyan' class CatObj(object): def __init__(self): self.atDict = { "DW_AT_producer": self._at_producer, "DW_AT_language": self._at_language, "DW_AT_name": self._at_name, "DW_AT_comp_dir": self._at_comp_dir, "DW_AT_low_pc": self._at_low_pc, "DW_AT_high_pc": self._at_high_pc, "DW_AT_stmt_list": self._at_stmt_list, "DW_AT_byte_size": self._at_byte_size, "DW_AT_encoding": self._at_encoding, "DW_AT_type": self._at_type, "DW_AT_sibling": self._at_sibling, "DW_AT_upper_bound": self._at_upper_bound, "DW_AT_decl_file": self._at_decl_file, "DW_AT_decl_line": self._at_decl_line, "DW_AT_decl_column": self._at_decl_column, "DW_AT_data_member_location": self._at_data_member_location, "DW_AT_bit_size": self._at_bit_size, "DW_AT_bit_offset": self._at_bit_offset, "DW_AT_const_value": self._at_const_value, "DW_AT_external": self._at_external, "DW_AT_prototyped": self._at_prototyped, "DW_AT_GNU_all_tail_call_sites": self._at_GNU_all_tail_call_sites, "DW_AT_location": self._at_location, "DW_AT_declaration": self._at_declaration, "DW_AT_frame_base": self._at_frame_base, "DW_AT_entry_pc": self._at_entry_pc, "DW_AT_call_file": self._at_call_file, "DW_AT_call_line": self._at_call_line, "DW_AT_call_column": self._at_call_column, "DW_AT_abstract_origin": self._at_abstract_origin, "DW_AT_ranges": self._at_ranges, "DW_AT_specification": self._at_specification, "DW_AT_GNU_all_call_sites": self._at_GNU_all_call_sites, "DW_AT_GNU_call_site_value": self._at_GNU_call_site_value, "DW_AT_GNU_tail_call": self._at_GNU_tail_call, "DW_AT_GNU_call_site_target": self._at_GNU_call_site_target, "DW_AT_inline": self._at_inline, "DW_AT_artificial": self._at_artificial, "DW_AT_linkage_name": self._at_linkage_name, "DW_AT_noreturn": self._at_noreturn, "DW_AT_alignment": self._at_alignment, "DW_AT_call_all_calls": self._at_call_all_calls, "DW_AT_GNU_locviews": self._at_GNU_locviews, "DW_AT_GNU_entry_view": self._at_GNU_entry_view, "DW_AT_call_return_pc": self._at_call_return_pc, "DW_AT_call_origin": self._at_call_origin, "DW_AT_call_value": self._at_call_value, "DW_AT_call_parameter": self._at_call_parameter, "DW_AT_count": self._at_count, "DW_AT_data_bit_offset": self._at_data_bit_offset, "DW_AT_call_all_tail_calls": self._at_call_all_tail_calls, "DW_AT_call_target": self._at_call_target, "DW_AT_GNU_vector": self._at_GNU_vector, } def _at_GNU_vector(self, values): return self._at_byte_size(values) def _at_call_target(self, values): return values def _at_call_all_tail_calls(self, values): return self._at_byte_size(values) def _at_data_bit_offset(self, values): return self._at_byte_size(values) def _at_count(self, values): return self._at_byte_size(values) def _at_call_parameter(self, values): return self._at_call_origin(values) def _at_call_value(self, values): return values def _at_call_origin(self, values): # <0xda> return self._at_byte_size(values[1:-1]) def _at_call_return_pc(self, values): # addr return self._at_byte_size(values) def _at_GNU_entry_view(self, values): return self._at_byte_size(values) def _at_GNU_locviews(self, values): return self._at_byte_size(values) def _at_call_all_calls(self, values): return self._at_byte_size(values) def _at_alignment(self, values): return self._at_byte_size(values) def _at_noreturn(self, values): return self._at_byte_size(values) def _at_GNU_call_site_target(self, values): return values def _at_artificial(self, values): self._at_byte_size(values) def _at_linkage_name(self, values): try: self._at_producer(values) except ValueError: return values def _at_inline(self, values): return values def _at_GNU_tail_call(self, values): return values def _at_GNU_call_site_value(self, values): return values def _at_GNU_all_call_sites(self, values): return self._at_byte_size(values) def _at_specification(self, values): return self._at_type(values) def _at_ranges(self, values): return self._at_byte_size(values) def _at_abstract_origin(self, values): return self._at_type(values) def _at_call_column(self, values): return self._at_byte_size(values) def _at_call_line(self, values): return self._at_byte_size(values) def _at_call_file(self, values): return self._at_byte_size(values) def _at_entry_pc(self, values): return self._at_low_pc(values) def _at_producer(self, values): if "):" in values: _, value = values.split("):", 1) return value.strip() return values def _at_language(self, values): if values.startswith("("): _, value = values.rsplit("(", 1) return value[:-1] return values def _at_name(self, values): if len(values) and values[0] == '(': return self._at_producer(values) return values def _at_comp_dir(self, values): return self._at_producer(values) def _at_low_pc(self, values): return self._at_byte_size(values) def _at_high_pc(self, values): return int(values, 16) def _at_stmt_list(self, values): return self._at_high_pc(values) def _at_byte_size(self, values): try: if values.startswith("0x"): res = int(values, 16) else: res = int(values) except ValueError: res = values return res def _at_encoding(self, values): _, value = values.split("(", 1) return value[:-1] def _at_type(self, values): value = int(values[1:-1], 16) return value def _at_sibling(self, values): return self._at_type(values) def _at_upper_bound(self, values): return self._at_byte_size(values) def _at_decl_file(self, values): return self._at_byte_size(values) def _at_decl_line(self, values): return self._at_byte_size(values) def _at_decl_column(self, values): return self._at_byte_size(values) def _at_data_member_location(self, values): return self._at_byte_size(values) def _at_bit_size(self, values): return self._at_byte_size(values) def _at_bit_offset(self, values): return self._at_byte_size(values) def _at_const_value(self, values): try: return self._at_byte_size(values) except ValueError: return values def _at_external(self, values): return self._at_byte_size(values) def _at_prototyped(self, values): return self._at_byte_size(values) def _at_frame_base(self, values): return values def _at_GNU_all_tail_call_sites(self, values): return self._at_byte_size(values) def _at_location(self, values): return values def _at_declaration(self, values): return self._at_byte_size(values) def parse(self, tag, value): return self.atDict[tag](value) if __name__ == "__main__": pass