xref: /llvm-project/cross-project-tests/debuginfo-tests/dexter/dex/debugger/dbgeng/utils.py (revision f98ee40f4b5d7474fc67e82824bf6abbaedb7b1c)
11364750dSJames Henderson# DExTer : Debugging Experience Tester
21364750dSJames Henderson# ~~~~~~   ~         ~~         ~   ~~
31364750dSJames Henderson#
41364750dSJames Henderson# Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
51364750dSJames Henderson# See https://llvm.org/LICENSE.txt for license information.
61364750dSJames Henderson# SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
71364750dSJames Henderson
81364750dSJames Hendersonfrom ctypes import *
91364750dSJames Henderson
101364750dSJames Henderson# Error codes are negative when received by python, but are typically
111364750dSJames Henderson# represented by unsigned hex elsewhere. Subtract 2^32 from the unsigned
121364750dSJames Henderson# hex to produce negative error codes.
131364750dSJames HendersonE_NOINTERFACE = 0x80004002 - 0x100000000
141364750dSJames HendersonE_FAIL = 0x80004005 - 0x100000000
151364750dSJames HendersonE_EINVAL = 0x80070057 - 0x100000000
161364750dSJames HendersonE_INTERNALEXCEPTION = 0x80040205 - 0x100000000
171364750dSJames HendersonS_FALSE = 1
181364750dSJames Henderson
191364750dSJames Henderson# This doesn't fit into any convenient category
201364750dSJames HendersonDEBUG_ANY_ID = 0xFFFFFFFF
211364750dSJames Henderson
22*f98ee40fSTobias Hieta
231364750dSJames Hendersonclass WinError(Exception):
241364750dSJames Henderson    def __init__(self, msg, hstatus):
251364750dSJames Henderson        self.hstatus = hstatus
261364750dSJames Henderson        super(WinError, self).__init__(msg)
271364750dSJames Henderson
28*f98ee40fSTobias Hieta
291364750dSJames Hendersondef aborter(res, msg, ignore=[]):
301364750dSJames Henderson    if res != 0 and res not in ignore:
311364750dSJames Henderson        # Convert a negative error code to a positive unsigned one, which is
321364750dSJames Henderson        # now NTSTATUSes appear in documentation.
331364750dSJames Henderson        if res < 0:
341364750dSJames Henderson            res += 0x100000000
35*f98ee40fSTobias Hieta        msg = "{:08X} : {}".format(res, msg)
361364750dSJames Henderson        raise WinError(msg, res)
371364750dSJames Henderson
38*f98ee40fSTobias Hieta
391364750dSJames HendersonIID_Data4_Type = c_ubyte * 8
401364750dSJames Henderson
41*f98ee40fSTobias Hieta
421364750dSJames Hendersonclass IID(Structure):
431364750dSJames Henderson    _fields_ = [
441364750dSJames Henderson        ("Data1", c_uint),
451364750dSJames Henderson        ("Data2", c_ushort),
461364750dSJames Henderson        ("Data3", c_ushort),
47*f98ee40fSTobias Hieta        ("Data4", IID_Data4_Type),
481364750dSJames Henderson    ]
491364750dSJames Henderson
50*f98ee40fSTobias Hieta
511364750dSJames Hendersonc_ulong_p = POINTER(c_ulong)
521364750dSJames Hendersonc_ulong64_p = POINTER(c_ulonglong)
53