Hang analysis: fighting responsiveness bugs
Proceedings of the 3rd ACM SIGOPS/EuroSys European Conference on Computer Systems 2008
Effective static deadlock detection
ICSE '09 Proceedings of the 31st International Conference on Software Engineering
Large program trace analysis and compression with ZDDs
Proceedings of the 8th annual IEEE/ACM international symposium on Code generation and optimization
Proceedings of the 38th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Scaling abstraction refinement via pruning
Proceedings of the 32nd ACM SIGPLAN conference on Programming language design and implementation
Geometric encoding: forging the high performance context sensitive points-to analysis for Java
Proceedings of the 2011 International Symposium on Software Testing and Analysis
Sound predictive race detection in polynomial time
POPL '12 Proceedings of the 39th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Distributed deductive databases, declaratively: the L10 logic programming language
Proceedings of the 2011 ACM SIGPLAN X10 Workshop
Scalable flow-sensitive pointer analysis for java with strong updates
ECOOP'12 Proceedings of the 26th European conference on Object-Oriented Programming
Practical Integrated Analysis of Pointers, Dataflow and Control Flow
ACM Transactions on Programming Languages and Systems (TOPLAS)
Modelling Access Propagation in Dynamic Systems
ACM Transactions on Information and System Security (TISSEC)
Hi-index | 0.00 |
This thesis shows that whole-program context-sensitive inclusion-based pointer analysis, a previously intractable problem, can be efficiently solved using binary decision diagrams. In addition, we show that it is possible to automatically translate from a high-level analysis specification written in Datalog into an efficient implementation using binary decision diagrams. We present the first scalable context-sensitive, inclusion-based pointer analysis for Java programs. Our approach to context sensitivity is to create a clone of a method for every context of interest, and run a context-insensitive algorithm over the expanded call graph to get context-sensitive results. For precision, we generate a clone for every acyclic path through a program's call graph, treating methods in a strongly connected component as a single node. Normally, this formulation is hopelessly intractable as a call graph often has 1014 acyclic paths or more. We show that these exponential relations can be computed efficiently using BDDs. We also describe bddbddb, a BDD-Based Deductive DataBase, which implements the declarative language Datalog with stratified negation, totally-ordered finite domains and comparison operators. bddbddb uses binary decision diagrams (BDDs) to efficiently represent large relations. BDD operations take time proportional to the size of the data structure, not the number of tuples in a relation, which leads to fast execution times. bddbddb is an effective tool for implementing a large class of program analyses. We show that a context-insensitive pointer analysis implemented with bddbddb is about twice as fast as a carefully hand-tuned version.