Example #1
0
 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"
Example #2
0
 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"
Example #3
0
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
Example #4
0
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
Example #5
0
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
Example #6
0
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)
Example #7
0
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