reactos/sdk/include/reactos/rossym.h
Jérôme Gardou 835c30232e [NTOS:KD][NTOS:KD64][NTOS:KDBG] Fix IRQL & spinlock use
KD64: Raise to HIGH_LEVEL when entering trap
KDBG: lower to DISPATCH_LEVEL when applying IRQL hack & use a worker thread to load symbols
KD&KDBG: Actually unload symbols when required
2021-06-29 11:49:20 +02:00

168 lines
4.5 KiB
C

/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS kernel
* FILE: include/reactos/rossym.h
* PURPOSE: Handling of rossym symbol info
*
* PROGRAMMERS: Ge van Geldorp (gvg@reactos.com)
*/
#ifndef REACTOS_ROSSYM_H_INCLUDED
#define REACTOS_ROSSYM_H_INCLUDED
#define ROSSYM_SECTION_NAME ".rossym"
#ifdef __cplusplus
extern "C" {
#endif
typedef struct _ROSSYM_HEADER {
unsigned long SymbolsOffset;
unsigned long SymbolsLength;
unsigned long StringsOffset;
unsigned long StringsLength;
} ROSSYM_HEADER, *PROSSYM_HEADER;
typedef struct _ROSSYM_ENTRY {
ULONG_PTR Address;
ULONG FunctionOffset;
ULONG FileOffset;
ULONG SourceLine;
} ROSSYM_ENTRY, *PROSSYM_ENTRY;
enum _ROSSYM_REGNAME {
ROSSYM_X86_EAX = 0,
ROSSYM_X86_ECX,
ROSSYM_X86_EDX,
ROSSYM_X86_EBX,
ROSSYM_X86_ESP,
ROSSYM_X86_EBP,
ROSSYM_X86_ESI,
ROSSYM_X86_EDI,
ROSSYM_X64_RAX = 0,
ROSSYM_X64_RDX,
ROSSYM_X64_RCX,
ROSSYM_X64_RBX,
ROSSYM_X64_RSI,
ROSSYM_X64_RDI,
ROSSYM_X64_RBP,
ROSSYM_X64_RSP,
Rossym_X64_R8,
ROSSYM_X64_R9,
ROSSYM_X64_R10,
ROSSYM_X64_R11,
ROSSYM_X64_R12,
ROSSYM_X64_R13,
ROSSYM_X64_R14,
ROSSYM_X64_R15
};
typedef struct _ROSSYM_REGISTERS {
ULONGLONG Registers[32];
} ROSSYM_REGISTERS, *PROSSYM_REGISTERS;
typedef struct _ROSSYM_PARAMETER {
ULONGLONG Value;
char *ValueName;
} ROSSYM_PARAMETER, *PROSSYM_PARAMETER;
typedef enum _ROSSYM_LINEINFO_FLAGS {
ROSSYM_LINEINFO_HAS_REGISTERS = 1
} ROSSYM_LINEINFO_FLAGS;
typedef enum _ROSSYM_LINEINFO_TYPE {
ROSSYM_LINEINFO_UNKNOWN,
ROSSYM_LINEINFO_NARROW_STRING,
ROSSYM_LINEINFO_WIDE_STRING,
ROSSYM_LINEINFO_ANSI_STRING,
ROSSYM_LINEINFO_UNICODE_STRING,
ROSSYM_LINEINFO_HANDLE
} ROSSYM_LINEINFO_STRINGTYPE;
typedef struct _ROSSYM_LINEINFO {
ROSSYM_LINEINFO_FLAGS Flags;
ULONG LineNumber;
char *FileName;
char *FunctionName;
ROSSYM_REGISTERS Registers;
ULONG NumParams;
ROSSYM_PARAMETER Parameters[16];
} ROSSYM_LINEINFO, *PROSSYM_LINEINFO;
typedef struct _ROSSYM_AGGREGATE_MEMBER {
PCHAR Name, Type;
ULONG BaseOffset, Size;
ULONG FirstBit, Bits;
ULONG TypeId;
} ROSSYM_AGGREGATE_MEMBER, *PROSSYM_AGGREGATE_MEMBER;
typedef struct _ROSSYM_AGGREGATE {
ULONG NumElements;
PROSSYM_AGGREGATE_MEMBER Elements;
} ROSSYM_AGGREGATE, *PROSSYM_AGGREGATE;
typedef struct _ROSSYM_CALLBACKS {
PVOID (*AllocMemProc)(ULONG_PTR Size);
VOID (*FreeMemProc)(PVOID Area);
BOOLEAN (*ReadFileProc)(PVOID FileContext, PVOID Buffer, ULONG Size);
BOOLEAN (*SeekFileProc)(PVOID FileContext, ULONG_PTR Position);
BOOLEAN (*MemGetProc)(PVOID FileContext, ULONG_PTR *Target, PVOID SourceMem, ULONG Size);
} ROSSYM_CALLBACKS, *PROSSYM_CALLBACKS;
#ifdef __ROS_DWARF__
typedef struct _ROSSYM_OWN_FILECONTEXT {
BOOLEAN (*ReadFileProc)(PVOID FileContext, PVOID Buffer, ULONG Size);
BOOLEAN (*SeekFileProc)(PVOID FileContext, ULONG_PTR Position);
} ROSSYM_OWN_FILECONTEXT, *PROSSYM_OWN_FILECONTEXT;
struct Dwarf;
typedef struct Dwarf *PROSSYM_INFO;
#else
typedef struct _ROSSYM_INFO {
PROSSYM_ENTRY Symbols;
ULONG SymbolsCount;
PCHAR Strings;
ULONG StringsLength;
} ROSSYM_INFO, *PROSSYM_INFO;
#endif
VOID RosSymInit(PROSSYM_CALLBACKS Callbacks);
#ifndef __ROS_DWARF__
VOID RosSymInitKernelMode(VOID);
#endif
VOID RosSymInitUserMode(VOID);
BOOLEAN RosSymCreateFromRaw(PVOID RawData, ULONG_PTR DataSize,
PROSSYM_INFO *RosSymInfo);
BOOLEAN RosSymCreateFromMem(PVOID ImageStart, ULONG_PTR ImageSize,
PROSSYM_INFO *RosSymInfo);
BOOLEAN RosSymCreateFromFile(PVOID FileContext, PROSSYM_INFO *RosSymInfo);
ULONG RosSymGetRawDataLength(PROSSYM_INFO RosSymInfo);
VOID RosSymGetRawData(PROSSYM_INFO RosSymInfo, PVOID RawData);
#ifdef __ROS_DWARF__
BOOLEAN RosSymGetAddressInformation(PROSSYM_INFO RosSymInfo,
ULONG_PTR RelativeAddress,
PROSSYM_LINEINFO RosSymLineInfo);
#else
BOOLEAN RosSymGetAddressInformation(PROSSYM_INFO RosSymInfo,
ULONG_PTR RelativeAddress,
ULONG *LineNumber,
char *FileName,
char *FunctionName);
#endif
VOID RosSymFreeInfo(PROSSYM_LINEINFO RosSymLineInfo);
VOID RosSymDelete(PROSSYM_INFO RosSymInfo);
BOOLEAN
RosSymAggregate(PROSSYM_INFO RosSymInfo, PCHAR Type, PROSSYM_AGGREGATE Aggregate);
VOID RosSymFreeAggregate(PROSSYM_AGGREGATE Aggregate);
#ifdef __cplusplus
}
#endif
#endif /* REACTOS_ROSSYM_H_INCLUDED */
/* EOF */