Пример #1
0
def display_src_file_lines(filename, line_num):
    exist = m_datastore.mgdb_rdata.in_src_lines(filename)
    if exist:
        total = m_datastore.mgdb_rdata.get_src_lines(filename)
    else:
        with open(filename) as fp:
            total = len(fp.readlines())
        m_datastore.mgdb_rdata.add_src_lines(filename, total)
    try:
        count = int(m_set.msettings["linecount"])
        if count < 5:
            count = default_src_display_line_count if count != 0 else total << 1
    except:
        count = default_src_display_line_count

    line_num = line_num if line_num < total else total

    half = (count - 1) >> 1
    s_line = line_num - half if line_num > half + 1 else 1
    half = count - half - 1
    e_line = line_num + half if line_num + half <= total else total
    gdb_print("src file: %s%s%s line: %d" %
              (MColors.BT_SRC, filename, MColors.ENDC, line_num))
    if m_util.Highlighted:
        buf =m_util.shell_cmd('highlight -O xterm256 --force -s %s %s | sed -n %d,%dp |'
            ' nl -ba -s" " -w8 -v%d | sed "s/^  \\( *%d \\)/=>\\1/"' \
            % (m_util.HighlightStyle, filename, s_line, e_line, s_line, line_num))
    else:
        buf = m_util.shell_cmd('sed -n %d,%dp %s | nl -ba -s" " -w8 -v%d | sed "s/^  \\( *%d \\)/=>\\1/"' \
            % (s_line, e_line, filename, s_line, line_num))
    m_util.gdb_write(buf)

    new_line_num = line_num + count if line_num + count <= total else total
    return new_line_num
Пример #2
0
    def display_mir_file_lines(self, filename, line_num, mir_tuple):
        """
        params:
          filename: string. asm file full path
          line_num: int. line number of this asm file
          mir_tuple: (maple_symbol_block_start_line, block_start_offset, block_end_offset) in mir.mpl file
        """
        exist = m_datastore.mgdb_rdata.in_mirblock_lines(
            filename, mir_tuple[0])
        if exist:
            total = m_datastore.mgdb_rdata.get_mirblock_lines(
                filename, mir_tuple[0])
        else:
            with open(filename) as fp:
                offset = mir_tuple[1]
                fp.seek(offset)
                total = 0
                while offset < mir_tuple[2]:
                    line = fp.readline()
                    offset += len(line)
                    total += 1
            m_datastore.mgdb_rdata.add_mirblock_lines(filename, mir_tuple[0],
                                                      total)
        try:
            count = int(m_set.msettings["linecount"])
            if count < 9:
                count = default_mir_display_line_count if count != 0 else total << 1
        except:
            count = default_mir_display_line_count

        if line_num < mir_tuple[0]:
            line_num = mir_tuple[0]
        if line_num > mir_tuple[0] + total:
            line_num = mir_tuple[0] + total - 1

        curr_num = line_num - mir_tuple[0] + 1
        half = (count - 1) >> 1
        s_line = curr_num - half if curr_num > half + 1 else 1
        half = count - half - 1
        e_line = curr_num + half if curr_num + half <= total else total
        gdb_print("asm file: %s%s%s line: %d" %
                  (MColors.BT_SRC, filename, MColors.ENDC, line_num))
        ss_line = mir_tuple[0] + s_line - 1
        if m_util.Highlighted:
            buf =m_util.shell_cmd('dd skip=%d bs=1 count=%d if=%s 2> /dev/null |'
                ' highlight -O xterm256 --config-file=%s -s %s | sed -n %d,%dp |'
                ' nl -ba -s" " -w12 -v%d | sed "s/^  \\( *%d \\)/=>\\1/"' \
                % (mir_tuple[1], mir_tuple[2] - mir_tuple[1], filename, mpl_lang, \
                   m_util.HighlightStyle, s_line, e_line, ss_line, line_num))
        else:
            buf =m_util.shell_cmd('dd skip=%d bs=1 count=%d if=%s 2> /dev/null |'
                ' sed -n %d,%dp | nl -ba -s" " -w12 -v%d | sed "s/^  \\( *%d \\)/=>\\1/"' \
                % (mir_tuple[1], mir_tuple[2] - mir_tuple[1], filename, \
                   s_line, e_line, ss_line, line_num))
        m_util.gdb_write(buf)

        self.prev_mir_file_line = line_num
        self.frame_data['frame_func_src_info'][
            'mirmpl_line'] = line_num + count if line_num + count < mir_tuple[
                0] + total else mir_tuple[0] + total - 1