utils.py 928 B

12345678910111213141516171819202122232425262728293031323334
  1. #
  2. # gdb helper commands and functions for Linux kernel debugging
  3. #
  4. # common utilities
  5. #
  6. # Copyright (c) Siemens AG, 2011-2013
  7. #
  8. # Authors:
  9. # Jan Kiszka <jan.kiszka@siemens.com>
  10. #
  11. # This work is licensed under the terms of the GNU GPL version 2.
  12. #
  13. import gdb
  14. class CachedType:
  15. def __init__(self, name):
  16. self._type = None
  17. self._name = name
  18. def _new_objfile_handler(self, event):
  19. self._type = None
  20. gdb.events.new_objfile.disconnect(self._new_objfile_handler)
  21. def get_type(self):
  22. if self._type is None:
  23. self._type = gdb.lookup_type(self._name)
  24. if self._type is None:
  25. raise gdb.GdbError(
  26. "cannot resolve type '{0}'".format(self._name))
  27. if hasattr(gdb, 'events') and hasattr(gdb.events, 'new_objfile'):
  28. gdb.events.new_objfile.connect(self._new_objfile_handler)
  29. return self._type