You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.3 KiB
104 lines
3.3 KiB
/*++
|
|
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
fusiondump.h
|
|
|
|
Abstract:
|
|
|
|
Merge/refactor stuff in sxstest with dumpers.cpp
|
|
Eventually merge with debug extensions, let it be optionally
|
|
driven by symbol info available to debug extensions via .pdbs.
|
|
|
|
Author:
|
|
|
|
Jay Krell (JayKrell) November 2001
|
|
|
|
Revision History:
|
|
|
|
|
|
--*/
|
|
|
|
//
|
|
// Probably we should treat everything as a sized integer, and leave the
|
|
// indirection up to the caller. This code was not originally intended
|
|
// to be symbol driven in a debugger extension, so we'll keep the "native"
|
|
// features for now.
|
|
//
|
|
#define FUSIONP_DUMP_TYPE_ULONG 0x01
|
|
#define FUSIONP_DUMP_TYPE_ULONG_OFFSET_TO_PCWSTR 0x02
|
|
#define FUSIONP_DUMP_TYPE_LARGE_INTEGER_TIME 0x03
|
|
#define FUSIONP_DUMP_OFFSET_BASE_0 0x00
|
|
#define FUSIONP_DUMP_OFFSET_BASE_1 0x10
|
|
#define FUSIONP_DUMP_OFFSET_BASE_2 0x20
|
|
|
|
typedef struct _FUSIONP_DUMP_BUILTIN_SYMBOLS_FIELD
|
|
{
|
|
// more generally, these UCHARs should be ULONG or SIZE_T
|
|
PCSTR Name;
|
|
UCHAR NameLength;
|
|
UCHAR Type;
|
|
UCHAR Offset;
|
|
UCHAR Size;
|
|
} FUSIONP_DUMP_BUILTIN_SYMBOLS_FIELD, *PFUSIONP_DUMP_BUILTIN_SYMBOLS_FIELD;
|
|
typedef const FUSIONP_DUMP_BUILTIN_SYMBOLS_FIELD * PCFUSIONP_DUMP_BUILTIN_SYMBOLS_FIELD;
|
|
|
|
#define FUSIONP_DUMP_MAKE_FIELD(x, t) \
|
|
{ \
|
|
#x, \
|
|
static_cast<UCHAR>(sizeof(#x)-1), \
|
|
FUSIONP_DUMP_TYPE_ ## t, \
|
|
static_cast<UCHAR>(FIELD_OFFSET(FUSIONP_DUMP_CURRENT_STRUCT, x)), \
|
|
static_cast<UCHAR>(RTL_FIELD_SIZE(FUSIONP_DUMP_CURRENT_STRUCT, x)) \
|
|
},
|
|
|
|
typedef struct _FUSIONP_DUMP_BUILTIN_SYMBOLS_STRUCT
|
|
{
|
|
// more generally, these UCHARs should be ULONG or SIZE_T
|
|
PCSTR Name;
|
|
UCHAR NameLength;
|
|
UCHAR Size;
|
|
UCHAR NumberOfFields;
|
|
PCFUSIONP_DUMP_BUILTIN_SYMBOLS_FIELD Fields;
|
|
|
|
} FUSIONP_DUMP_BUILTIN_SYMBOLS_STRUCT, *PFUSIONP_DUMP_BUILTIN_SYMBOLS_STRUCT;
|
|
typedef const FUSIONP_DUMP_BUILTIN_SYMBOLS_STRUCT * PCFUSIONP_DUMP_BUILTIN_SYMBOLS_STRUCT;
|
|
|
|
typedef int (__cdecl * PFN_FUSIONP_DUMP_PRINTF)(const char * Format, ...);
|
|
typedef PCSTR (__stdcall * PFN_FUSIONP_DUMP_FORMATTIME)(LARGE_INTEGER);
|
|
|
|
typedef struct _FUSIONP_DUMP_CALLBACKS {
|
|
|
|
PFN_FUSIONP_DUMP_PRINTF Printf;
|
|
PFN_FUSIONP_DUMP_FORMATTIME FormatTime;
|
|
|
|
} FUSIONP_DUMP_CALLBACKS, *PFUSIONP_DUMP_CALLBACKS;
|
|
typedef const FUSIONP_DUMP_CALLBACKS * PCFUSIONP_DUMP_CALLBACKS;
|
|
|
|
BOOL
|
|
FusionpDumpStruct(
|
|
PCFUSIONP_DUMP_CALLBACKS Callbacks,
|
|
PCFUSIONP_DUMP_BUILTIN_SYMBOLS_STRUCT BuiltinTypeInfo,
|
|
ULONG64 StructBase,
|
|
PCSTR StructFriendlyName, // should be more like "per line prefix"
|
|
const ULONG64 * Bases // helps with position independent data, but is it sufficient?
|
|
);
|
|
|
|
#define FUSIONP_DUMP_NATIVE_DEREF(StructType, Struct, Field) ((ULONG64)(((StructType)(ULONG_PTR)Struct)->Field))
|
|
|
|
ULONG64
|
|
FusionpDumpSymbolDrivenDeref(
|
|
PCSTR StructType,
|
|
ULONG64 StructBase,
|
|
PCSTR FieldName
|
|
);
|
|
|
|
#define FUSIONP_DUMP_SYMBOL_DRIVEN_DEREF(StructType, Struct, Field) \
|
|
(FusionpDumpSymbolDrivenDeref(#StructType, static_cast<ULONG64>(reinterpret_cast<ULONG_PTR>(Struct)), #Field))
|
|
|
|
//
|
|
// initial test case migrated from sxstest
|
|
//
|
|
extern const FUSIONP_DUMP_BUILTIN_SYMBOLS_STRUCT StructInfo_ACTIVATION_CONTEXT_DATA_ASSEMBLY_INFORMATION;
|