Programming Languages/Software Engineering
Construction of Call Graphs
Credits: Slide content contains repurposed material originally by Atanas Rountev.
David Grove and Craig Chambers. 2001. A framework for call graph construction algorithms. ACM Trans. Program. Lang. Syst. 23, 6 (November 2001), 685-746.
2
Call Graphs
3
Why?
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Map of what is coming next
4
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Call Graph Construction for C
Problem: function pointers�Examples from “Precise Call Graphs for C Programs with Function Pointers”, Ana Milanova, Atanas Rountev, and Barbara G. Ryder, International Journal of Automated Software Engineering (JASE), 2004
5
Credits: Slide content contains repurposed material originally by Atanas Rountev.
6
Another Example
7
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Precise Resolution of Function Pointers
8
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Call Graph Construction for C (cont’d)
9
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Methods Calls (Invocations in Java)
��x has declared type A: compile-time target is A.m�javac encodes this in the bytecode (foo.class)�virtualinvoke x,<A: void m(int,int)>
10
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Methods Calls (Invocations in Java)
Run-time (dynamic) target: “lowest” method that matches the signature and the return type of the static target (“lowest” w.r.t. inheritance chain from Z to java.lang.Object)
This process is called virtual dispatch or method lookup
11
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Call Graphs for Software Understanding
12
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Call Graphs for Optimizations
13
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Resolution of Virtual Calls
14
Do this at compile time or at run time
Credits: Slide content contains repurposed material originally by Atanas Rountev.
The World of Call Graph Construction [Grove & Chambers 2001]
15
Class Hierarchy Analysis (CHA)
16
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Class Hierarchy Analysis (CHA)
17
Credits: Slide content contains repurposed material originally by Atanas Rountev.
dispatch
dispatch(call_site s, receiver_class rc)
sig = signature_of_static_target(s)� ret = return_type_of_static_target(s)� c = rc;� while (c != null)� if class c contains a method m with � signature sig and return type ret� return m� c = superclass(c)� print “ERROR: this should be unreachable”
18
Why?
Credits: Slide content contains repurposed material originally by Atanas Rountev.
One Possible Implementation of CHA
19
Credits: Slide content contains repurposed material originally by Atanas Rountev.
process_method_body(method m)
for each call site s inside m� if s is a static call or a constructor call or a call through super� add_edge(s)� if s is a virtual call v.n(…)� rcv_class = type_of(v);� for each non-abstract class c that is a subclass of � rcv_class or rcv_class itself� x = dispatch(s,c)� add_edge(s,x)
20
Credits: Slide content contains repurposed material originally by Atanas Rountev.
add_edge
add_edge(call_site s)� // for static calls, constructor calls, and calls through super� m = target(s);� if m is not in Graph� Graph.addNode(m);� worklist.addAtTail(m);� Graph.addEdge(s,m)
add_edge(call_site s, run_time_target x)� // same here
21
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Example
22
Example
23
Example
24
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Example
25
Example
26
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Example
27
Example
28
Credits: Slide content contains repurposed material originally by Atanas Rountev.
The Resulting Graph
29
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Rapid Type Analysis
30
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Rapid Type Analysis
31
Credits: Slide content contains repurposed material originally by Atanas Rountev.
One Possible Implementation of RTA
32
Credits: Slide content contains repurposed material originally by Atanas Rountev.
process_method_body(method m)
for each expression new X inside m� if (X ∉ instantiated_classes)� add X to instantiated_classes� resolve_pending(X)�for each call site s inside m� if s is a static call or a constructor call or a call through super� add_edge(s)� if s is a virtual call v.n(…)� rcv_class = type_of(v);� for each non-abstract class c that is a � subclass of rcv_class or rcv_class itself� process_rcv_class(c,s)
33
Credits: Slide content contains repurposed material originally by Atanas Rountev.
process_rcv_class
process_rcv_class(class c, call_site s)� x = dispatch(s,c)� if c ∈ instantiated_classes� add_edge(s,x)� else // c is not currently instantiated, � // but in the future it may be, so� // we have to remember this edge� remember (s,x) in pending(c)
34
Credits: Slide content contains repurposed material originally by Atanas Rountev.
resolve_pending(class c)
// class c became instantiated, and�// we need to add all pending edges�for each (s,x) in pending(c)� add_edge(s,x)
Called by process_method_body :�for each expression new X� if (X ∉ instantiated_classes)� add X to instantiated_classes� resolve_pending(X)
35
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Example
36
37
Example
38
Credits: Slide content contains repurposed material originally by Atanas Rountev.
39
Example
40
Credits: Slide content contains repurposed material originally by Atanas Rountev.
41
Example
42
Credits: Slide content contains repurposed material originally by Atanas Rountev.
RTA vs. CHA
43
RTA vs. CHA
44
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Some Existing Analyses
45
Credits: Slide content contains repurposed material originally by Atanas Rountev.
More Existing Analyses
46
Credits: Slide content contains repurposed material originally by Atanas Rountev.
Class Analysis
47
Credits: Slide content contains repurposed material originally by Atanas Rountev.