From: Martin Quinson Date: Wed, 9 Mar 2016 01:19:45 +0000 (+0100) Subject: kill windows backtraces. They were x86 only X-Git-Tag: v3_13~455 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/1264d2c123d6828e4f628cfbf50447f3522ec5c4?hp=025e9b46ddcf40fa23c435b365ffe56917a1960b kill windows backtraces. They were x86 only --- diff --git a/src/include/xbt/wine_dbghelp.h b/src/include/xbt/wine_dbghelp.h deleted file mode 100644 index b258f2f79c..0000000000 --- a/src/include/xbt/wine_dbghelp.h +++ /dev/null @@ -1,1365 +0,0 @@ -/* Copyright (c) 2008-2010, 2014. The SimGrid Team. - * All rights reserved. */ - -/* This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. */ - -/* - * Declarations for DBGHELP - * - * Copyright (C) 2003 Eric Pouech - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - * - * We need this file in SimGrid when cross-compiling with gcc for the windows target. - */ - -#ifndef __WINE_DBGHELP_H -#define __WINE_DBGHELP_H - -#ifdef __cplusplus -extern "C" { -#endif /* defined(__cplusplus) */ - -#define IMAGEAPI WINAPI -#define DBHLPAPI IMAGEAPI - - typedef struct _LOADED_IMAGE { - PSTR ModuleName; - HANDLE hFile; - PUCHAR MappedAddress; - PIMAGE_NT_HEADERS FileHeader; - PIMAGE_SECTION_HEADER LastRvaSection; - ULONG NumberOfSections; - PIMAGE_SECTION_HEADER Sections; - ULONG Characteristics; - BOOLEAN fSystemImage; - BOOLEAN fDOSImage; - BOOLEAN fReadOnly; - UCHAR Version; - LIST_ENTRY Links; - ULONG SizeOfImage; - } LOADED_IMAGE, *PLOADED_IMAGE; - -/************************* - * IMAGEHLP equiv * - *************************/ - - typedef enum { - AddrMode1616, - AddrMode1632, - AddrModeReal, - AddrModeFlat - } ADDRESS_MODE; - - typedef struct _tagADDRESS { - DWORD Offset; - WORD Segment; - ADDRESS_MODE Mode; - } ADDRESS, *LPADDRESS; - - typedef struct _tagADDRESS64 { - DWORD64 Offset; - WORD Segment; - ADDRESS_MODE Mode; - } ADDRESS64, *LPADDRESS64; - -#define SYMF_OMAP_GENERATED 0x00000001 -#define SYMF_OMAP_MODIFIED 0x00000002 -#define SYMF_USER_GENERATED 0x00000004 -#define SYMF_REGISTER 0x00000008 -#define SYMF_REGREL 0x00000010 -#define SYMF_FRAMEREL 0x00000020 -#define SYMF_PARAMETER 0x00000040 -#define SYMF_LOCAL 0x00000080 -#define SYMF_CONSTANT 0x00000100 -#define SYMF_EXPORT 0x00000200 -#define SYMF_FORWARDER 0x00000400 -#define SYMF_FUNCTION 0x00000800 -#define SYMF_VIRTUAL 0x00001000 -#define SYMF_THUNK 0x00002000 -#define SYMF_TLSREL 0x00004000 - - typedef enum { - SymNone = 0, - SymCoff, - SymCv, - SymPdb, - SymExport, - SymDeferred, - SymSym, - SymDia, - SymVirtual, - NumSymTypes - } SYM_TYPE; - - typedef struct _IMAGEHLP_SYMBOL { - DWORD SizeOfStruct; - DWORD Address; - DWORD Size; - DWORD Flags; - DWORD MaxNameLength; - CHAR Name[1]; - } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL; - - typedef struct _IMAGEHLP_SYMBOL64 { - DWORD SizeOfStruct; - DWORD64 Address; - DWORD Size; - DWORD Flags; - DWORD MaxNameLength; - CHAR Name[1]; - } IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; - - typedef struct _IMAGEHLP_SYMBOLW64 { - DWORD SizeOfStruct; - DWORD64 Address; - DWORD Size; - DWORD Flags; - DWORD MaxNameLength; - WCHAR Name[1]; - } IMAGEHLP_SYMBOLW64, *PIMAGEHLP_SYMBOLW64; - - typedef struct _IMAGEHLP_MODULE { - DWORD SizeOfStruct; - DWORD BaseOfImage; - DWORD ImageSize; - DWORD TimeDateStamp; - DWORD CheckSum; - DWORD NumSyms; - SYM_TYPE SymType; - CHAR ModuleName[32]; - CHAR ImageName[256]; - CHAR LoadedImageName[256]; - } IMAGEHLP_MODULE, *PIMAGEHLP_MODULE; - - typedef struct _IMAGEHLP_MODULEW { - DWORD SizeOfStruct; - DWORD BaseOfImage; - DWORD ImageSize; - DWORD TimeDateStamp; - DWORD CheckSum; - DWORD NumSyms; - SYM_TYPE SymType; - WCHAR ModuleName[32]; - WCHAR ImageName[256]; - WCHAR LoadedImageName[256]; - } IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW; - - typedef struct _IMAGEHLP_MODULE64 { - DWORD SizeOfStruct; - DWORD64 BaseOfImage; - DWORD ImageSize; - DWORD TimeDateStamp; - DWORD CheckSum; - DWORD NumSyms; - SYM_TYPE SymType; - CHAR ModuleName[32]; - CHAR ImageName[256]; - CHAR LoadedImageName[256]; - CHAR LoadedPdbName[256]; - DWORD CVSig; - CHAR CVData[MAX_PATH * 3]; - DWORD PdbSig; - GUID PdbSig70; - DWORD PdbAge; - BOOL PdbUnmatched; - BOOL DbgUnmatched; - BOOL LineNumbers; - BOOL GlobalSymbols; - BOOL TypeInfo; - BOOL SourceIndexed; - BOOL Publics; - } IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; - - typedef struct _IMAGEHLP_MODULEW64 { - DWORD SizeOfStruct; - DWORD64 BaseOfImage; - DWORD ImageSize; - DWORD TimeDateStamp; - DWORD CheckSum; - DWORD NumSyms; - SYM_TYPE SymType; - WCHAR ModuleName[32]; - WCHAR ImageName[256]; - WCHAR LoadedImageName[256]; - WCHAR LoadedPdbName[256]; - DWORD CVSig; - WCHAR CVData[MAX_PATH * 3]; - DWORD PdbSig; - GUID PdbSig70; - DWORD PdbAge; - BOOL PdbUnmatched; - BOOL DbgUnmatched; - BOOL LineNumbers; - BOOL GlobalSymbols; - BOOL TypeInfo; - BOOL SourceIndexed; - BOOL Publics; - } IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64; - - typedef struct _IMAGEHLP_LINE { - DWORD SizeOfStruct; - PVOID Key; - DWORD LineNumber; - PCHAR FileName; - DWORD Address; - } IMAGEHLP_LINE, *PIMAGEHLP_LINE; - - typedef struct _IMAGEHLP_LINEW { - DWORD SizeOfStruct; - PVOID Key; - DWORD LineNumber; - PWSTR FileName; - DWORD Address; - } IMAGEHLP_LINEW, *PIMAGEHLP_LINEW; - - typedef struct _IMAGEHLP_LINE64 { - DWORD SizeOfStruct; - PVOID Key; - DWORD LineNumber; - PCHAR FileName; - DWORD64 Address; - } IMAGEHLP_LINE64, *PIMAGEHLP_LINE64; - - typedef struct _IMAGEHLP_LINEW64 { - DWORD SizeOfStruct; - PVOID Key; - DWORD LineNumber; - PWSTR FileName; - DWORD64 Address; - } IMAGEHLP_LINEW64, *PIMAGEHLP_LINEW64; - - typedef struct _SOURCEFILE { - DWORD64 ModBase; - PCHAR FileName; - } SOURCEFILE, *PSOURCEFILE; - - typedef struct _SOURCEFILEW { - DWORD64 ModBase; - PWSTR FileName; - } SOURCEFILEW, *PSOURCEFILEW; - -#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001 -#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002 -#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003 -#define CBA_SYMBOLS_UNLOADED 0x00000004 -#define CBA_DUPLICATE_SYMBOL 0x00000005 -#define CBA_READ_MEMORY 0x00000006 -#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007 -#define CBA_SET_OPTIONS 0x00000008 -#define CBA_EVENT 0x00000010 -#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020 -#define CBA_DEBUG_INFO 0x10000000 - - typedef struct _IMAGEHLP_CBA_READ_MEMORY { - DWORD64 addr; - PVOID buf; - DWORD bytes; - DWORD *bytesread; - } IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY; - - enum { - sevInfo = 0, - sevProblem, - sevAttn, - sevFatal, - sevMax - }; - -#define EVENT_SRCSPEW_START 100 -#define EVENT_SRCSPEW 100 -#define EVENT_SRCSPEW_END 199 - - typedef struct _IMAGEHLP_CBA_EVENT { - DWORD severity; - DWORD code; - PCHAR desc; - PVOID object; - } IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT; - - typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { - DWORD SizeOfStruct; - DWORD BaseOfImage; - DWORD CheckSum; - DWORD TimeDateStamp; - CHAR FileName[MAX_PATH]; - BOOLEAN Reparse; - HANDLE hFile; - } IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD; - - typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 { - DWORD SizeOfStruct; - DWORD64 BaseOfImage; - DWORD CheckSum; - DWORD TimeDateStamp; - CHAR FileName[MAX_PATH]; - BOOLEAN Reparse; - HANDLE hFile; - DWORD Flags; - } IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; - - typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOADW64 { - DWORD SizeOfStruct; - DWORD64 BaseOfImage; - DWORD CheckSum; - DWORD TimeDateStamp; - WCHAR FileName[MAX_PATH + 1]; - BOOLEAN Reparse; - HANDLE hFile; - DWORD Flags; - } IMAGEHLP_DEFERRED_SYMBOL_LOADW64, *PIMAGEHLP_DEFERRED_SYMBOL_LOADW64; - - typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { - DWORD SizeOfStruct; - DWORD NumberOfDups; - PIMAGEHLP_SYMBOL Symbol; - DWORD SelectedSymbol; - } IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL; - - typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 { - DWORD SizeOfStruct; - DWORD NumberOfDups; - PIMAGEHLP_SYMBOL64 Symbol; - DWORD SelectedSymbol; - } IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64; - -#define SYMOPT_CASE_INSENSITIVE 0x00000001 -#define SYMOPT_UNDNAME 0x00000002 -#define SYMOPT_DEFERRED_LOADS 0x00000004 -#define SYMOPT_NO_CPP 0x00000008 -#define SYMOPT_LOAD_LINES 0x00000010 -#define SYMOPT_OMAP_FIND_NEAREST 0x00000020 -#define SYMOPT_LOAD_ANYTHING 0x00000040 -#define SYMOPT_IGNORE_CVREC 0x00000080 -#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100 -#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200 -#define SYMOPT_EXACT_SYMBOLS 0x00000400 -#define SYMOPT_WILD_UNDERSCORE 0x00000800 -#define SYMOPT_USE_DEFAULTS 0x00001000 -/* latest SDK defines: -#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 -#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 -*/ -#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 -#define SYMOPT_PUBLICS_ONLY 0x00004000 -#define SYMOPT_NO_PUBLICS 0x00008000 -#define SYMOPT_AUTO_PUBLICS 0x00010000 -#define SYMOPT_NO_IMAGE_SEARCH 0x00020000 -#define SYMOPT_SECURE 0x00040000 -#define SYMOPT_NO_PROMPTS 0x00080000 -#define SYMOPT_OVERWRITE 0x00100000 -#define SYMOPT_IGNORE_IMAGEDIR 0x00200000 - -#define SYMOPT_DEBUG 0x80000000 - - typedef struct _IMAGEHLP_STACK_FRAME { - ULONG64 InstructionOffset; - ULONG64 ReturnOffset; - ULONG64 FrameOffset; - ULONG64 StackOffset; - ULONG64 BackingStoreOffset; - ULONG64 FuncTableEntry; - ULONG64 Params[4]; - ULONG64 Reserved[5]; - BOOL Virtual; - ULONG Reserved2; - } IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; - - typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; - -#define DBHHEADER_DEBUGDIRS 0x1 - typedef struct _DBGHELP_MODLOAD_DATA { - DWORD ssize; - DWORD ssig; - PVOID data; - DWORD size; - DWORD flags; - } MODLOAD_DATA, *PMODLOAD_DATA; - -/************************* - * MiniDUMP * - *************************/ - -#include -/* DebugHelp */ - -#define MINIDUMP_SIGNATURE 0x504D444D /* 'MDMP' */ -#define MINIDUMP_VERSION (42899) - - typedef DWORD RVA; - typedef ULONG64 RVA64; - - typedef enum _MINIDUMP_TYPE { - MiniDumpNormal = 0x0000, - MiniDumpWithDataSegs = 0x0001, - MiniDumpWithFullMemory = 0x0002, - MiniDumpWithHandleData = 0x0004, - MiniDumpFilterMemory = 0x0008, - MiniDumpScanMemory = 0x0010, - MiniDumpWithUnloadedModules = 0x0020, - MiniDumpWithIndirectlyReferencedMemory = 0x0040, - MiniDumpFilterModulePaths = 0x0080, - MiniDumpWithProcessThreadData = 0x0100, - MiniDumpWithPrivateReadWriteMemory = 0x0200, - MiniDumpWithoutOptionalData = 0x0400, - MiniDumpWithFullMemoryInfo = 0x0800, - MiniDumpWithThreadInfo = 0x1000, - MiniDumpWithCodeSegs = 0x2000 - } MINIDUMP_TYPE; - - typedef enum _MINIDUMP_CALLBACK_TYPE { - ModuleCallback, - ThreadCallback, - ThreadExCallback, - IncludeThreadCallback, - IncludeModuleCallback, - MemoryCallback, - } MINIDUMP_CALLBACK_TYPE; - - typedef struct _MINIDUMP_THREAD_CALLBACK { - ULONG ThreadId; - HANDLE ThreadHandle; - CONTEXT Context; - ULONG SizeOfContext; - ULONG64 StackBase; - ULONG64 StackEnd; - } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; - - typedef struct _MINIDUMP_THREAD_EX_CALLBACK { - ULONG ThreadId; - HANDLE ThreadHandle; - CONTEXT Context; - ULONG SizeOfContext; - ULONG64 StackBase; - ULONG64 StackEnd; - ULONG64 BackingStoreBase; - ULONG64 BackingStoreEnd; - } MINIDUMP_THREAD_EX_CALLBACK, *PMINIDUMP_THREAD_EX_CALLBACK; - - typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK { - ULONG ThreadId; - } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK; - - typedef enum _THREAD_WRITE_FLAGS { - ThreadWriteThread = 0x0001, - ThreadWriteStack = 0x0002, - ThreadWriteContext = 0x0004, - ThreadWriteBackingStore = 0x0008, - ThreadWriteInstructionWindow = 0x0010, - ThreadWriteThreadData = 0x0020, - ThreadWriteThreadInfo = 0x0040 - } THREAD_WRITE_FLAGS; - - typedef struct _MINIDUMP_MODULE_CALLBACK { - PWCHAR FullPath; - ULONG64 BaseOfImage; - ULONG SizeOfImage; - ULONG CheckSum; - ULONG TimeDateStamp; - VS_FIXEDFILEINFO VersionInfo; - PVOID CvRecord; - ULONG SizeOfCvRecord; - PVOID MiscRecord; - ULONG SizeOfMiscRecord; - } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK; - - typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { - ULONG64 BaseOfImage; - } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK; - - typedef enum _MODULE_WRITE_FLAGS { - ModuleWriteModule = 0x0001, - ModuleWriteDataSeg = 0x0002, - ModuleWriteMiscRecord = 0x0004, - ModuleWriteCvRecord = 0x0008, - ModuleReferencedByMemory = 0x0010, - ModuleWriteTlsData = 0x0020, - ModuleWriteCodeSegs = 0x0040, - } MODULE_WRITE_FLAGS; - - typedef struct _MINIDUMP_CALLBACK_INPUT { - ULONG ProcessId; - HANDLE ProcessHandle; - ULONG CallbackType; - union { - MINIDUMP_THREAD_CALLBACK Thread; - MINIDUMP_THREAD_EX_CALLBACK ThreadEx; - MINIDUMP_MODULE_CALLBACK Module; - MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread; - MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule; - } DUMMYUNIONNAME; - } MINIDUMP_CALLBACK_INPUT, *PMINIDUMP_CALLBACK_INPUT; - - typedef struct _MINIDUMP_CALLBACK_OUTPUT { - union { - ULONG ModuleWriteFlags; - ULONG ThreadWriteFlags; - struct { - ULONG64 MemoryBase; - ULONG MemorySize; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; - } MINIDUMP_CALLBACK_OUTPUT, *PMINIDUMP_CALLBACK_OUTPUT; - - typedef BOOL(WINAPI * MINIDUMP_CALLBACK_ROUTINE) (PVOID, - const - PMINIDUMP_CALLBACK_INPUT, - PMINIDUMP_CALLBACK_OUTPUT); - - typedef struct _MINIDUMP_CALLBACK_INFORMATION { - MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; - void *CallbackParam; - } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION; - - typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { - ULONG DataSize; - RVA Rva; - } MINIDUMP_LOCATION_DESCRIPTOR; - - typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 { - ULONG64 DataSize; - RVA64 Rva; - } MINIDUMP_LOCATION_DESCRIPTOR64; - - typedef struct _MINIDUMP_DIRECTORY { - ULONG StreamType; - MINIDUMP_LOCATION_DESCRIPTOR Location; - } MINIDUMP_DIRECTORY, *PMINIDUMP_DIRECTORY; - - typedef struct _MINIDUMP_EXCEPTION { - ULONG ExceptionCode; - ULONG ExceptionFlags; - ULONG64 ExceptionRecord; - ULONG64 ExceptionAddress; - ULONG NumberParameters; - ULONG __unusedAlignment; - ULONG64 ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS]; - } MINIDUMP_EXCEPTION, *PMINIDUMP_EXCEPTION; - - typedef struct _MINIDUMP_EXCEPTION_INFORMATION { - DWORD ThreadId; - PEXCEPTION_POINTERS ExceptionPointers; - BOOL ClientPointers; - } MINIDUMP_EXCEPTION_INFORMATION, *PMINIDUMP_EXCEPTION_INFORMATION; - - typedef struct MINIDUMP_EXCEPTION_STREAM { - ULONG ThreadId; - ULONG __alignment; - MINIDUMP_EXCEPTION ExceptionRecord; - MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; - } MINIDUMP_EXCEPTION_STREAM, *PMINIDUMP_EXCEPTION_STREAM; - - typedef struct _MINIDUMP_HEADER { - DWORD Signature; - DWORD Version; - DWORD NumberOfStreams; - RVA StreamDirectoryRva; - DWORD CheckSum; - union { - DWORD Reserved; - DWORD TimeDateStamp; - } DUMMYUNIONNAME; - ULONG64 Flags; - } MINIDUMP_HEADER, *PMINIDUMP_HEADER; - - typedef struct _MINIDUMP_MEMORY_DESCRIPTOR { - ULONG64 StartOfMemoryRange; - MINIDUMP_LOCATION_DESCRIPTOR Memory; - } MINIDUMP_MEMORY_DESCRIPTOR, *PMINIDUMP_MEMORY_DESCRIPTOR; - - typedef struct _MINIDUMP_MEMORY_LIST { - ULONG NumberOfMemoryRanges; - MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges[1]; /* FIXME: 0-sized array not supported */ - } MINIDUMP_MEMORY_LIST, *PMINIDUMP_MEMORY_LIST; - -#define MINIDUMP_MISC1_PROCESS_ID 0x00000001 -#define MINIDUMP_MISC1_PROCESS_TIMES 0x00000002 - - typedef struct _MINIDUMP_MISC_INFO { - ULONG SizeOfInfo; - ULONG Flags1; - ULONG ProcessId; - ULONG ProcessCreateTime; - ULONG ProcessUserTime; - ULONG ProcessKernelTime; - } MINIDUMP_MISC_INFO, *PMINIDUMP_MISC_INFO; - - typedef struct _MINIDUMP_MODULE { - ULONG64 BaseOfImage; - ULONG SizeOfImage; - ULONG CheckSum; - ULONG TimeDateStamp; - RVA ModuleNameRva; - VS_FIXEDFILEINFO VersionInfo; - MINIDUMP_LOCATION_DESCRIPTOR CvRecord; - MINIDUMP_LOCATION_DESCRIPTOR MiscRecord; - ULONG64 Reserved0; - ULONG64 Reserved1; - } MINIDUMP_MODULE, *PMINIDUMP_MODULE; - - typedef struct _MINIDUMP_MODULE_LIST { - ULONG NumberOfModules; - MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */ - } MINIDUMP_MODULE_LIST, *PMINIDUMP_MODULE_LIST; - - typedef struct _MINIDUMP_STRING { - ULONG Length; - WCHAR Buffer[1]; /* FIXME: O-sized array not supported */ - } MINIDUMP_STRING, *PMINIDUMP_STRING; - - typedef struct _MINIDUMP_SYSTEM_INFO { - USHORT ProcessorArchitecture; - USHORT ProcessorLevel; - USHORT ProcessorRevision; - union { - USHORT Reserved0; - struct { - UCHAR NumberOfProcessors; - UCHAR ProductType; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME; - - ULONG MajorVersion; - ULONG MinorVersion; - ULONG BuildNumber; - ULONG PlatformId; - - RVA CSDVersionRva; - union { - ULONG Reserved1; - struct { - USHORT SuiteMask; - USHORT Reserved2; - } DUMMYSTRUCTNAME; - } DUMMYUNIONNAME1; - union _CPU_INFORMATION { - struct { - ULONG VendorId[3]; - ULONG VersionInformation; - ULONG FeatureInformation; - ULONG AMDExtendedCpuFeatures; - } X86CpuInfo; - struct { - ULONG64 ProcessorFeatures[2]; - } OtherCpuInfo; - } Cpu; - - } MINIDUMP_SYSTEM_INFO, *PMINIDUMP_SYSTEM_INFO; - - typedef struct _MINIDUMP_THREAD { - ULONG ThreadId; - ULONG SuspendCount; - ULONG PriorityClass; - ULONG Priority; - ULONG64 Teb; - MINIDUMP_MEMORY_DESCRIPTOR Stack; - MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; - } MINIDUMP_THREAD, *PMINIDUMP_THREAD; - - typedef struct _MINIDUMP_THREAD_LIST { - ULONG NumberOfThreads; - MINIDUMP_THREAD Threads[1]; /* FIXME: no support of 0 sized array */ - } MINIDUMP_THREAD_LIST, *PMINIDUMP_THREAD_LIST; - - typedef struct _MINIDUMP_USER_STREAM { - ULONG Type; - ULONG BufferSize; - void *Buffer; - } MINIDUMP_USER_STREAM, *PMINIDUMP_USER_STREAM; - - typedef struct _MINIDUMP_USER_STREAM_INFORMATION { - ULONG UserStreamCount; - PMINIDUMP_USER_STREAM UserStreamArray; - } MINIDUMP_USER_STREAM_INFORMATION, *PMINIDUMP_USER_STREAM_INFORMATION; - - typedef enum _MINIDUMP_STREAM_TYPE { - UnusedStream = 0, - ReservedStream0 = 1, - ReservedStream1 = 2, - ThreadListStream = 3, - ModuleListStream = 4, - MemoryListStream = 5, - ExceptionStream = 6, - SystemInfoStream = 7, - ThreadExListStream = 8, - Memory64ListStream = 9, - CommentStreamA = 10, - CommentStreamW = 11, - HandleDataStream = 12, - FunctionTableStream = 13, - UnloadedModuleListStream = 14, - MiscInfoStream = 15, - MemoryInfoListStream = 16, - ThreadInfoListStream = 17, - - LastReservedStream = 0xffff - } MINIDUMP_STREAM_TYPE; - - BOOL WINAPI MiniDumpWriteDump(HANDLE, DWORD, HANDLE, MINIDUMP_TYPE, - const PMINIDUMP_EXCEPTION_INFORMATION, - const PMINIDUMP_USER_STREAM_INFORMATION, - const PMINIDUMP_CALLBACK_INFORMATION); - BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY *, - PVOID *, ULONG *); - -#include - -/************************* - * MODULE handling * - *************************/ - -/* flags for SymLoadModuleEx */ -#define SLMFLAG_VIRTUAL 0x1 -#define SLMFLAG_NO_SYMBOLS 0x4 - - typedef BOOL(CALLBACK * PENUMLOADED_MODULES_CALLBACK) (PSTR, ULONG, - ULONG, PVOID); - BOOL WINAPI EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, - PVOID); - typedef BOOL(CALLBACK * PENUMLOADED_MODULES_CALLBACK64) (PCSTR, DWORD64, - ULONG, PVOID); - BOOL WINAPI EnumerateLoadedModules64(HANDLE, - PENUMLOADED_MODULES_CALLBACK64, - PVOID); - typedef BOOL(CALLBACK * PENUMLOADED_MODULES_CALLBACKW64) (PCWSTR, - DWORD64, ULONG, - PVOID); - BOOL WINAPI EnumerateLoadedModulesW64(HANDLE, - PENUMLOADED_MODULES_CALLBACKW64, - PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMMODULES_CALLBACK) (PCSTR, ULONG, PVOID); - BOOL WINAPI SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, - PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMMODULES_CALLBACK64) (PCSTR, DWORD64, - PVOID); - BOOL WINAPI SymEnumerateModules64(HANDLE, PSYM_ENUMMODULES_CALLBACK64, - PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMMODULES_CALLBACKW64) (PCWSTR, DWORD64, - PVOID); - BOOL WINAPI SymEnumerateModulesW64(HANDLE, PSYM_ENUMMODULES_CALLBACKW64, - PVOID); - BOOL WINAPI SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE); - BOOL WINAPI SymGetModuleInfoW(HANDLE, DWORD, PIMAGEHLP_MODULEW); - BOOL WINAPI SymGetModuleInfo64(HANDLE, DWORD64, PIMAGEHLP_MODULE64); - BOOL WINAPI SymGetModuleInfoW64(HANDLE, DWORD64, PIMAGEHLP_MODULEW64); - DWORD WINAPI SymGetModuleBase(HANDLE, DWORD); - DWORD64 WINAPI SymGetModuleBase64(HANDLE, DWORD64); - DWORD WINAPI SymLoadModule(HANDLE, HANDLE, PCSTR, PCSTR, DWORD, DWORD); - DWORD64 WINAPI SymLoadModule64(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, - DWORD); - DWORD64 WINAPI SymLoadModuleEx(HANDLE, HANDLE, PCSTR, PCSTR, DWORD64, - DWORD, PMODLOAD_DATA, DWORD); - DWORD64 WINAPI SymLoadModuleExW(HANDLE, HANDLE, PCWSTR, PCWSTR, DWORD64, - DWORD, PMODLOAD_DATA, DWORD); - BOOL WINAPI SymUnloadModule(HANDLE, DWORD); - BOOL WINAPI SymUnloadModule64(HANDLE, DWORD64); - -/************************* - * Symbol Handling * - *************************/ - -#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1 -#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER /* 0x08 */ -#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL /* 0x10 */ -#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL /* 0x20 */ -#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER /* 0x40 */ -#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL /* 0x80 */ -#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT /* 0x100 */ -#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION /* 0x800 */ - -#define SYMFLAG_VALUEPRESENT 0x00000001 -#define SYMFLAG_REGISTER 0x00000008 -#define SYMFLAG_REGREL 0x00000010 -#define SYMFLAG_FRAMEREL 0x00000020 -#define SYMFLAG_PARAMETER 0x00000040 -#define SYMFLAG_LOCAL 0x00000080 -#define SYMFLAG_CONSTANT 0x00000100 -#define SYMFLAG_EXPORT 0x00000200 -#define SYMFLAG_FORWARDER 0x00000400 -#define SYMFLAG_FUNCTION 0x00000800 -#define SYMFLAG_VIRTUAL 0x00001000 -#define SYMFLAG_THUNK 0x00002000 -#define SYMFLAG_TLSREL 0x00004000 -#define SYMFLAG_SLOT 0x00008000 - -#define MAX_SYM_NAME 2000 - - typedef struct _SYMBOL_INFO { - ULONG SizeOfStruct; - ULONG TypeIndex; - ULONG64 Reserved[2]; - ULONG info; /* sdk states info, while MSDN says it's Index... */ - ULONG Size; - ULONG64 ModBase; - ULONG Flags; - ULONG64 Value; - ULONG64 Address; - ULONG Register; - ULONG Scope; - ULONG Tag; - ULONG NameLen; - ULONG MaxNameLen; - CHAR Name[1]; - } SYMBOL_INFO, *PSYMBOL_INFO; - - typedef struct _SYMBOL_INFOW { - ULONG SizeOfStruct; - ULONG TypeIndex; - ULONG64 Reserved[2]; - ULONG Index; - ULONG Size; - ULONG64 ModBase; - ULONG Flags; - ULONG64 Value; - ULONG64 Address; - ULONG Register; - ULONG Scope; - ULONG Tag; - ULONG NameLen; - ULONG MaxNameLen; - WCHAR Name[1]; - } SYMBOL_INFOW, *PSYMBOL_INFOW; - - typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { - TI_GET_SYMTAG, - TI_GET_SYMNAME, - TI_GET_LENGTH, - TI_GET_TYPE, - TI_GET_TYPEID, - TI_GET_BASETYPE, - TI_GET_ARRAYINDEXTYPEID, - TI_FINDCHILDREN, - TI_GET_DATAKIND, - TI_GET_ADDRESSOFFSET, - TI_GET_OFFSET, - TI_GET_VALUE, - TI_GET_COUNT, - TI_GET_CHILDRENCOUNT, - TI_GET_BITPOSITION, - TI_GET_VIRTUALBASECLASS, - TI_GET_VIRTUALTABLESHAPEID, - TI_GET_VIRTUALBASEPOINTEROFFSET, - TI_GET_CLASSPARENTID, - TI_GET_NESTED, - TI_GET_SYMINDEX, - TI_GET_LEXICALPARENT, - TI_GET_ADDRESS, - TI_GET_THISADJUST, - TI_GET_UDTKIND, - TI_IS_EQUIV_TO, - TI_GET_CALLING_CONVENTION, - } IMAGEHLP_SYMBOL_TYPE_INFO; - -#define IMAGEHLP_GET_TYPE_INFO_UNCACHED 0x00000001 -#define IMAGEHLP_GET_TYPE_INFO_CHILDREN 0x00000002 - typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS { - ULONG SizeOfStruct; - ULONG Flags; - ULONG NumIds; - PULONG TypeIds; - ULONG64 TagFilter; - ULONG NumReqs; - IMAGEHLP_SYMBOL_TYPE_INFO *ReqKinds; - PULONG_PTR ReqOffsets; - PULONG ReqSizes; - ULONG_PTR ReqStride; - ULONG_PTR BufferSize; - PVOID Buffer; - ULONG EntriesMatched; - ULONG EntriesFilled; - ULONG64 TagsFound; - ULONG64 AllReqsValid; - ULONG NumReqsValid; - PULONG64 ReqsValid; - } IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS; - - typedef struct _TI_FINDCHILDREN_PARAMS { - ULONG Count; - ULONG Start; - ULONG ChildId[1]; - } TI_FINDCHILDREN_PARAMS; - -#define UNDNAME_COMPLETE (0x0000) -#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) -#define UNDNAME_NO_MS_KEYWORDS (0x0002) -#define UNDNAME_NO_FUNCTION_RETURNS (0x0004) -#define UNDNAME_NO_ALLOCATION_MODEL (0x0008) -#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010) -#define UNDNAME_NO_MS_THISTYPE (0x0020) -#define UNDNAME_NO_CV_THISTYPE (0x0040) -#define UNDNAME_NO_THISTYPE (0x0060) -#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080) -#define UNDNAME_NO_THROW_SIGNATURES (0x0100) -#define UNDNAME_NO_MEMBER_TYPE (0x0200) -#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400) -#define UNDNAME_32_BIT_DECODE (0x0800) -#define UNDNAME_NAME_ONLY (0x1000) -#define UNDNAME_NO_ARGUMENTS (0x2000) -#define UNDNAME_NO_SPECIAL_SYMS (0x4000) - -#define SYMSEARCH_MASKOBJS 0x01 -#define SYMSEARCH_RECURSE 0x02 -#define SYMSEARCH_GLOBALSONLY 0x04 - - BOOL WINAPI SymGetTypeInfo(HANDLE, DWORD64, ULONG, - IMAGEHLP_SYMBOL_TYPE_INFO, PVOID); - BOOL WINAPI SymGetTypeInfoEx(HANDLE, DWORD64, - PIMAGEHLP_GET_TYPE_INFO_PARAMS); - typedef BOOL(CALLBACK * PSYM_ENUMERATESYMBOLS_CALLBACK) (PSYMBOL_INFO, - ULONG, PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMERATESYMBOLS_CALLBACKW) (PSYMBOL_INFOW, - ULONG, PVOID); - BOOL WINAPI SymEnumTypes(HANDLE, ULONG64, PSYM_ENUMERATESYMBOLS_CALLBACK, - PVOID); - BOOL WINAPI SymEnumTypesW(HANDLE, ULONG64, - PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID); - BOOL WINAPI SymFromAddr(HANDLE, DWORD64, DWORD64 *, SYMBOL_INFO *); - BOOL WINAPI SymFromAddrW(HANDLE, DWORD64, DWORD64 *, SYMBOL_INFOW *); - BOOL WINAPI SymFromToken(HANDLE, DWORD64, DWORD, PSYMBOL_INFO); - BOOL WINAPI SymFromTokenW(HANDLE, DWORD64, DWORD, PSYMBOL_INFOW); - BOOL WINAPI SymFromName(HANDLE, PCSTR, PSYMBOL_INFO); - BOOL WINAPI SymFromNameW(HANDLE, PCWSTR, PSYMBOL_INFOW); - BOOL WINAPI SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL); - BOOL WINAPI SymGetSymFromAddr64(HANDLE, DWORD64, PDWORD64, - PIMAGEHLP_SYMBOL64); - BOOL WINAPI SymGetSymFromName(HANDLE, PCSTR, PIMAGEHLP_SYMBOL); - BOOL WINAPI SymGetSymFromName64(HANDLE, PCSTR, PIMAGEHLP_SYMBOL64); - BOOL WINAPI SymGetTypeFromName(HANDLE, ULONG64, PCSTR, PSYMBOL_INFO); - BOOL WINAPI SymGetTypeFromNameW(HANDLE, ULONG64, PCWSTR, PSYMBOL_INFOW); - BOOL WINAPI SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL); - BOOL WINAPI SymGetSymNext64(HANDLE, PIMAGEHLP_SYMBOL64); - BOOL WINAPI SymGetSymNextW64(HANDLE, PIMAGEHLP_SYMBOLW64); - BOOL WINAPI SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL); - BOOL WINAPI SymGetSymPrev64(HANDLE, PIMAGEHLP_SYMBOL64); - BOOL WINAPI SymGetSymPrevW64(HANDLE, PIMAGEHLP_SYMBOLW64); - BOOL WINAPI SymEnumSymbols(HANDLE, ULONG64, PCSTR, - PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID); - BOOL WINAPI SymEnumSymbolsW(HANDLE, ULONG64, PCWSTR, - PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMSYMBOLS_CALLBACK) (PCSTR, DWORD, ULONG, - PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMSYMBOLS_CALLBACKW) (PCWSTR, DWORD, - ULONG, PVOID); - BOOL WINAPI SymEnumerateSymbols(HANDLE, ULONG, PSYM_ENUMSYMBOLS_CALLBACK, - PVOID); - BOOL WINAPI SymEnumerateSymbolsW(HANDLE, ULONG, - PSYM_ENUMSYMBOLS_CALLBACKW, PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMSYMBOLS_CALLBACK64) (PCSTR, DWORD64, - ULONG, PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMSYMBOLS_CALLBACK64W) (PCWSTR, DWORD64, - ULONG, PVOID); - BOOL WINAPI SymEnumerateSymbols64(HANDLE, ULONG64, - PSYM_ENUMSYMBOLS_CALLBACK64, PVOID); - BOOL WINAPI SymEnumerateSymbolsW64(HANDLE, ULONG64, - PSYM_ENUMSYMBOLS_CALLBACK64W, PVOID); - BOOL WINAPI SymEnumSymbolsForAddr(HANDLE, DWORD64, - PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID); - BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE, DWORD64, - PSYM_ENUMERATESYMBOLS_CALLBACKW, - PVOID); - typedef BOOL(CALLBACK * PSYMBOL_REGISTERED_CALLBACK) (HANDLE, ULONG, - PVOID, PVOID); - BOOL WINAPI SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, - PVOID); - typedef BOOL(CALLBACK * PSYMBOL_REGISTERED_CALLBACK64) (HANDLE, ULONG, - ULONG64, - ULONG64); - BOOL WINAPI SymRegisterCallback64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, - ULONG64); - BOOL WINAPI SymRegisterCallbackW64(HANDLE, PSYMBOL_REGISTERED_CALLBACK64, - ULONG64); - BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL, PSTR, DWORD); - BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64, PSTR, DWORD); - BOOL WINAPI SymMatchString(PCSTR, PCSTR, BOOL); - BOOL WINAPI SymMatchStringA(PCSTR, PCSTR, BOOL); - BOOL WINAPI SymMatchStringW(PCWSTR, PCWSTR, BOOL); - BOOL WINAPI SymSearch(HANDLE, ULONG64, DWORD, DWORD, PCSTR, DWORD64, - PSYM_ENUMERATESYMBOLS_CALLBACK, PVOID, DWORD); - BOOL WINAPI SymSearchW(HANDLE, ULONG64, DWORD, DWORD, PCWSTR, DWORD64, - PSYM_ENUMERATESYMBOLS_CALLBACKW, PVOID, DWORD); - DWORD WINAPI UnDecorateSymbolName(PCSTR, PSTR, DWORD, DWORD); - DWORD WINAPI UnDecorateSymbolNameW(PCWSTR, PWSTR, DWORD, DWORD); - BOOL WINAPI SymGetScope(HANDLE, ULONG64, DWORD, PSYMBOL_INFO); - BOOL WINAPI SymGetScopeW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW); - BOOL WINAPI SymFromIndex(HANDLE, ULONG64, DWORD, PSYMBOL_INFO); - BOOL WINAPI SymFromIndexW(HANDLE, ULONG64, DWORD, PSYMBOL_INFOW); - BOOL WINAPI SymAddSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD, DWORD); - BOOL WINAPI SymAddSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD, - DWORD); - BOOL WINAPI SymDeleteSymbol(HANDLE, ULONG64, PCSTR, DWORD64, DWORD); - BOOL WINAPI SymDeleteSymbolW(HANDLE, ULONG64, PCWSTR, DWORD64, DWORD); - -/************************* - * Source Files * - *************************/ - typedef BOOL(CALLBACK * PSYM_ENUMSOURCEFILES_CALLBACK) (PSOURCEFILE, - PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMSOURCEFILES_CALLBACKW) (PSOURCEFILEW, - PVOID); - - BOOL WINAPI SymEnumSourceFiles(HANDLE, ULONG64, PCSTR, - PSYM_ENUMSOURCEFILES_CALLBACK, PVOID); - BOOL WINAPI SymEnumSourceFilesW(HANDLE, ULONG64, PCWSTR, - PSYM_ENUMSOURCEFILES_CALLBACKW, PVOID); - BOOL WINAPI SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE); - BOOL WINAPI SymGetLineFromAddrW(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINEW); - BOOL WINAPI SymGetLineFromAddr64(HANDLE, DWORD64, PDWORD, - PIMAGEHLP_LINE64); - BOOL WINAPI SymGetLineFromAddrW64(HANDLE, DWORD64, PDWORD, - PIMAGEHLP_LINEW64); - BOOL WINAPI SymGetLinePrev(HANDLE, PIMAGEHLP_LINE); - BOOL WINAPI SymGetLinePrevW(HANDLE, PIMAGEHLP_LINEW); - BOOL WINAPI SymGetLinePrev64(HANDLE, PIMAGEHLP_LINE64); - BOOL WINAPI SymGetLinePrevW64(HANDLE, PIMAGEHLP_LINEW64); - BOOL WINAPI SymGetLineNext(HANDLE, PIMAGEHLP_LINE); - BOOL WINAPI SymGetLineNextW(HANDLE, PIMAGEHLP_LINEW); - BOOL WINAPI SymGetLineNext64(HANDLE, PIMAGEHLP_LINE64); - BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64); - BOOL WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, - PIMAGEHLP_LINE); - BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, - PIMAGEHLP_LINE64); - BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, - PIMAGEHLP_LINEW64); - ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, - ULONG); - BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD); - BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, - DWORD); - BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID *, - DWORD *); - BOOL WINAPI SymGetSourceFileTokenW(HANDLE, ULONG64, PCWSTR, PVOID *, - DWORD *); - BOOL WINAPI SymGetSourceFileFromToken(HANDLE, PVOID, PCSTR, PSTR, DWORD); - BOOL WINAPI SymGetSourceFileFromTokenW(HANDLE, PVOID, PCWSTR, PWSTR, - DWORD); - BOOL WINAPI SymGetSourceVarFromToken(HANDLE, PVOID, PCSTR, PCSTR, PSTR, - DWORD); - BOOL WINAPI SymGetSourceVarFromTokenW(HANDLE, PVOID, PCWSTR, PCWSTR, - PWSTR, DWORD); - - typedef struct _SRCCODEINFO { - DWORD SizeOfStruct; - PVOID Key; - DWORD64 ModBase; - CHAR Obj[MAX_PATH + 1]; - CHAR FileName[MAX_PATH + 1]; - DWORD LineNumber; - DWORD64 Address; - } SRCCODEINFO, *PSRCCODEINFO; - - typedef struct _SRCCODEINFOW { - DWORD SizeOfStruct; - PVOID Key; - DWORD64 ModBase; - WCHAR Obj[MAX_PATH + 1]; - WCHAR FileName[MAX_PATH + 1]; - DWORD LineNumber; - DWORD64 Address; - } SRCCODEINFOW, *PSRCCODEINFOW; - - typedef BOOL(CALLBACK * PSYM_ENUMLINES_CALLBACK) (PSRCCODEINFO, PVOID); - typedef BOOL(CALLBACK * PSYM_ENUMLINES_CALLBACKW) (PSRCCODEINFOW, PVOID); - BOOL WINAPI SymEnumLines(HANDLE, ULONG64, PCSTR, PCSTR, - PSYM_ENUMLINES_CALLBACK, PVOID); - BOOL WINAPI SymEnumLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, - PSYM_ENUMLINES_CALLBACKW, PVOID); - BOOL WINAPI SymEnumSourceLines(HANDLE, ULONG64, PCSTR, PCSTR, DWORD, - DWORD, PSYM_ENUMLINES_CALLBACK, PVOID); - BOOL WINAPI SymEnumSourceLinesW(HANDLE, ULONG64, PCWSTR, PCWSTR, DWORD, - DWORD, PSYM_ENUMLINES_CALLBACKW, PVOID); - -/************************* - * File & image handling * - *************************/ - BOOL WINAPI SymInitialize(HANDLE, PCSTR, BOOL); - BOOL WINAPI SymInitializeW(HANDLE, PCWSTR, BOOL); - BOOL WINAPI SymCleanup(HANDLE); - - HANDLE WINAPI FindDebugInfoFile(PCSTR, PCSTR, PSTR); - typedef BOOL(CALLBACK * PFIND_DEBUG_FILE_CALLBACK) (HANDLE, PCSTR, - PVOID); - typedef BOOL(CALLBACK * PFIND_DEBUG_FILE_CALLBACKW) (HANDLE, PCWSTR, - PVOID); - HANDLE WINAPI FindDebugInfoFileEx(PCSTR, PCSTR, PSTR, - PFIND_DEBUG_FILE_CALLBACK, PVOID); - HANDLE WINAPI FindDebugInfoFileExW(PCWSTR, PCWSTR, PWSTR, - PFIND_DEBUG_FILE_CALLBACKW, PVOID); - HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, - PFIND_DEBUG_FILE_CALLBACK, PVOID); - HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, - PFIND_DEBUG_FILE_CALLBACKW, PVOID); - typedef BOOL(CALLBACK * PFINDFILEINPATHCALLBACK) (PCSTR, PVOID); - typedef BOOL(CALLBACK * PFINDFILEINPATHCALLBACKW) (PCWSTR, PVOID); - BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, - DWORD, PSTR, PFINDFILEINPATHCALLBACK, PVOID); - BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, - DWORD, PSTR, PFINDFILEINPATHCALLBACK, - PVOID); - BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, - DWORD, DWORD, PWSTR, - PFINDFILEINPATHCALLBACKW, PVOID); - HANDLE WINAPI FindExecutableImage(PCSTR, PCSTR, PSTR); - typedef BOOL(CALLBACK * PFIND_EXE_FILE_CALLBACK) (HANDLE, PCSTR, PVOID); - typedef BOOL(CALLBACK * PFIND_EXE_FILE_CALLBACKW) (HANDLE, PCWSTR, - PVOID); - HANDLE WINAPI FindExecutableImageEx(PCSTR, PCSTR, PSTR, - PFIND_EXE_FILE_CALLBACK, PVOID); - HANDLE WINAPI FindExecutableImageExW(PCWSTR, PCWSTR, PWSTR, - PFIND_EXE_FILE_CALLBACKW, PVOID); - HANDLE WINAPI SymFindExecutableImage(HANDLE, PCSTR, PSTR, - PFIND_EXE_FILE_CALLBACK, PVOID); - HANDLE WINAPI SymFindExecutableImageW(HANDLE, PCWSTR, PWSTR, - PFIND_EXE_FILE_CALLBACKW, PVOID); - PIMAGE_NT_HEADERS WINAPI ImageNtHeader(PVOID); - PVOID WINAPI ImageDirectoryEntryToDataEx(PVOID, BOOLEAN, USHORT, PULONG, - PIMAGE_SECTION_HEADER *); - PVOID WINAPI ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG); - PIMAGE_SECTION_HEADER WINAPI ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, - ULONG); - PVOID WINAPI ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, - PIMAGE_SECTION_HEADER *); - BOOL WINAPI SymGetSearchPath(HANDLE, PSTR, DWORD); - BOOL WINAPI SymGetSearchPathW(HANDLE, PWSTR, DWORD); - BOOL WINAPI SymSetSearchPath(HANDLE, PCSTR); - BOOL WINAPI SymSetSearchPathW(HANDLE, PCWSTR); - DWORD WINAPI GetTimestampForLoadedLibrary(HMODULE); - BOOL WINAPI MakeSureDirectoryPathExists(PCSTR); - BOOL WINAPI SearchTreeForFile(PCSTR, PCSTR, PSTR); - BOOL WINAPI SearchTreeForFileW(PCWSTR, PCWSTR, PWSTR); - typedef BOOL(CALLBACK * PENUMDIRTREE_CALLBACK) (PCSTR, PVOID); - typedef BOOL(CALLBACK * PENUMDIRTREE_CALLBACKW) (PCWSTR, PVOID); - BOOL WINAPI EnumDirTree(HANDLE, PCSTR, PCSTR, PSTR, - PENUMDIRTREE_CALLBACK, PVOID); - BOOL WINAPI EnumDirTreeW(HANDLE, PCWSTR, PCWSTR, PWSTR, - PENUMDIRTREE_CALLBACKW, PVOID); - BOOL WINAPI SymMatchFileName(PCSTR, PCSTR, PSTR *, PSTR *); - BOOL WINAPI SymMatchFileNameW(PCWSTR, PCWSTR, PWSTR *, PWSTR *); - PCHAR WINAPI SymSetHomeDirectory(HANDLE, PCSTR); - PWSTR WINAPI SymSetHomeDirectoryW(HANDLE, PCWSTR); - PCHAR WINAPI SymGetHomeDirectory(DWORD, PSTR, size_t); - PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t); -#define hdBase 0 -#define hdSym 1 -#define hdSrc 2 -#define hdMax 3 - -/************************* - * Context management * - *************************/ - BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, - PIMAGEHLP_CONTEXT); - - -/************************* - * Stack management * - *************************/ - - typedef struct _KDHELP { - DWORD Thread; - DWORD ThCallbackStack; - DWORD NextCallback; - DWORD FramePointer; - DWORD KiCallUserMode; - DWORD KeUserCallbackDispatcher; - DWORD SystemRangeStart; - } KDHELP, *PKDHELP; - - typedef struct _KDHELP64 { - DWORD64 Thread; - DWORD ThCallbackStack; - DWORD ThCallbackBStore; - DWORD NextCallback; - DWORD FramePointer; - DWORD64 KiCallUserMode; - DWORD64 KeUserCallbackDispatcher; - DWORD64 SystemRangeStart; - DWORD64 Reserved[8]; - } KDHELP64, *PKDHELP64; - - typedef struct _STACKFRAME { - ADDRESS AddrPC; - ADDRESS AddrReturn; - ADDRESS AddrFrame; - ADDRESS AddrStack; - PVOID FuncTableEntry; - DWORD Params[4]; - BOOL Far; - BOOL Virtual; - DWORD Reserved[3]; - KDHELP KdHelp; - ADDRESS AddrBStore; - } STACKFRAME, *LPSTACKFRAME; - - typedef struct _STACKFRAME64 { - ADDRESS64 AddrPC; - ADDRESS64 AddrReturn; - ADDRESS64 AddrFrame; - ADDRESS64 AddrStack; - ADDRESS64 AddrBStore; - PVOID FuncTableEntry; - DWORD64 Params[4]; - BOOL Far; - BOOL Virtual; - DWORD64 Reserved[3]; - KDHELP64 KdHelp; - } STACKFRAME64, *LPSTACKFRAME64; - - typedef BOOL(CALLBACK * PREAD_PROCESS_MEMORY_ROUTINE) - (HANDLE, DWORD, PVOID, DWORD, PDWORD); - typedef PVOID(CALLBACK * PFUNCTION_TABLE_ACCESS_ROUTINE) (HANDLE, DWORD); - typedef DWORD(CALLBACK * PGET_MODULE_BASE_ROUTINE) (HANDLE, DWORD); - typedef DWORD(CALLBACK * PTRANSLATE_ADDRESS_ROUTINE) (HANDLE, HANDLE, - LPADDRESS); - BOOL WINAPI StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, PVOID, - PREAD_PROCESS_MEMORY_ROUTINE, - PFUNCTION_TABLE_ACCESS_ROUTINE, - PGET_MODULE_BASE_ROUTINE, - PTRANSLATE_ADDRESS_ROUTINE); - - typedef BOOL(CALLBACK * PREAD_PROCESS_MEMORY_ROUTINE64) - (HANDLE, DWORD64, PVOID, DWORD, PDWORD); - typedef PVOID(CALLBACK * PFUNCTION_TABLE_ACCESS_ROUTINE64) (HANDLE, - DWORD64); - typedef DWORD64(CALLBACK * PGET_MODULE_BASE_ROUTINE64) (HANDLE, DWORD64); - typedef DWORD64(CALLBACK * PTRANSLATE_ADDRESS_ROUTINE64) (HANDLE, HANDLE, - LPADDRESS64); - BOOL WINAPI StackWalk64(DWORD, HANDLE, HANDLE, LPSTACKFRAME64, PVOID, - PREAD_PROCESS_MEMORY_ROUTINE64, - PFUNCTION_TABLE_ACCESS_ROUTINE64, - PGET_MODULE_BASE_ROUTINE64, - PTRANSLATE_ADDRESS_ROUTINE64); - - PVOID WINAPI SymFunctionTableAccess(HANDLE, DWORD); - PVOID WINAPI SymFunctionTableAccess64(HANDLE, DWORD64); - - typedef PVOID(CALLBACK * PSYMBOL_FUNCENTRY_CALLBACK) (HANDLE, DWORD, - PVOID); - typedef PVOID(CALLBACK * PSYMBOL_FUNCENTRY_CALLBACK64) (HANDLE, ULONG64, - ULONG64); - - BOOL WINAPI SymRegisterFunctionEntryCallback(HANDLE, - PSYMBOL_FUNCENTRY_CALLBACK, - PVOID); - BOOL WINAPI SymRegisterFunctionEntryCallback64(HANDLE, - PSYMBOL_FUNCENTRY_CALLBACK64, - ULONG64); - -/************************* - * Version, global stuff * - *************************/ - -#define API_VERSION_NUMBER 9 - - typedef struct API_VERSION { - USHORT MajorVersion; - USHORT MinorVersion; - USHORT Revision; - USHORT Reserved; - } API_VERSION, *LPAPI_VERSION; - - LPAPI_VERSION WINAPI ImagehlpApiVersion(void); - LPAPI_VERSION WINAPI ImagehlpApiVersionEx(LPAPI_VERSION); - - typedef struct _IMAGE_DEBUG_INFORMATION { - LIST_ENTRY List; - DWORD ReservedSize; - PVOID ReservedMappedBase; - USHORT ReservedMachine; - USHORT ReservedCharacteristics; - DWORD ReservedCheckSum; - DWORD ImageBase; - DWORD SizeOfImage; - DWORD ReservedNumberOfSections; - PIMAGE_SECTION_HEADER ReservedSections; - DWORD ReservedExportedNamesSize; - PSTR ReservedExportedNames; - DWORD ReservedNumberOfFunctionTableEntries; - PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries; - DWORD ReservedLowestFunctionStartingAddress; - DWORD ReservedHighestFunctionEndingAddress; - DWORD ReservedNumberOfFpoTableEntries; - PFPO_DATA ReservedFpoTableEntries; - DWORD SizeOfCoffSymbols; - PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; - DWORD ReservedSizeOfCodeViewSymbols; - PVOID ReservedCodeViewSymbols; - PSTR ImageFilePath; - PSTR ImageFileName; - PSTR ReservedDebugFilePath; - DWORD ReservedTimeDateStamp; - BOOL ReservedRomImage; - PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory; - DWORD ReservedNumberOfDebugDirectories; - DWORD ReservedOriginalFunctionTableBaseAddress; - DWORD Reserved[2]; - } IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION; - - - PIMAGE_DEBUG_INFORMATION WINAPI MapDebugInformation(HANDLE, PCSTR, PCSTR, - ULONG); - - BOOL WINAPI UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION); - - DWORD WINAPI SymGetOptions(void); - DWORD WINAPI SymSetOptions(DWORD); - - BOOL WINAPI SymSetParentWindow(HWND); - -/************************* - * Version, global stuff * - *************************/ - - typedef BOOL(WINAPI * PSYMBOLSERVERPROC) (PCSTR, PCSTR, PVOID, DWORD, - DWORD, PSTR); - typedef BOOL(WINAPI * PSYMBOLSERVERPROCA) (PCSTR, PCSTR, PVOID, DWORD, - DWORD, PSTR); - typedef BOOL(WINAPI * PSYMBOLSERVERPROCW) (PCWSTR, PCWSTR, PVOID, DWORD, - DWORD, PWSTR); - typedef BOOL(WINAPI * PSYMBOLSERVEROPENPROC) (void); - typedef BOOL(WINAPI * PSYMBOLSERVERCLOSEPROC) (void); - typedef BOOL(WINAPI * PSYMBOLSERVERSETOPTIONSPROC) (UINT_PTR, ULONG64); - typedef BOOL(CALLBACK * PSYMBOLSERVERCALLBACKPROC) (UINT_PTR, ULONG64, - ULONG64); - typedef UINT_PTR(WINAPI * PSYMBOLSERVERGETOPTIONSPROC) (void); - typedef BOOL(WINAPI * PSYMBOLSERVERPINGPROC) (PCSTR); - typedef BOOL(WINAPI * PSYMBOLSERVERPINGPROCA) (PCSTR); - typedef BOOL(WINAPI * PSYMBOLSERVERPINGPROCW) (PCWSTR); - -#define SSRVOPT_CALLBACK 0x0001 -#define SSRVOPT_DWORD 0x0002 -#define SSRVOPT_DWORDPTR 0x0004 -#define SSRVOPT_GUIDPTR 0x0008 -#define SSRVOPT_OLDGUIDPTR 0x0010 -#define SSRVOPT_UNATTENDED 0x0020 -#define SSRVOPT_NOCOPY 0x0040 -#define SSRVOPT_PARENTWIN 0x0080 -#define SSRVOPT_PARAMTYPE 0x0100 -#define SSRVOPT_SECURE 0x0200 -#define SSRVOPT_TRACE 0x0400 -#define SSRVOPT_SETCONTEXT 0x0800 -#define SSRVOPT_PROXY 0x1000 -#define SSRVOPT_DOWNSTREAM_STORE 0x2000 -#define SSRVOPT_RESET ((ULONG_PTR)-1) - -#define SSRVACTION_TRACE 1 -#define SSRVACTION_QUERYCANCEL 2 -#define SSRVACTION_EVENT 3 - -#ifdef __cplusplus -} /* extern "C" */ -#endif /* defined(__cplusplus) */ -#endif /* __WINE_DBGHELP_H */ diff --git a/src/xbt/backtrace_windows.c b/src/xbt/backtrace_windows.c deleted file mode 100644 index 5b6b98e229..0000000000 --- a/src/xbt/backtrace_windows.c +++ /dev/null @@ -1,348 +0,0 @@ -/* backtrace_windows - backtrace displaying on windows platform */ -/* This file is included by ex.c on need (windows x86) */ - -/* Copyright (c) 2008-2015. The SimGrid Team. - * All rights reserved. */ - -/* This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. */ - -/* - * Win32 (x86) implementation backtrace, backtrace_symbols: - * support for application self-debugging. - */ - -#if defined(_XBT_VISUALC_COMPILER) -/* native windows build */ -# include -#else -/* gcc-based cross-compiling */ -# include "xbt/wine_dbghelp.h" -#endif - - -/* SymInitialize() */ -typedef BOOL(WINAPI * fun_initialize_t) (HANDLE, PSTR, BOOL); -static fun_initialize_t fun_initialize; - -/* SymCleanup() */ -typedef BOOL(WINAPI * fun_cleanup_t) (HANDLE hProcess); -static fun_cleanup_t fun_cleanup; - -/* SymFunctionTableAccess() */ -typedef PVOID(WINAPI * fun_function_table_access_t) (HANDLE, DWORD); -static fun_function_table_access_t fun_function_table_access; - -/* SymGetLineFromAddr() */ -typedef BOOL(WINAPI * fun_get_line_from_addr_t) (HANDLE, DWORD, - PDWORD, PIMAGEHLP_LINE); -static fun_get_line_from_addr_t fun_get_line_from_addr; - -/* SymGetModuleBase() */ -typedef DWORD(WINAPI * fun_get_module_base_t) (HANDLE, DWORD); -static fun_get_module_base_t fun_get_module_base; - -/* SymGetOptions() */ -typedef DWORD(WINAPI * fun_get_options_t) (VOID); -static fun_get_options_t fun_get_options; - -/* SymSetOptions() */ -typedef DWORD(WINAPI * fun_set_options_t) (DWORD); -static fun_set_options_t fun_set_options; - -/* Pointer function to SymGetSymFromAddr() */ -typedef BOOL(WINAPI * fun_get_sym_from_addr_t) (HANDLE, DWORD, PDWORD, - OUT PIMAGEHLP_SYMBOL); -static fun_get_sym_from_addr_t fun_get_sym_from_addr; - -/* Pointer function to StackWalk() */ -typedef BOOL(WINAPI * fun_stack_walk_t) (DWORD, HANDLE, HANDLE, - LPSTACKFRAME, PVOID, - PREAD_PROCESS_MEMORY_ROUTINE, - PFUNCTION_TABLE_ACCESS_ROUTINE, - PGET_MODULE_BASE_ROUTINE, - PTRANSLATE_ADDRESS_ROUTINE); -static fun_stack_walk_t fun_stack_walk; - -static HINSTANCE hlp_dbg_instance = NULL; -static HANDLE process_handle = NULL; - - -/* Module creation/destruction: initialize our tables */ -void xbt_backtrace_preinit(void) -{ - process_handle = GetCurrentProcess(); - - if (hlp_dbg_instance) { - /* debug help is already loaded */ - return; - } - - /* load the library */ - hlp_dbg_instance = LoadLibraryA("Dbghelp.dll"); - - if (!hlp_dbg_instance) - return; - - /* get the pointers to debug help library exported functions */ - fun_initialize = - (fun_initialize_t) GetProcAddress(hlp_dbg_instance, "SymInitialize"); - fun_cleanup = - (fun_cleanup_t) GetProcAddress(hlp_dbg_instance, "SymCleanup"); - fun_function_table_access = - (fun_function_table_access_t) GetProcAddress(hlp_dbg_instance, - "SymFunctionTableAccess"); - fun_get_line_from_addr = - (fun_get_line_from_addr_t) GetProcAddress(hlp_dbg_instance, - "SymGetLineFromAddr"); - fun_get_module_base = - (fun_get_module_base_t) GetProcAddress(hlp_dbg_instance, - "SymGetModuleBase"); - fun_get_options = - (fun_get_options_t) GetProcAddress(hlp_dbg_instance, - "SymGetOptions"); - fun_get_sym_from_addr = - (fun_get_sym_from_addr_t) GetProcAddress(hlp_dbg_instance, - "SymGetSymFromAddr"); - fun_set_options = - (fun_set_options_t) GetProcAddress(hlp_dbg_instance, - "SymSetOptions"); - fun_stack_walk = - (fun_stack_walk_t) GetProcAddress(hlp_dbg_instance, "StackWalk"); - - /* Check that everything worked well */ - if (!fun_initialize || - !fun_cleanup || - !fun_function_table_access || - !fun_get_line_from_addr || - !fun_get_module_base || - !fun_get_options || - !fun_get_sym_from_addr || !fun_set_options || !fun_stack_walk) { - FreeLibrary(hlp_dbg_instance); - hlp_dbg_instance = NULL; - return; - } - - fun_set_options(fun_get_options() | - SYMOPT_LOAD_LINES | SYMOPT_DEFERRED_LOADS); - - if (!fun_initialize(process_handle, 0, 1)) { - FreeLibrary(hlp_dbg_instance); - hlp_dbg_instance = NULL; - } -} - -void xbt_backtrace_postexit(void) -{ - if (!hlp_dbg_instance) - return; - - if (fun_cleanup(process_handle)) - FreeLibrary(hlp_dbg_instance); - - hlp_dbg_instance = NULL; -} - -/* - * backtrace() function. - * - * Returns a backtrace for the calling program, in the array - * pointed to by buffer. A backtrace is the series of currently active - * function calls for the program. Each item in the array pointed to by - * buffer is of type void *, and is the return address from the corre- - * sponding stack frame. The size argument specifies the maximum number - * of addresses that can be stored in buffer. If the backtrace is larger - * than size, then the addresses corresponding to the size most recent - * function calls are returned; to obtain the complete backtrace, make - * sure that buffer and size are large enough. - */ - -int backtrace(void **buffer, int size); - -/* - * backtrace_symbols() function. - * - * Given the set of addresses returned by backtrace() in buffer, back- - * trace_symbols() translates the addresses into an array of strings containing - * the name, the source file and the line number or the las called functions. - */ -char **backtrace_symbols(void *const *buffer, int size); - -void xbt_backtrace_current(xbt_ex_t * e) -{ - e->used = backtrace((void **) e->bt, XBT_BACKTRACE_SIZE); -} - - -void xbt_ex_setup_backtrace(xbt_ex_t * e) -{ - int i; - char **backtrace_syms; - - xbt_assert(e, "Backtrace not setup yet, cannot set it up for display"); - - if (!e->used) - return; - - backtrace_syms = backtrace_symbols(e->bt, e->used); - e->bt_strings = NULL; - /* parse the output and build a new backtrace */ - e->bt_strings = xbt_new(char *, e->used); - - for (i = 0; i < e->used; i++) - e->bt_strings[i] = backtrace_syms[i]; - - free(backtrace_syms); -} - -int backtrace(void **buffer, int size) -{ - int pos = 0; - STACKFRAME *stack_frame; - int first = 1; - - IMAGEHLP_SYMBOL *pSym; - unsigned long offset = 0; - IMAGEHLP_LINE line_info = { 0 }; - byte __buffer[(sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR) + - sizeof(ULONG64) - 1) / sizeof(ULONG64)]; - - CONTEXT context = { CONTEXT_FULL }; - GetThreadContext(GetCurrentThread(), &context); - - /* ebp points on stack base */ - /* esp points on stack pointer, ie on last stacked element (current element) */ - _asm call $ + 5 - _asm pop eax - _asm mov context.Eip, eax - _asm mov eax, esp - _asm mov context.Esp, eax - _asm mov context.Ebp, ebp - if ((NULL == hlp_dbg_instance) || (size <= 0) || (NULL == buffer)) { - errno = EINVAL; - return 0; - } - - for (pos = 0; pos < size; pos++) - buffer[pos] = NULL; - - pos = 0; - - pSym = (IMAGEHLP_SYMBOL *) __buffer; - - pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL); - pSym->MaxNameLength = MAX_SYM_NAME; - - - line_info.SizeOfStruct = sizeof(IMAGEHLP_LINE); - - - while (pos < size) { - stack_frame = (void *) xbt_new0(STACKFRAME, 1); - - stack_frame->AddrPC.Offset = context.Eip; - stack_frame->AddrPC.Mode = AddrModeFlat; - - stack_frame->AddrFrame.Offset = context.Ebp; - stack_frame->AddrFrame.Mode = AddrModeFlat; - - stack_frame->AddrStack.Offset = context.Esp; - stack_frame->AddrStack.Mode = AddrModeFlat; - - if ((*fun_stack_walk) (IMAGE_FILE_MACHINE_I386, - process_handle, - GetCurrentThread(), - stack_frame, - &context, - NULL, - fun_function_table_access, - fun_get_module_base, NULL) - && !first) { - if (stack_frame->AddrReturn.Offset) { - - if ((*fun_get_sym_from_addr) - (process_handle, stack_frame->AddrPC.Offset, &offset, pSym)) { - if ((*fun_get_line_from_addr) - (process_handle, stack_frame->AddrPC.Offset, &offset, - &line_info)) - buffer[pos++] = (void *) stack_frame; - } - } else { - free(stack_frame); /* no symbol or no line info */ - break; - } - } else { - free(stack_frame); - - if (first) - first = 0; - else - break; - } - } - - return pos; -} - -char **backtrace_symbols(void *const *buffer, int size) -{ - int pos; - int success = 0; - char **strings; - STACKFRAME *stack_frame; - IMAGEHLP_SYMBOL *pSym; - unsigned long offset = 0; - IMAGEHLP_LINE line_info = { 0 }; - IMAGEHLP_MODULE module = { 0 }; - byte __buffer[(sizeof(SYMBOL_INFO) + MAX_SYM_NAME * sizeof(TCHAR) + - sizeof(ULONG64) - 1) / sizeof(ULONG64)]; - - if ((NULL == hlp_dbg_instance) || (size <= 0) || (NULL == buffer)) { - errno = EINVAL; - return NULL; - } - - strings = xbt_new0(char *, size); - - pSym = (IMAGEHLP_SYMBOL *) __buffer; - - pSym->SizeOfStruct = sizeof(IMAGEHLP_SYMBOL); - pSym->MaxNameLength = MAX_SYM_NAME; - - - line_info.SizeOfStruct = sizeof(IMAGEHLP_LINE); - module.SizeOfStruct = sizeof(IMAGEHLP_MODULE); - - for (pos = 0; pos < size; pos++) { - stack_frame = (STACKFRAME *) (buffer[pos]); - - if (NULL != stack_frame) { - - if (fun_get_sym_from_addr - (process_handle, stack_frame->AddrPC.Offset, &offset, pSym)) { - if (fun_get_line_from_addr - (process_handle, stack_frame->AddrPC.Offset, &offset, - &line_info)) { - strings[pos] = - bprintf("** In %s() at %s:%d", pSym->Name, - line_info.FileName, (int) line_info.LineNumber); - } else { - strings[pos] = bprintf("** In %s()", pSym->Name); - } - success = 1; - } else { - strings[pos] = xbt_strdup("** "); - } - - free(stack_frame); - } else - break; - } - - if (!success) { - free(strings); - strings = NULL; - } - - return strings; -} diff --git a/src/xbt/ex.c b/src/xbt/ex.c index 97a9c33ed1..7db2ce58bc 100644 --- a/src/xbt/ex.c +++ b/src/xbt/ex.c @@ -122,8 +122,6 @@ void xbt_backtrace_display_current(void) #if defined(HAVE_EXECINFO_H) && defined(HAVE_POPEN) && defined(ADDR2LINE) # include "src/xbt/backtrace_linux.c" -#elif (defined(_WIN32) && defined (_M_IX86)) && !defined(__GNUC__) -# include "src/xbt/backtrace_windows.c" #else # include "src/xbt/backtrace_dummy.c" #endif diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index abbd3b1ff6..7aac810428 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -13,7 +13,6 @@ set(EXTRA_DIST src/include/surf/datatypes.h src/include/surf/maxmin.h src/include/surf/surf.h - src/include/xbt/wine_dbghelp.h src/msg/msg_private.h src/portable.h src/simdag/dax.dtd @@ -90,7 +89,6 @@ set(EXTRA_DIST src/xbt/automaton/parserPromela.yacc src/xbt/backtrace_dummy.c src/xbt/backtrace_linux.c - src/xbt/backtrace_windows.c src/xbt/dict_private.h src/xbt/ex_interface.h src/xbt/fifo_private.h