-
Notifications
You must be signed in to change notification settings - Fork 5
/
gocallvis_rta.patch
85 lines (75 loc) · 1.97 KB
/
gocallvis_rta.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
From 91608cd910332415690e85f1e741def5fd829233 Mon Sep 17 00:00:00 2001
From: zjuchenyuan <chenyuan.gfuzz@qiushi.ac.cn>
Date: Mon, 21 Jun 2021 21:35:51 +0800
Subject: [PATCH] [gfuzz] add rta
---
analysis.go | 33 +++++++++++++++++++++------------
1 file changed, 21 insertions(+), 12 deletions(-)
diff --git a/analysis.go b/analysis.go
index 5aedcda..c815261 100644
--- a/analysis.go
+++ b/analysis.go
@@ -12,9 +12,11 @@ import (
"log"
"golang.org/x/tools/go/packages"
- "golang.org/x/tools/go/pointer"
+ //"golang.org/x/tools/go/pointer"
"golang.org/x/tools/go/ssa"
"golang.org/x/tools/go/ssa/ssautil"
+ "golang.org/x/tools/go/callgraph/rta"
+ "golang.org/x/tools/go/callgraph"
)
//==[ type def/func: analysis ]===============================================
@@ -51,7 +53,7 @@ type analysis struct {
prog *ssa.Program
pkgs []*ssa.Package
mains []*ssa.Package
- result *pointer.Result
+ cg *callgraph.Graph
}
var Analysis *analysis
@@ -85,21 +87,28 @@ func (a *analysis) DoAnalysis(
return err
}
- config := &pointer.Config{
- Mains: mains,
- BuildCallGraph: true,
- }
+ //config := &pointer.Config{
+ // Mains: mains,
+ // BuildCallGraph: true,
+ //}
- result, err := pointer.Analyze(config)
- if err != nil {
- return err // internal error in pointer analysis
+ var roots []*ssa.Function
+ for _, main := range mains {
+ roots = append(roots, main.Func("init"), main.Func("main"))
}
- //cg.DeleteSyntheticNodes()
+
+ //result, err := pointer.Analyze(config)
+ rtares := rta.Analyze(roots, true)
+ //if err != nil {
+ // return err // internal error in pointer analysis
+ //}
+ cg := rtares.CallGraph
+ cg.DeleteSyntheticNodes()
a.prog = prog
a.pkgs = pkgs
a.mains = mains
- a.result = result
+ a.cg = cg
return nil
}
@@ -234,7 +243,7 @@ func (a *analysis) Render() ([]byte, error) {
dot, err := printOutput(
a.prog,
a.mains[0].Pkg,
- a.result.CallGraph,
+ a.cg,
focusPkg,
a.opts.limit,
a.opts.ignore,
--
2.17.1