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
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