summaryrefslogtreecommitdiffstats
path: root/debuginfo-tests/dexter/dex/debugger/dbgeng/breakpoint.py
diff options
context:
space:
mode:
Diffstat (limited to 'debuginfo-tests/dexter/dex/debugger/dbgeng/breakpoint.py')
-rw-r--r--debuginfo-tests/dexter/dex/debugger/dbgeng/breakpoint.py88
1 files changed, 88 insertions, 0 deletions
diff --git a/debuginfo-tests/dexter/dex/debugger/dbgeng/breakpoint.py b/debuginfo-tests/dexter/dex/debugger/dbgeng/breakpoint.py
new file mode 100644
index 00000000000..c966d8c9c88
--- /dev/null
+++ b/debuginfo-tests/dexter/dex/debugger/dbgeng/breakpoint.py
@@ -0,0 +1,88 @@
+# DExTer : Debugging Experience Tester
+# ~~~~~~ ~ ~~ ~ ~~
+#
+# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+# See https://llvm.org/LICENSE.txt for license information.
+# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+
+from ctypes import *
+from enum import *
+from functools import partial
+
+from .utils import *
+
+class BreakpointTypes(IntEnum):
+ DEBUG_BREAKPOINT_CODE = 0
+ DEBUG_BREAKPOINT_DATA = 1
+ DEBUG_BREAKPOINT_TIME = 2
+ DEBUG_BREAKPOINT_INLINE = 3
+
+class BreakpointFlags(IntFlag):
+ DEBUG_BREAKPOINT_GO_ONLY = 0x00000001
+ DEBUG_BREAKPOINT_DEFERRED = 0x00000002
+ DEBUG_BREAKPOINT_ENABLED = 0x00000004
+ DEBUG_BREAKPOINT_ADDER_ONLY = 0x00000008
+ DEBUG_BREAKPOINT_ONE_SHOT = 0x00000010
+
+DebugBreakpoint2IID = IID(0x1b278d20, 0x79f2, 0x426e, IID_Data4_Type(0xa3, 0xf9, 0xc1, 0xdd, 0xf3, 0x75, 0xd4, 0x8e))
+
+class DebugBreakpoint2(Structure):
+ pass
+
+class DebugBreakpoint2Vtbl(Structure):
+ wrp = partial(WINFUNCTYPE, c_long, POINTER(DebugBreakpoint2))
+ idb_setoffset = wrp(c_ulonglong)
+ idb_setflags = wrp(c_ulong)
+ _fields_ = [
+ ("QueryInterface", c_void_p),
+ ("AddRef", c_void_p),
+ ("Release", c_void_p),
+ ("GetId", c_void_p),
+ ("GetType", c_void_p),
+ ("GetAdder", c_void_p),
+ ("GetFlags", c_void_p),
+ ("AddFlags", c_void_p),
+ ("RemoveFlags", c_void_p),
+ ("SetFlags", idb_setflags),
+ ("GetOffset", c_void_p),
+ ("SetOffset", idb_setoffset),
+ ("GetDataParameters", c_void_p),
+ ("SetDataParameters", c_void_p),
+ ("GetPassCount", c_void_p),
+ ("SetPassCount", c_void_p),
+ ("GetCurrentPassCount", c_void_p),
+ ("GetMatchThreadId", c_void_p),
+ ("SetMatchThreadId", c_void_p),
+ ("GetCommand", c_void_p),
+ ("SetCommand", c_void_p),
+ ("GetOffsetExpression", c_void_p),
+ ("SetOffsetExpression", c_void_p),
+ ("GetParameters", c_void_p),
+ ("GetCommandWide", c_void_p),
+ ("SetCommandWide", c_void_p),
+ ("GetOffsetExpressionWide", c_void_p),
+ ("SetOffsetExpressionWide", c_void_p)
+ ]
+
+DebugBreakpoint2._fields_ = [("lpVtbl", POINTER(DebugBreakpoint2Vtbl))]
+
+class Breakpoint(object):
+ def __init__(self, breakpoint):
+ self.breakpoint = breakpoint.contents
+ self.vt = self.breakpoint.lpVtbl.contents
+
+ def SetFlags(self, flags):
+ res = self.vt.SetFlags(self.breakpoint, flags)
+ aborter(res, "Breakpoint SetFlags")
+
+ def SetOffset(self, offs):
+ res = self.vt.SetOffset(self.breakpoint, offs)
+ aborter(res, "Breakpoint SetOffset")
+
+ def RemoveFlags(self, flags):
+ res = self.vt.RemoveFlags(self.breakpoint, flags)
+ aborter(res, "Breakpoint RemoveFlags")
+
+ def die(self):
+ self.breakpoint = None
+ self.vt = None
OpenPOWER on IntegriCloud