2021.09.04
  • 经验生成多种initial mappings
  • 算法验证intial mappings
2021.03.24

简单、有效。

总结:靠经验设计匹配算法

initial mapping =execution=> final mapping

Q:精确异常?应该没法做到。

Q:为何不建立guest-IR的映射?疑惑是guest-IR和host-IR的映射。Parameterization of operands会变简单吗?

Introduction

缓解翻译优化中的多对一和多对多难题。编译到guest和host,通过调试符号信息建立一行源码在俩平台的汇编码对应关系。

Issues and Challenges

2021.03.25

Learning Scope

学习的最小单位不宜过大,一行源码

Parameterization of Operands

我:把host指令和guest指令看作两个函数$$f_{host}(oprands),\ f_{guest}(oprands)$$。需要取$$f_{host}和f_{guest}$$定义域的公共部分。

文章为了减少工作,做了两点要求:host寄存器能够容纳guest寄存器,host和guest尾端相同。

Verification of Semantic Equivalence

符号化执行

Learning Binary Translation Rules

Preparation for learning

预处理代码(-E)

整理代码行(clang-format)

Parameterization of Operands

启发式的映射操作数

  • 只考虑同类型操作数(共3类,寄存器、内存、立即数)
  • 立即数配合算术逻辑运算
  • 一个寄存器至多映射映射一次

live-in operand的live是指会被用到,in是指从块外输入的。

Verification of Semantic Equivalence

使用符号执行对比语义是否相同。

我去稍微学习了一下SMT-LIB这个语言,和实现这个语言的求解器Z3。

Applying Translation Rules

指令块的操作码做HASH,用以搜索匹配。

Implementation

使用的各个开源项目

Experimental Result

实验做的是真丰富,不愧是在顶会发表的。(我觉得应该是实验室项目积累多,顶会不是一蹴而就的)

用LLVM编译器,也用了GCC说明和编译器依赖不大。

还实现了TCG转LLVM IR再用LLVM JIT运行,作为参照。

Learning Results

能够学到的源码覆盖率(行数比例)24%

Performance Study

SPEC2006提速20%+