2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS kernel
4 * FILE: include/reactos/rossym.h
5 * PURPOSE: Handling of rossym symbol info
7 * PROGRAMMERS: Ge van Geldorp (gvg@reactos.com)
10 #ifndef REACTOS_ROSSYM_H_INCLUDED
11 #define REACTOS_ROSSYM_H_INCLUDED
13 #define ROSSYM_SECTION_NAME ".rossym"
19 typedef struct _ROSSYM_HEADER
{
20 unsigned long SymbolsOffset
;
21 unsigned long SymbolsLength
;
22 unsigned long StringsOffset
;
23 unsigned long StringsLength
;
24 } ROSSYM_HEADER
, *PROSSYM_HEADER
;
26 typedef struct _ROSSYM_ENTRY
{
31 } ROSSYM_ENTRY
, *PROSSYM_ENTRY
;
33 enum _ROSSYM_REGNAME
{
61 typedef struct _ROSSYM_REGISTERS
{
62 ULONGLONG Registers
[32];
63 } ROSSYM_REGISTERS
, *PROSSYM_REGISTERS
;
65 typedef struct _ROSSYM_PARAMETER
{
68 } ROSSYM_PARAMETER
, *PROSSYM_PARAMETER
;
70 typedef enum _ROSSYM_LINEINFO_FLAGS
{
71 ROSSYM_LINEINFO_HAS_REGISTERS
= 1
72 } ROSSYM_LINEINFO_FLAGS
;
74 typedef enum _ROSSYM_LINEINFO_TYPE
{
75 ROSSYM_LINEINFO_UNKNOWN
,
76 ROSSYM_LINEINFO_NARROW_STRING
,
77 ROSSYM_LINEINFO_WIDE_STRING
,
78 ROSSYM_LINEINFO_ANSI_STRING
,
79 ROSSYM_LINEINFO_UNICODE_STRING
,
80 ROSSYM_LINEINFO_HANDLE
81 } ROSSYM_LINEINFO_STRINGTYPE
;
83 typedef struct _ROSSYM_LINEINFO
{
84 ROSSYM_LINEINFO_FLAGS Flags
;
88 ROSSYM_REGISTERS Registers
;
90 ROSSYM_PARAMETER Parameters
[16];
91 } ROSSYM_LINEINFO
, *PROSSYM_LINEINFO
;
93 typedef struct _ROSSYM_AGGREGATE_MEMBER
{
95 ULONG BaseOffset
, Size
;
98 } ROSSYM_AGGREGATE_MEMBER
, *PROSSYM_AGGREGATE_MEMBER
;
100 typedef struct _ROSSYM_AGGREGATE
{
102 PROSSYM_AGGREGATE_MEMBER Elements
;
103 } ROSSYM_AGGREGATE
, *PROSSYM_AGGREGATE
;
105 typedef struct _ROSSYM_CALLBACKS
{
106 PVOID (*AllocMemProc
)(ULONG_PTR Size
);
107 VOID (*FreeMemProc
)(PVOID Area
);
108 BOOLEAN (*ReadFileProc
)(PVOID FileContext
, PVOID Buffer
, ULONG Size
);
109 BOOLEAN (*SeekFileProc
)(PVOID FileContext
, ULONG_PTR Position
);
110 BOOLEAN (*MemGetProc
)(PVOID FileContext
, ULONG_PTR
*Target
, PVOID SourceMem
, ULONG Size
);
111 } ROSSYM_CALLBACKS
, *PROSSYM_CALLBACKS
;
114 typedef struct _ROSSYM_OWN_FILECONTEXT
{
115 BOOLEAN (*ReadFileProc
)(PVOID FileContext
, PVOID Buffer
, ULONG Size
);
116 BOOLEAN (*SeekFileProc
)(PVOID FileContext
, ULONG_PTR Position
);
117 } ROSSYM_OWN_FILECONTEXT
, *PROSSYM_OWN_FILECONTEXT
;
120 typedef struct Dwarf
*PROSSYM_INFO
;
122 typedef struct _ROSSYM_INFO
*PROSSYM_INFO
;
125 VOID
RosSymInit(PROSSYM_CALLBACKS Callbacks
);
126 #ifndef __ROS_DWARF__
127 VOID
RosSymInitKernelMode(VOID
);
129 VOID
RosSymInitUserMode(VOID
);
131 BOOLEAN
RosSymCreateFromRaw(PVOID RawData
, ULONG_PTR DataSize
,
132 PROSSYM_INFO
*RosSymInfo
);
133 BOOLEAN
RosSymCreateFromMem(PVOID ImageStart
, ULONG_PTR ImageSize
,
134 PROSSYM_INFO
*RosSymInfo
);
135 BOOLEAN
RosSymCreateFromFile(PVOID FileContext
, PROSSYM_INFO
*RosSymInfo
);
136 ULONG
RosSymGetRawDataLength(PROSSYM_INFO RosSymInfo
);
137 VOID
RosSymGetRawData(PROSSYM_INFO RosSymInfo
, PVOID RawData
);
139 BOOLEAN
RosSymGetAddressInformation(PROSSYM_INFO RosSymInfo
,
140 ULONG_PTR RelativeAddress
,
141 PROSSYM_LINEINFO RosSymLineInfo
);
143 BOOLEAN
RosSymGetAddressInformation(PROSSYM_INFO RosSymInfo
,
144 ULONG_PTR RelativeAddress
,
149 VOID
RosSymFreeInfo(PROSSYM_LINEINFO RosSymLineInfo
);
150 VOID
RosSymDelete(PROSSYM_INFO RosSymInfo
);
152 RosSymAggregate(PROSSYM_INFO RosSymInfo
, PCHAR Type
, PROSSYM_AGGREGATE Aggregate
);
153 VOID
RosSymFreeAggregate(PROSSYM_AGGREGATE Aggregate
);
159 #endif /* REACTOS_ROSSYM_H_INCLUDED */