mirror of
https://github.com/odin-lang/Odin.git
synced 2026-04-19 13:00:28 +00:00
Dbghelp
This commit is contained in:
250
core/sys/windows/dbghelp.odin
Normal file
250
core/sys/windows/dbghelp.odin
Normal file
@@ -0,0 +1,250 @@
|
||||
// +build windows
|
||||
package sys_windows
|
||||
|
||||
foreign import "system:Dbghelp.lib"
|
||||
|
||||
RVA :: DWORD
|
||||
|
||||
MINIDUMP_LOCATION_DESCRIPTOR :: struct {
|
||||
DataSize: ULONG32,
|
||||
Rva: RVA,
|
||||
}
|
||||
|
||||
MINIDUMP_DIRECTORY :: struct {
|
||||
StreamType: ULONG32,
|
||||
Location: MINIDUMP_LOCATION_DESCRIPTOR,
|
||||
}
|
||||
|
||||
MINIDUMP_EXCEPTION_INFORMATION :: struct {
|
||||
ThreadId: DWORD,
|
||||
ExceptionPointers: ^EXCEPTION_POINTERS,
|
||||
ClientPointers: BOOL,
|
||||
}
|
||||
|
||||
MINIDUMP_MEMORY_INFO :: struct {
|
||||
BaseAddress: ULONG64,
|
||||
AllocationBase: ULONG64,
|
||||
AllocationProtect: ULONG32,
|
||||
__alignment1: ULONG32,
|
||||
RegionSize: ULONG64,
|
||||
State: ULONG32,
|
||||
Protect: ULONG32,
|
||||
Type: ULONG32,
|
||||
__alignment2: ULONG32,
|
||||
}
|
||||
|
||||
MINIDUMP_USER_STREAM :: struct {
|
||||
Type: ULONG32,
|
||||
BufferSize: ULONG,
|
||||
Buffer: PVOID,
|
||||
}
|
||||
|
||||
MINIDUMP_USER_STREAM_INFORMATION :: struct {
|
||||
UserStreamCount: ULONG,
|
||||
UserStreamArray: ^MINIDUMP_USER_STREAM,
|
||||
}
|
||||
|
||||
MINIDUMP_CALLBACK_ROUTINE :: #type proc "stdcall" (
|
||||
CallbackParam: PVOID,
|
||||
CallbackInput: ^MINIDUMP_CALLBACK_INPUT,
|
||||
CallbackOutpu: ^MINIDUMP_CALLBACK_OUTPUT,
|
||||
) -> BOOL
|
||||
|
||||
MINIDUMP_CALLBACK_INFORMATION :: struct {
|
||||
CallbackRoutine: MINIDUMP_CALLBACK_ROUTINE,
|
||||
CallbackParam: PVOID,
|
||||
}
|
||||
|
||||
MINIDUMP_CALLBACK_INPUT :: struct {
|
||||
ProcessId: ULONG,
|
||||
ProcessHandle: HANDLE,
|
||||
CallbackType: ULONG,
|
||||
using _: struct #raw_union {
|
||||
Status: HRESULT,
|
||||
Thread: MINIDUMP_THREAD_CALLBACK,
|
||||
ThreadEx: MINIDUMP_THREAD_EX_CALLBACK,
|
||||
Module: MINIDUMP_MODULE_CALLBACK,
|
||||
IncludeThread: MINIDUMP_INCLUDE_THREAD_CALLBACK,
|
||||
IncludeModule: MINIDUMP_INCLUDE_MODULE_CALLBACK,
|
||||
Io: MINIDUMP_IO_CALLBACK,
|
||||
ReadMemoryFailure: MINIDUMP_READ_MEMORY_FAILURE_CALLBACK,
|
||||
SecondaryFlags: ULONG,
|
||||
VmQuery: MINIDUMP_VM_QUERY_CALLBACK,
|
||||
VmPreRead: MINIDUMP_VM_PRE_READ_CALLBACK,
|
||||
VmPostRead: MINIDUMP_VM_POST_READ_CALLBACK,
|
||||
},
|
||||
}
|
||||
|
||||
_MINIDUMP_ARM64_PAD :: ULONG when ODIN_ARCH == .arm64 else struct {}
|
||||
|
||||
MINIDUMP_THREAD_CALLBACK :: struct {
|
||||
ThreadId: ULONG,
|
||||
ThreadHandle: HANDLE,
|
||||
Pad: _MINIDUMP_ARM64_PAD,
|
||||
Context: CONTEXT,
|
||||
SizeOfContext: ULONG,
|
||||
StackBase: ULONG64,
|
||||
StackEnd: ULONG64,
|
||||
}
|
||||
|
||||
MINIDUMP_THREAD_EX_CALLBACK :: struct {
|
||||
ThreadId: ULONG,
|
||||
ThreadHandle: HANDLE,
|
||||
Pad: _MINIDUMP_ARM64_PAD,
|
||||
Context: CONTEXT,
|
||||
SizeOfContext: ULONG,
|
||||
StackBase: ULONG64,
|
||||
StackEnd: ULONG64,
|
||||
BackingStoreBase: ULONG64,
|
||||
BackingStoreEnd: ULONG64,
|
||||
}
|
||||
|
||||
MINIDUMP_INCLUDE_THREAD_CALLBACK :: struct {
|
||||
ThreadId: ULONG,
|
||||
}
|
||||
|
||||
// NOTE(jakubtomsu): From verrsrc.h
|
||||
VS_FIXEDFILEINFO :: struct {
|
||||
dwSignature: DWORD, /* e.g. 0xfeef04bd */
|
||||
dwStrucVersion: DWORD, /* e.g. 0x00000042 = "0.42" */
|
||||
dwFileVersionMS: DWORD, /* e.g. 0x00030075 = "3.75" */
|
||||
dwFileVersionLS: DWORD, /* e.g. 0x00000031 = "0.31" */
|
||||
dwProductVersionMS: DWORD, /* e.g. 0x00030010 = "3.10" */
|
||||
dwProductVersionLS: DWORD, /* e.g. 0x00000031 = "0.31" */
|
||||
dwFileFlagsMask: DWORD, /* = 0x3F for version "0.42" */
|
||||
dwFileFlags: DWORD, /* e.g. VFF_DEBUG | VFF_PRERELEASE */
|
||||
dwFileOS: DWORD, /* e.g. VOS_DOS_WINDOWS16 */
|
||||
dwFileType: DWORD, /* e.g. VFT_DRIVER */
|
||||
dwFileSubtype: DWORD, /* e.g. VFT2_DRV_KEYBOARD */
|
||||
dwFileDateMS: DWORD, /* e.g. 0 */
|
||||
dwFileDateLS: DWORD, /* e.g. 0 */
|
||||
}
|
||||
|
||||
MINIDUMP_MODULE_CALLBACK :: struct {
|
||||
FullPath: ^WCHAR,
|
||||
BaseOfImage: ULONG64,
|
||||
SizeOfImage: ULONG,
|
||||
CheckSum: ULONG,
|
||||
TimeDateStamp: ULONG,
|
||||
VersionInfo: VS_FIXEDFILEINFO,
|
||||
CvRecord: PVOID,
|
||||
SizeOfCvRecord: ULONG,
|
||||
MiscRecord: PVOID,
|
||||
SizeOfMiscRecord: ULONG,
|
||||
}
|
||||
|
||||
MINIDUMP_INCLUDE_MODULE_CALLBACK :: struct {
|
||||
BaseOfImage: u64,
|
||||
}
|
||||
|
||||
MINIDUMP_IO_CALLBACK :: struct {
|
||||
Handle: HANDLE,
|
||||
Offset: ULONG64,
|
||||
Buffer: PVOID,
|
||||
BufferBytes: ULONG,
|
||||
}
|
||||
|
||||
MINIDUMP_READ_MEMORY_FAILURE_CALLBACK :: struct {
|
||||
Offset: ULONG64,
|
||||
Bytes: ULONG,
|
||||
FailureStatus: HRESULT,
|
||||
}
|
||||
|
||||
MINIDUMP_VM_QUERY_CALLBACK :: struct {
|
||||
Offset: ULONG64,
|
||||
}
|
||||
|
||||
MINIDUMP_VM_PRE_READ_CALLBACK :: struct {
|
||||
Offset: ULONG64,
|
||||
Buffer: PVOID,
|
||||
Size: ULONG,
|
||||
}
|
||||
|
||||
MINIDUMP_VM_POST_READ_CALLBACK :: struct {
|
||||
Offset: ULONG64,
|
||||
Buffer: PVOID,
|
||||
Size: ULONG,
|
||||
Completed: ULONG,
|
||||
Status: HRESULT,
|
||||
}
|
||||
|
||||
MINIDUMP_CALLBACK_OUTPUT :: struct {
|
||||
using _: struct #raw_union {
|
||||
ModuleWriteFlags: ULONG,
|
||||
ThreadWriteFlags: ULONG,
|
||||
SecondaryFlags: ULONG,
|
||||
using _: struct {
|
||||
MemoryBase: ULONG64,
|
||||
MemorySize: ULONG,
|
||||
},
|
||||
using _: struct {
|
||||
CheckCancel: BOOL,
|
||||
Cancel: BOOL,
|
||||
},
|
||||
Handle: HANDLE,
|
||||
using _: struct {
|
||||
VmRegion: MINIDUMP_MEMORY_INFO,
|
||||
Continue: BOOL,
|
||||
},
|
||||
using _: struct {
|
||||
VmQueryStatus: HRESULT,
|
||||
VmQueryResult: MINIDUMP_MEMORY_INFO,
|
||||
},
|
||||
using _: struct {
|
||||
VmReadStatus: HRESULT,
|
||||
VmReadBytesCompleted: ULONG,
|
||||
},
|
||||
Status: HRESULT,
|
||||
},
|
||||
}
|
||||
|
||||
MINIDUMP_TYPE :: enum u32 {
|
||||
Normal = 0x00000000,
|
||||
WithDataSegs = 0x00000001,
|
||||
WithFullMemory = 0x00000002,
|
||||
WithHandleData = 0x00000004,
|
||||
FilterMemory = 0x00000008,
|
||||
ScanMemory = 0x00000010,
|
||||
WithUnloadedModules = 0x00000020,
|
||||
WithIndirectlyReferencedMemory = 0x00000040,
|
||||
FilterModulePaths = 0x00000080,
|
||||
WithProcessThreadData = 0x00000100,
|
||||
WithPrivateReadWriteMemory = 0x00000200,
|
||||
WithoutOptionalData = 0x00000400,
|
||||
WithFullMemoryInfo = 0x00000800,
|
||||
WithThreadInfo = 0x00001000,
|
||||
WithCodeSegs = 0x00002000,
|
||||
WithoutAuxiliaryState = 0x00004000,
|
||||
WithFullAuxiliaryState = 0x00008000,
|
||||
WithPrivateWriteCopyMemory = 0x00010000,
|
||||
IgnoreInaccessibleMemory = 0x00020000,
|
||||
WithTokenInformation = 0x00040000,
|
||||
WithModuleHeaders = 0x00080000,
|
||||
FilterTriage = 0x00100000,
|
||||
WithAvxXStateContext = 0x00200000,
|
||||
WithIptTrace = 0x00400000,
|
||||
ScanInaccessiblePartialPages = 0x00800000,
|
||||
FilterWriteCombinedMemory = 0x01000000,
|
||||
ValidTypeFlags = 0x01ffffff,
|
||||
}
|
||||
|
||||
@(default_calling_convention = "stdcall")
|
||||
foreign Dbghelp {
|
||||
MiniDumpWriteDump :: proc(
|
||||
hProcess: HANDLE,
|
||||
ProcessId: DWORD,
|
||||
hFile: HANDLE,
|
||||
DumpType: MINIDUMP_TYPE,
|
||||
ExceptionParam: ^MINIDUMP_EXCEPTION_INFORMATION,
|
||||
UserStreamParam: ^MINIDUMP_USER_STREAM_INFORMATION,
|
||||
CallbackPara: ^MINIDUMP_CALLBACK_INFORMATION,
|
||||
) -> BOOL ---
|
||||
|
||||
MiniDumpReadDumpStream :: proc(
|
||||
BaseOfDump: PVOID,
|
||||
StreamNumber: ULONG,
|
||||
Dir: ^^MINIDUMP_DIRECTORY,
|
||||
StreamPointer: ^PVOID,
|
||||
StreamSize: ^ULONG,
|
||||
) -> BOOL ---
|
||||
}
|
||||
@@ -86,6 +86,8 @@ INT16 :: i16
|
||||
INT32 :: i32
|
||||
INT64 :: i64
|
||||
|
||||
ULONG32 :: u32
|
||||
LONG32 :: i32
|
||||
|
||||
ULONG64 :: u64
|
||||
LONG64 :: i64
|
||||
|
||||
Reference in New Issue
Block a user