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_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;
-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;
VOID RosSymInit(PROSSYM_CALLBACKS Callbacks);
-VOID RosSymInitKernelMode(VOID);
VOID RosSymInitUserMode(VOID);
-BOOLEAN RosSymCreateFromMem(PVOID ImageStart, ULONG_PTR ImageSize,
- PROSSYM_INFO *RosSymInfo);
BOOLEAN RosSymCreateFromFile(PVOID FileContext, PROSSYM_INFO *RosSymInfo);
-BOOLEAN RosSymGetAddressInformation(PROSSYM_INFO RosSymInfo,
- ULONG_PTR RelativeAddress,
- ULONG *LineNumber,
- char *FileName,
- char *FunctionName);
+BOOLEAN RosSymGetAddressInformation
+(PROSSYM_INFO RosSymInfo,
+ ULONG_PTR RelativeAddress,
+ PROSSYM_LINEINFO RosSymLineInfo);
+VOID RosSymFreeInfo(PROSSYM_LINEINFO RosSymLineInfo);
VOID RosSymDelete(PROSSYM_INFO RosSymInfo);
#endif /* REACTOS_ROSSYM_H_INCLUDED */