#variables #falcon #higher-level #calls #semantics #stack #il

falcon-raptor

在 Falcon IL 上面的高级语义

6 个版本

0.5.2 2021 年 8 月 28 日
0.4.10 2020 年 4 月 17 日
0.4.9 2020 年 2 月 24 日
0.4.6 2019 年 11 月 11 日

#834开发工具

Apache-2.0LGPL-3.0

370KB
9K SLoC

raptor 是 Falcon IL 的高级 IL

不稳定性

未知的调用和废弃的变量

当 raptor 检测到调用时,它根据调用约定设置废弃的变量。这允许常数传播分析在调用期间传播某些变量,这对于恢复未来的调用是必需的。

想象一下在 MIPS 中,我们在堆栈上保存了 $gp 寄存器。为了确定函数的位置,我们从堆栈中加载 $gp,向它添加一个偏移量,并从该地址加载一个函数指针到 $t9。然后我们转到 $t9。如果我们有一个循环中的多个调用,并且在未知函数调用后将所有变量设置为 Top,那么从读取 $gp 的堆栈变量将变为 Top,我们将无法进一步传播常数和解析函数调用。

预定义的某些函数

某些函数,如 printf/sprintf,接受可变数量的参数。在这些情况下,假设有 8 个参数。如果向这些函数传递更多参数,这将是不稳定性的来源。

依赖项

~35MB
~747K SLoC