/* * 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_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 */