diff options
Diffstat (limited to 'utils/analyzer')
-rwxr-xr-x | utils/analyzer/exploded-graph-rewriter.py | 43 |
1 files changed, 25 insertions, 18 deletions
diff --git a/utils/analyzer/exploded-graph-rewriter.py b/utils/analyzer/exploded-graph-rewriter.py index 77da7392e3..79222bdbe9 100755 --- a/utils/analyzer/exploded-graph-rewriter.py +++ b/utils/analyzer/exploded-graph-rewriter.py @@ -67,6 +67,9 @@ class ProgramPoint(object): super(ProgramPoint, self).__init__() self.kind = json_pp['kind'] self.tag = json_pp['tag'] + self.node_id = json_pp['node_id'] + self.is_sink = bool(json_pp['is_sink']) + self.has_report = bool(json_pp['has_report']) if self.kind == 'Edge': self.src_id = json_pp['src_id'] self.dst_id = json_pp['dst_id'] @@ -309,11 +312,9 @@ class ExplodedNode(object): def construct(self, node_id, json_node): logging.debug('Adding ' + node_id) - self.node_id = json_node['node_id'] - self.ptr = json_node['pointer'] - self.has_report = json_node['has_report'] - self.is_sink = json_node['is_sink'] + self.ptr = node_id[4:] self.points = [ProgramPoint(p) for p in json_node['program_points']] + self.node_id = self.points[-1].node_id self.state = ProgramState(json_node['state_id'], json_node['program_state']) \ if json_node['program_state'] is not None else None @@ -488,12 +489,14 @@ class DotDumpVisitor(object): else: color = 'forestgreen' + self._dump('<tr><td align="left">%s.</td>' % p.node_id) + if p.kind == 'Statement': # This avoids pretty-printing huge statements such as CompoundStmt. # Such statements show up only at [Pre|Post]StmtPurgeDeadSymbols skip_pretty = 'PurgeDeadSymbols' in p.stmt_point_kind stmt_color = 'cyan3' - self._dump('<tr><td align="left" width="0">%s:</td>' + self._dump('<td align="left" width="0">%s:</td>' '<td align="left" width="0"><font color="%s">' '%s</font> </td>' '<td align="left"><i>S%s</i></td>' @@ -506,30 +509,41 @@ class DotDumpVisitor(object): self._short_pretty(p.pretty) if not skip_pretty else '')) elif p.kind == 'Edge': - self._dump('<tr><td width="0"></td>' + self._dump('<td width="0"></td>' '<td align="left" width="0">' '<font color="%s">%s</font></td><td align="left">' '[B%d] -\\> [B%d]</td></tr>' % (color, 'BlockEdge', p.src_id, p.dst_id)) elif p.kind == 'BlockEntrance': - self._dump('<tr><td width="0"></td>' + self._dump('<td width="0"></td>' '<td align="left" width="0">' '<font color="%s">%s</font></td>' '<td align="left">[B%d]</td></tr>' % (color, p.kind, p.block_id)) else: # TODO: Print more stuff for other kinds of points. - self._dump('<tr><td width="0"></td>' + self._dump('<td width="0"></td>' '<td align="left" width="0" colspan="2">' '<font color="%s">%s</font></td></tr>' % (color, p.kind)) if p.tag is not None: - self._dump('<tr><td width="0"></td>' + self._dump('<tr><td width="0"></td><td width="0"></td>' '<td colspan="3" align="left">' '<b>Tag: </b> <font color="crimson">' '%s</font></td></tr>' % p.tag) + if p.has_report: + self._dump('<tr><td width="0"></td><td width="0"></td>' + '<td colspan="3" align="left">' + '<font color="red"><b>Bug Report Attached' + '</b></font></td></tr>') + if p.is_sink: + self._dump('<tr><td width="0"></td><td width="0"></td>' + '<td colspan="3" align="left">' + '<font color="cornflowerblue"><b>Sink Node' + '</b></font></td></tr>') + def visit_environment(self, e, prev_e=None): self._dump('<table border="0">') @@ -786,17 +800,10 @@ class DotDumpVisitor(object): self._dump('color="white",fontcolor="gray80",') self._dump('label=<<table border="0">') - self._dump('<tr><td bgcolor="%s"><b>Node %d (%s) - ' - 'State %s</b></td></tr>' + self._dump('<tr><td bgcolor="%s"><b>State %s</b></td></tr>' % ("gray20" if self._dark_mode else "gray70", - node.node_id, node.ptr, node.state.state_id + node.state.state_id if node.state is not None else 'Unspecified')) - if node.has_report: - self._dump('<tr><td><font color="red"><b>Bug Report Attached' - '</b></font></td></tr>') - if node.is_sink: - self._dump('<tr><td><font color="cornflowerblue"><b>Sink Node' - '</b></font></td></tr>') if not self._topo_mode: self._dump('<tr><td align="left" width="0">') if len(node.points) > 1: |