2005-02-02 23:07:33 +00:00
|
|
|
/*
|
|
|
|
* COPYRIGHT: See COPYING in the top level directory
|
|
|
|
* PROJECT: ReactOS kernel
|
|
|
|
* FILE: include/reactos/rossym.h
|
|
|
|
* PURPOSE: Handling of rossym symbol info
|
2007-10-19 23:21:45 +00:00
|
|
|
*
|
2005-02-02 23:07:33 +00:00
|
|
|
* PROGRAMMERS: Ge van Geldorp (gvg@reactos.com)
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef REACTOS_ROSSYM_H_INCLUDED
|
|
|
|
#define REACTOS_ROSSYM_H_INCLUDED
|
|
|
|
|
|
|
|
#define ROSSYM_SECTION_NAME ".rossym"
|
|
|
|
|
2011-07-08 11:16:26 +00:00
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2005-02-02 23:07:33 +00:00
|
|
|
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;
|
|
|
|
|
2011-06-01 20:36:40 +00:00
|
|
|
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;
|
|
|
|
|
2011-07-08 11:16:26 +00:00
|
|
|
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;
|
|
|
|
|
2005-02-02 23:07:33 +00:00
|
|
|
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);
|
2011-06-01 20:36:40 +00:00
|
|
|
BOOLEAN (*MemGetProc)(PVOID FileContext, ULONG_PTR *Target, PVOID SourceMem, ULONG Size);
|
2005-02-02 23:07:33 +00:00
|
|
|
} ROSSYM_CALLBACKS, *PROSSYM_CALLBACKS;
|
|
|
|
|
2011-10-08 16:47:57 +00:00
|
|
|
#ifdef __ROS_DWARF__
|
2011-05-16 16:11:31 +00:00
|
|
|
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
|
2005-02-02 23:07:33 +00:00
|
|
|
typedef struct _ROSSYM_INFO *PROSSYM_INFO;
|
2011-05-16 16:11:31 +00:00
|
|
|
#endif
|
2005-02-02 23:07:33 +00:00
|
|
|
|
|
|
|
VOID RosSymInit(PROSSYM_CALLBACKS Callbacks);
|
2011-10-08 16:47:57 +00:00
|
|
|
#ifndef __ROS_DWARF__
|
2005-02-02 23:07:33 +00:00
|
|
|
VOID RosSymInitKernelMode(VOID);
|
2011-06-01 20:36:40 +00:00
|
|
|
#endif
|
2005-02-02 23:07:33 +00:00
|
|
|
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);
|
2011-10-08 16:47:57 +00:00
|
|
|
#ifdef __ROS_DWARF__
|
2011-06-01 20:36:40 +00:00
|
|
|
BOOLEAN RosSymGetAddressInformation(PROSSYM_INFO RosSymInfo,
|
|
|
|
ULONG_PTR RelativeAddress,
|
|
|
|
PROSSYM_LINEINFO RosSymLineInfo);
|
|
|
|
#else
|
2005-02-02 23:07:33 +00:00
|
|
|
BOOLEAN RosSymGetAddressInformation(PROSSYM_INFO RosSymInfo,
|
|
|
|
ULONG_PTR RelativeAddress,
|
|
|
|
ULONG *LineNumber,
|
|
|
|
char *FileName,
|
|
|
|
char *FunctionName);
|
2011-06-01 20:36:40 +00:00
|
|
|
#endif
|
|
|
|
VOID RosSymFreeInfo(PROSSYM_LINEINFO RosSymLineInfo);
|
2005-02-02 23:07:33 +00:00
|
|
|
VOID RosSymDelete(PROSSYM_INFO RosSymInfo);
|
2011-07-08 11:16:26 +00:00
|
|
|
BOOLEAN
|
|
|
|
RosSymAggregate(PROSSYM_INFO RosSymInfo, PCHAR Type, PROSSYM_AGGREGATE Aggregate);
|
|
|
|
VOID RosSymFreeAggregate(PROSSYM_AGGREGATE Aggregate);
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|
2005-02-02 23:07:33 +00:00
|
|
|
|
|
|
|
#endif /* REACTOS_ROSSYM_H_INCLUDED */
|
|
|
|
|
|
|
|
/* EOF */
|
|
|
|
|