Loading...
tools/lldbmacros/core/pointer.py xnu-12377.101.15 /dev/null
--- xnu/xnu-12377.101.15/tools/lldbmacros/core/pointer.py
+++ /dev/null
@@ -1,92 +0,0 @@
-"""
-Custom pointer support
-
-This module provides support for special pointer types that are not native to the
-language used by the target being debugged. Such pointers may be represented as a struct
-or class (for example IOKit's shared pointers).
-
-A custom pointer class must subclass the PointerPolicy class and implement all of its
-abstract methods. The MetaPointerPolicy metaclass ensures that all known subclasses are
-registered in a global list (wherever they are located in the lldb macro sources).
-
-A client can obtain a PointerPolicy instance by calling the match method with an SBValue
-instance as an argument. The returned value is one of:
-
-    * None - the match was unsuccessful and this SBValue instance is not a pointer.
-    * Concrete instance - An instance of the concrete PointerPolicy class that will handle
-      pointer operations for the given SBValue.
-
-Concrete policy instances implement an API that allows a client to operate on a value
-like a native pointer (for example unwrapping a native pointer from a smart pointer).
-
-Example:
-
-    # Obtain an SBValue instance.
-    val = kern.global.GlobalVariable.GetSBValue()
-
-    # Try to match the pointer policy for the given value.
-    policy = PointerPolicy.match(val)
-
-    # Unwrap the pointer SBValue.
-    if policy:
-        val = policy.GetPointerSBValue(val)
-
-    ... Operate on val as usual.
-"""
-from operator import methodcaller
-from abc import ABCMeta, abstractmethod
-
-import lldb
-
-from .caching import cache_statically
-
-
-class MetaPointerPolicy(ABCMeta):
-    """ Register a custom pointer policy in global list. """
-
-    classes = []
-
-    def __new__(cls, clsname, bases, args):
-        newcls = super(MetaPointerPolicy, cls).__new__(cls, clsname, bases, args)
-        cls.classes.append(newcls)
-        return newcls
-
-
-class Singleton(MetaPointerPolicy):
-    """ Meta class for creation of singleton instances. """
-
-    _instances = {}
-
-    def __call__(cls, *args, **kwargs):
-        if cls not in cls._instances:
-            cls._instances[cls] = super(Singleton, cls).__call__(*args, **kwargs)
-        return cls._instances[cls]
-
-
-class PointerPolicy(object, metaclass=ABCMeta):
-    """ Abstract base class common to every custom pointer policy. """
-
-    @classmethod
-    def match(cls, sbvalue):
-        """ Match pointer representation based on given SBValue. """
-        matching = filter(bool, map(methodcaller('match', sbvalue), MetaPointerPolicy.classes))
-        return next(matching, None)
-
-    @abstractmethod
-    def GetPointerSBValue(self, sbvalue):
-        """ Returns pointer value that debugger should operate on. """
-
-
-class NativePointer(PointerPolicy, metaclass=Singleton):
-    """ Policy for native pointers.
-
-        Native pointers do not have any per-pointer attributes so this policy
-        can be singleton instance.
-    """
-
-    @classmethod
-    def match(cls, sbvalue):
-        return cls() if sbvalue.GetType().IsPointerType() else None
-
-    def GetPointerSBValue(self, sbvalue):
-        return sbvalue