利用广义指向图的流敏感与上下文敏感指向分析
编程语言
2016-08-08 v6
摘要
计算精确的(完全流敏感和上下文敏感)且详尽的指向信息(points-to information)在计算上代价高昂。许多实用工具近似指向信息以牺牲精度换取效率。这对模型检查等计算密集型分析有不利影响。过去对自顶向下方法的完全流敏感和上下文敏感指向分析(FCPA)的探索未能扩展。我们探索了自底向上过程间分析的替代方案,该方案为过程构建汇总流函数以表示其调用的效果。这种方法已有效用于许多分析。然而,对于需要建模通过指针间接访问的未知位置的FCPA来说,计算代价高昂。此类访问通常通过占位符来显式化未知位置或使用多个调用特定的汇总流函数来处理。我们通过使用间接层级计数来泛化指向关系的概念,使未知位置隐式。这允许我们以广义指向图(GPGs)的形式创建汇总流函数,而无需占位符。根据设计,GPG既表示内存(以经典指向事实表示)又表示内存变换器(以广义指向事实表示)。我们通过逐步将广义指向事实归约为经典指向事实来执行FCPA。GPG区分可能和必须指针更新,从而促进调用上下文内的强更新。GPG的大小由变量数量线性界定,且与过程中的语句数量无关。在SPEC基准测试上的经验测量表明,尽管过程大小很大,但GPG确实紧凑。这使我们能够使用GPG将FCPA扩展到158 kLoC(相比之下,基于存活性的FCPA报道为35 kLoC)。
引用
@article{arxiv.1603.09597,
title = {Flow- and Context-Sensitive Points-to Analysis using Generalized Points-to Graphs},
author = {Pritam M. Gharat and Uday P. Khedker and Alan Mycroft},
journal= {arXiv preprint arXiv:1603.09597},
year = {2016}
}