def test_lookup(self): d = LibraryData("lib", 1234, 1300) d.symbols = [(1234, "a"), (1260, "b")] d2 = LibraryData("lib2", 1400, 1500) d2.symbols = [] addr = AddressSpace([d, d2]) fn, _, is_virtual = addr.lookup(1350) assert fn == '0x0000000000000547' # outside of range fn, _, is_virtual = addr.lookup(1250) assert fn == "a"
def test_lookup(self): d = LibraryData("lib", 1234, 1300) d.symbols = [(1234, "a"), (1260, "b")] d2 = LibraryData("lib2", 1400, 1500) d2.symbols = [] addr = AddressSpace([d, d2]) fn, _, is_virtual, _ = addr.lookup(1350) assert fn == '0x0000000000000547' # outside of range fn, _, is_virtual, _ = addr.lookup(1250) assert fn == "a"
def test_read_profile(here): prof_path = os.path.join(here, 'test.prof') prof_content = open(prof_path, 'rb') period, profiles, symbols, ranges = read_prof(prof_content) assert ranges[5].name == '/lib/x86_64-linux-gnu/liblzma.so.5.0.0' assert ranges[5].start == 140682901667840 assert ranges[5].end == 140682901803008 # symbols contains all kinds of crap, reverse it sym_dict = {} for k, v in symbols: sym_dict[v] = k assert 'py:f:7:x.py' in sym_dict assert 'py:g:4:x.py' in sym_dict assert 'py:<module>:2:x.py' in sym_dict addrspace = AddressSpace([ LibraryData('virtual', 0x7000000000000000, 0x7000000000010000, True, symbols=symbols) ]) name, start_addr, is_virtual = addrspace.lookup( sym_dict['py:<module>:2:x.py']) assert name == 'py:<module>:2:x.py' assert is_virtual
def read_profile(prof_filename, lib_cache={}, extra_libs=None, virtual_only=True, include_extra_info=True): prof = open(str(prof_filename), 'rb') period, profiles, virtual_symbols, libs, interp_name = read_prof(prof) if not virtual_only or include_extra_info: for i, lib in enumerate(libs): if lib.name in lib_cache: libs[i].get_symbols_from(lib_cache[lib.name]) else: lib.read_object_data(lib.start) lib_cache[lib.name] = lib libs.append( LibraryData( '<virtual>', 0x7000000000000000, 0x7fffffffffffffff, True, symbols=virtual_symbols) ) if extra_libs: libs += extra_libs addrspace = AddressSpace(libs) filtered_profiles, addr_set, jit_frames = addrspace.filter_addr(profiles, virtual_only, include_extra_info, interp_name) d = {} for addr in addr_set: name, _, _, _ = addrspace.lookup(addr) d[addr] = name if include_extra_info: d.update(addrspace.meta_data) s = Stats(filtered_profiles, d, jit_frames, interp_name) s.addrspace = addrspace return s
def test_read_profile(here): prof_path = os.path.join(here, 'test.prof') prof_content = open(prof_path, 'rb') period, profiles, symbols, ranges, interp_name = read_prof(prof_content) assert ranges[5].name == '/lib/x86_64-linux-gnu/liblzma.so.5.0.0' assert ranges[5].start == 140682901667840 assert ranges[5].end == 140682901803008 # symbols contains all kinds of crap, reverse it sym_dict = {} for k, v in symbols: sym_dict[v] = k assert 'py:f:7:x.py' in sym_dict assert 'py:g:4:x.py' in sym_dict assert 'py:<module>:2:x.py' in sym_dict addrspace = AddressSpace([ LibraryData( 'virtual', 0x7000000000000000, 0x7000000000010000, True, symbols=symbols) ]) name, start_addr, is_virtual, _ = addrspace.lookup(sym_dict['py:<module>:2:x.py']) assert name == 'py:<module>:2:x.py' assert is_virtual
def read_profile(prof_filename, lib_cache={}, extra_libs=None, virtual_only=True): prof = open(prof_filename, 'rb') period, profiles, virtual_symbols, libs = read_prof(prof) if not virtual_only: for i, lib in enumerate(libs): if lib.name in lib_cache: libs[i] = lib_cache[lib.name] else: lib.read_object_data(lib.start) lib_cache[lib.name] = lib libs.append( LibraryData('<virtual>', 0x7000000000000000, 0x7fffffffffffffff, True, symbols=virtual_symbols)) if extra_libs: libs += extra_libs addrspace = AddressSpace(libs) filtered_profiles, addr_set = addrspace.filter_addr(profiles, virtual_only) d = {} for addr in addr_set: name, _, _ = addrspace.lookup(addr) d[addr] = name return Stats(filtered_profiles, d)
def read_profile(prof_filename, lib_cache={}, extra_libs=None, virtual_only=True, include_extra_info=True): prof = open(str(prof_filename), 'rb') period, profiles, virtual_symbols, libs, interp_name = read_prof(prof) if not virtual_only or include_extra_info: exe_name = libs[0].name for lib in libs: executable = lib.name == exe_name if lib.name in lib_cache: lib.get_symbols_from(lib_cache[lib.name], executable) else: lib.read_object_data(executable) lib_cache[lib.name] = lib libs.append( LibraryData('<virtual>', 0x7000000000000000, 0x7fffffffffffffff, True, symbols=virtual_symbols)) if extra_libs: libs += extra_libs addrspace = AddressSpace(libs) filtered_profiles, addr_set, jit_frames = addrspace.filter_addr( profiles, virtual_only, include_extra_info, interp_name) d = {} for addr in addr_set: name, _, _, lib = addrspace.lookup(addr) if lib is None: name = 'jit:' + name d[addr] = name if include_extra_info: d.update(addrspace.meta_data) s = Stats(filtered_profiles, d, jit_frames, interp_name) s.addrspace = addrspace return s