aboutsummaryrefslogtreecommitdiff
path: root/gdb/contrib/exsummary.py
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2018-12-24 14:56:03 -0700
committerTom Tromey <tom@tromey.com>2019-01-05 08:49:50 -0700
commitd2adf9f120dd9ddef67b1d94b24298dfd3410bd1 (patch)
treec53c35845759ad610b404786d4a8a374a3c8a89d /gdb/contrib/exsummary.py
parentf87673e04f4ec54301151f74237329df14133569 (diff)
downloadgdb-d2adf9f120dd9ddef67b1d94b24298dfd3410bd1.zip
gdb-d2adf9f120dd9ddef67b1d94b24298dfd3410bd1.tar.gz
gdb-d2adf9f120dd9ddef67b1d94b24298dfd3410bd1.tar.bz2
Remove the exception and cleanup checkers
Now that gdb is transitioning away from cleanups, there is no reason to keep the cleanup and exception checker scripts around. This patch removes them. gdb/ChangeLog 2019-01-05 Tom Tromey <tom@tromey.com> * contrib/cleanup_check.py: Remove. * contrib/gcc-with-excheck: Remove. * contrib/exsummary.py: Remove. * contrib/excheck.py: Remove.
Diffstat (limited to 'gdb/contrib/exsummary.py')
-rw-r--r--gdb/contrib/exsummary.py185
1 files changed, 0 insertions, 185 deletions
diff --git a/gdb/contrib/exsummary.py b/gdb/contrib/exsummary.py
deleted file mode 100644
index f3f7c60..0000000
--- a/gdb/contrib/exsummary.py
+++ /dev/null
@@ -1,185 +0,0 @@
-# Copyright 2011-2019 Free Software Foundation, Inc.
-#
-# This is free software: you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see
-# <http://www.gnu.org/licenses/>.
-
-import sys
-import glob
-
-# Compute the summary information from the files created by
-# excheck.py. Run in the build directory where you used the
-# excheck.py plugin.
-
-class Function:
- def __init__(self, name):
- self.name = name
- self.location = None
- self.callers = []
- self.can_throw = False
- self.marked_nothrow = False
- self.reason = None
-
- def log(self, message):
- print "%s: note: %s" % (self.location, message)
-
- def set_location(self, location):
- self.location = location
-
- # CALLER is an Edge.
- def add_caller(self, caller):
- # self.log("adding call from %s" % caller.from_fn.name)
- self.callers.append(caller)
- # self.log("len = %d" % len(self.callers))
-
- def consistency_check(self):
- if self.marked_nothrow and self.can_throw:
- print ("%s: error: %s marked as both 'throw' and 'nothrow'"
- % (self.location, self.name))
-
- def declare_nothrow(self):
- self.marked_nothrow = True
- self.consistency_check()
-
- def declare_throw(self):
- result = not self.can_throw # Return True the first time
- self.can_throw = True
- self.consistency_check()
- return result
-
- def print_stack(self, is_indirect):
- if is_indirect:
- print ("%s: error: function %s is marked nothrow but is assumed to throw due to indirect call"
- % (self.location, self.name))
- else:
- print ("%s: error: function %s is marked nothrow but can throw"
- % (self.location, self.name))
-
- edge = self.reason
- while edge is not None:
- print ("%s: info: via call to %s"
- % (edge.location, edge.to_fn.name))
- edge = edge.to_fn.reason
-
- def mark_throw(self, edge, work_list, is_indirect):
- if not self.can_throw:
- # self.log("can throw")
- self.can_throw = True
- self.reason = edge
- if self.marked_nothrow:
- self.print_stack(is_indirect)
- else:
- # Do this in the 'else' to avoid extra error
- # propagation.
- work_list.append(self)
-
-class Edge:
- def __init__(self, from_fn, to_fn, location):
- self.from_fn = from_fn
- self.to_fn = to_fn
- self.location = location
-
-# Work list of known-throwing functions.
-work_list = []
-# Map from function name to Function object.
-function_map = {}
-# Work list of indirect calls.
-indirect_functions = []
-# Whether we should process cleanup functions as well.
-process_cleanups = False
-# Whether we should process indirect function calls.
-process_indirect = False
-
-def declare(fn_name):
- global function_map
- if fn_name not in function_map:
- function_map[fn_name] = Function(fn_name)
- return function_map[fn_name]
-
-def define_function(fn_name, location):
- fn = declare(fn_name)
- fn.set_location(location)
-
-def declare_throw(fn_name):
- global work_list
- fn = declare(fn_name)
- if fn.declare_throw():
- work_list.append(fn)
-
-def declare_nothrow(fn_name):
- fn = declare(fn_name)
- fn.declare_nothrow()
-
-def declare_cleanup(fn_name):
- global process_cleanups
- fn = declare(fn_name)
- if process_cleanups:
- fn.declare_nothrow()
-
-def function_call(to, frm, location):
- to_fn = declare(to)
- frm_fn = declare(frm)
- to_fn.add_caller(Edge(frm_fn, to_fn, location))
-
-def has_indirect_call(fn_name, location):
- global indirect_functions
- fn = declare(fn_name)
- phony = Function("<indirect call>")
- phony.add_caller(Edge(fn, phony, location))
- indirect_functions.append(phony)
-
-def mark_functions(worklist, is_indirect):
- for callee in worklist:
- for edge in callee.callers:
- edge.from_fn.mark_throw(edge, worklist, is_indirect)
-
-def help_and_exit():
- print "Usage: exsummary [OPTION]..."
- print ""
- print "Read the .py files from the exception checker plugin and"
- print "generate an error summary."
- print ""
- print " --cleanups Include invalid behavior in cleanups"
- print " --indirect Include assumed errors due to indirect function calls"
- sys.exit(0)
-
-def main():
- global work_list
- global indirect_functions
- global process_cleanups
- global process_indirect
-
- for arg in sys.argv:
- if arg == '--cleanups':
- process_cleanups = True
- elif arg == '--indirect':
- process_indirect = True
- elif arg == '--help':
- help_and_exit()
-
- for fname in sorted(glob.glob('*.c.gdb_exc.py')):
- execfile(fname)
- print "================"
- print "= Ordinary marking"
- print "================"
- mark_functions(work_list, False)
- if process_indirect:
- print "================"
- print "= Indirect marking"
- print "================"
- mark_functions(indirect_functions, True)
- return 0
-
-if __name__ == '__main__':
- status = main()
- sys.exit(status)