22#define NONAMELESSUNION
30#ifndef DBGHELP_STATIC_LIB
34#ifndef DBGHELP_STATIC_LIB
45 if (
a1 >
a2)
return 1;
46 if (
a1 <
a2)
return -1;
59 const struct symt* sym1 = *(
const struct symt*
const *)p1;
60 const struct symt* sym2 = *(
const struct symt*
const *)p2;
71 const struct symt**
c;
75 struct symt_idx_to_ptr *idx_to_ptr;
77 char ptrbuf[3 + (
sizeof(
void *) * 2)];
86 if (idx_to_ptr->sym == sym)
87 return idx_to_ptr->idx;
98 idx_to_ptr->sym = sym;
99 idx_to_ptr->idx =
len + 1;
112#if defined(__x86_64__) || defined(__arm64__)
125 if (sz <= module->sorttab_size)
return TRUE;
137 if (!
new)
return FALSE;
164 if (!srcfile || !*srcfile)
212 TRACE_(dbghelp_symt)(
"Adding compiland symbol %s:%s\n",
233 TRACE_(dbghelp_symt)(
"Adding public symbol %s:%s @%lx\n",
258 const char*
name,
unsigned is_static,
266 TRACE_(dbghelp_symt)(
"Adding global symbol %s:%s %d@%lx %p\n",
279 FIXME(
"Size mismatch for %s.%s between type (%s) and src (%lu)\n",
297 struct symt* sig_type)
302 TRACE_(dbghelp_symt)(
"Adding global function %s:%s @%lx-%lx\n",
312 sym->
type = sig_type;
335 TRACE_(dbghelp_symt)(
"(%p)%s:%lx %s:%u\n",
388 TRACE_(dbghelp_symt)(
"Adding local symbol (%s:%s): %s %p\n",
403 locsym->
u.
var = *loc;
416 unsigned pc,
unsigned len)
429 block->container = parent_block ? &parent_block->
symt : &
func->symt;
503 TRACE_(dbghelp_symt)(
"Adding global thunk %s:%s @%lx-%lx\n",
532 TRACE_(dbghelp_symt)(
"Adding constant value %s:%s\n",
560 TRACE_(dbghelp_symt)(
"Adding global label value %s:%s\n",
599 sym_info->
ModBase =
pair->requested->module.BaseOfImage;
625 modfmt =
pair->effective->format_info[
i];
647 FIXME(
"suspicious register value %x\n", loc.
reg);
655 FIXME(
"Shouldn't happen (kind=%d), debug reader backend is broken\n", loc.
kind);
662 switch (
data->u.var.kind)
672 FIXME(
"Shouldn't happen (kind=%d), debug reader backend is broken\n",
data->u.var.kind);
678 switch (
data->u.value.n1.n2.vt)
689 FIXME(
"Unsupported variant type (%u)\n",
data->u.value.n1.n2.vt);
695 FIXME(
"Unhandled kind (%u) in sym data\n",
data->kind);
735 TRACE_(dbghelp_symt)(
"%p => %s %u %s\n",
736 sym, sym_info->
Name, sym_info->
Size,
789 unsigned low = 0, mid = high / 2;
799 case -1: low = mid + 1;
break;
800 case 1: high = mid;
break;
802 mid = low + (high - low) / 2;
803 }
while (low < high);
829 static unsigned num_tmp;
849 for (
i = delta - 1;
i >= 0;
i--)
851 prev_ins_idx = ins_idx;
855 (prev_ins_idx - ins_idx) *
sizeof(
struct symt_ht*));
879 int idx_sorttab_orig = idx_sorttab;
883 while (idx_sorttab > 0 &&
889 idx_sorttab = idx_sorttab_orig;
890 while (idx_sorttab < module->num_sorttab - 1 &&
897 idx_sorttab = idx_sorttab_orig;
920 if (
addr <= ref_addr)
930 if (
addr >= ref_addr + ref_size)
return NULL;
933 while (high > low + 1)
935 mid = (high + low) / 2;
958 DWORD pc =
pair->pcs->ctx_frame.InstructionOffset;
993 FIXME(
"Unknown type: %u (%x)\n", lsym->
tag, lsym->
tag);
1076 for (
pair.requested =
pair.pcs->lmodules;
pair.requested;
pair.requested =
pair.requested->next)
1089 for (
pair.requested =
pair.pcs->lmodules;
pair.requested;
pair.requested =
pair.requested->next)
1126 se.
cb = EnumSymbolsCallback;
1127 se.
user = UserContext;
1154 TRACE(
"(%p %s %s %p %p)\n",
1156 EnumSymbolsCallback, UserContext);
1198 sew.
ctx = UserContext;
1199 sew.
cb = EnumSymbolsCallback;
1226 se.
ctx = UserContext;
1227 se.
cb = EnumSymbolsCallback;
1253 se.
ctx = UserContext;
1254 se.
cb = EnumSymbolsCallback;
1294 if (!si)
return FALSE;
1319 si->SizeOfStruct =
sizeof(*si);
1325 *Displacement = Displacement64;
1326 Symbol->Address = si->Address;
1328 Symbol->Flags = si->Flags;
1347 si->SizeOfStruct =
sizeof(*si);
1353 *Displacement = Displacement64;
1354 Symbol->Address = si->Address;
1356 Symbol->Flags = si->Flags;
1399 if (!pcs)
return FALSE;
1441 si->SizeOfStruct =
sizeof(*si);
1445 Symbol->Address = si->Address;
1447 Symbol->Flags = si->Flags;
1463 si->SizeOfStruct =
sizeof(*si);
1467 Symbol->Address = si->Address;
1469 Symbol->Flags = si->Flags;
1649 *pdwDisplacement = dwAddr -
Line->Address;
1695 while (!
li->is_first)
1698 if (!
li->is_source_file)
1700 Line->LineNumber =
li->line_number;
1701 Line->Address =
li->
u.pc_offset;
1703 if (!in_search)
return TRUE;
1740 while (!
li->is_last)
1743 if (!
li->is_source_file)
1745 line->LineNumber =
li->line_number;
1746 line->Address =
li->
u.pc_offset;
1816 static char* (
CDECL *p_undname)(
char*,
const char*,
int,
void* (
CDECL*)(
size_t),
void (
CDECL*)(
void*),
unsigned short);
1817 static const WCHAR szMsvcrt[] = {
'm',
's',
'v',
'c',
'r',
't',
'.',
'd',
'l',
'l',0};
1823 if (!p_undname)
return NULL;
1835 TRACE(
"(%s, %p, %d, 0x%08x)\n",
1836 debugstr_a(decorated_name), undecorated_name, undecorated_length,
flags);
1838 if (!undecorated_name || !undecorated_length)
1840 if (!
und_name(undecorated_name, decorated_name, undecorated_length,
flags))
1842 return strlen(undecorated_name);
1854 TRACE(
"(%s, %p, %d, 0x%08x)\n",
1855 debugstr_w(decorated_name), undecorated_name, undecorated_length,
flags);
1857 if (!undecorated_name || !undecorated_length)
1867 undecorated_name[undecorated_length - 1] = 0;
1877#define WILDCHAR(x) (-(x))
1883 case '\\': (*re)++;
return *(*re)++;
1884 case '*':
case '[':
case '?':
case '+':
case '#':
case ']':
return WILDCHAR(*(*re)++);
1885 default:
return *(*re)++;
1926 if (prev >= 0 && ch1 >= 0 &&
re_match_char(prev, *
string, _case) <= 0 &&
1944 const WCHAR* re_end = *pre;
1945 const WCHAR* string_end = *pstring;
1946 const WCHAR* re_beg;
1947 const WCHAR* string_beg;
1951 while (*re_end && *string_end)
1953 string_beg = string_end;
1960 {
static const WCHAR qmW[] = {
'?',0}; re_beg = qmW;}
1983 for ( ; string_end >= string_beg; string_end--)
1994 if (*re_end || *string_end)
return FALSE;
1998 *pstring = string_end;
2018 TRACE(
"%s %s %c\n",
string, re, _case ?
'Y' :
'N');
2059 FIXME(
"Unsupported searching with options (%x)\n",
Options);
2064 se.
cb = EnumSymbolsCallback;
2065 se.
user = UserContext;
2085 TRACE(
"(%p %s %u %u %s %s %p %p %x)\n",
2099 EnumSymbolsCallback, UserContext,
Options);
2114 TRACE(
"(%p %s %u %u %s %s %p %p %x)\n",
2119 sew.
ctx = UserContext;
2120 sew.
cb = EnumSymbolsCallback;
2194 if (compiland)
FIXME(
"Unsupported yet (filtering on compiland %s)\n", compiland);
2238 if (!
cb(&sci,
user))
break;
2250 dwLineNumber, plDisplacement,
Line);
2258 dwLineNumber, lpDisplacement,
Line);
2266 dwLineNumber, plDisplacement,
Line);
2276 FIXME(
"hProcess = %p, BaseOfDll = %s, index = %d, symbol = %p\n",
2288 FIXME(
"hProcess = %p, BaseOfDll = %s, index = %d, symbol = %p\n",
std::map< E_MODULE, HMODULE > mod
int strcmp(const char *String1, const char *String2)
ACPI_SIZE strlen(const char *String)
char * strcpy(char *DstString, const char *SrcString)
char * strchr(const char *String, int ch)
ACPI_BUFFER *RetBuffer ACPI_BUFFER *RetBuffer char ACPI_WALK_RESOURCE_CALLBACK void *Context ACPI_BUFFER *RetBuffer UINT16 ACPI_RESOURCE **ResourcePtr ACPI_GENERIC_ADDRESS *Reg UINT32 *ReturnValue UINT8 UINT8 *Slp_TypB ACPI_PHYSICAL_ADDRESS PhysicalAddress64 UINT32 UINT32 *TimeElapsed UINT32 ACPI_STATUS const char UINT32 ACPI_STATUS const char UINT32 const char const char * ModuleName
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
static const WCHAR nameW[]
void user(int argc, const char *argv[])
static TAGID TAGID TAGID LPCWSTR find_name
BOOL symt_get_info(struct module *module, const struct symt *type, IMAGEHLP_SYMBOL_TYPE_INFO req, void *pInfo) DECLSPEC_HIDDEN
WCHAR * symt_get_nameW(const struct symt *sym) DECLSPEC_HIDDEN
void vector_init(struct vector *v, unsigned elt_sz, unsigned bucket_sz) DECLSPEC_HIDDEN
void * vector_add(struct vector *v, struct pool *pool) DECLSPEC_HIDDEN
void * pool_alloc(struct pool *a, size_t len) DECLSPEC_HIDDEN
struct module * module_get_containee(const struct process *pcs, const struct module *inner) DECLSPEC_HIDDEN
const char * symt_get_name(const struct symt *sym) DECLSPEC_HIDDEN
struct module * module_find_by_nameA(const struct process *pcs, const char *name) DECLSPEC_HIDDEN
unsigned vector_length(const struct vector *v) DECLSPEC_HIDDEN
void hash_table_iter_init(const struct hash_table *ht, struct hash_table_iter *hti, const char *name) DECLSPEC_HIDDEN
void * hash_table_iter_up(struct hash_table_iter *hti) DECLSPEC_HIDDEN
BOOL symt_get_address(const struct symt *type, ULONG64 *addr) DECLSPEC_HIDDEN
struct module * module_find_by_addr(const struct process *pcs, DWORD64 addr, enum module_type type) DECLSPEC_HIDDEN
void * vector_at(const struct vector *v, unsigned pos) DECLSPEC_HIDDEN
const char * source_get(const struct module *module, unsigned idx) DECLSPEC_HIDDEN
BOOL module_get_debug(struct module_pair *) DECLSPEC_HIDDEN
char * pool_strdup(struct pool *a, const char *str) DECLSPEC_HIDDEN
void hash_table_add(struct hash_table *ht, struct hash_table_elt *elt) DECLSPEC_HIDDEN
BOOL(CALLBACK * PSYM_ENUMERATESYMBOLS_CALLBACK)(PSYMBOL_INFO, ULONG, PVOID)
struct _SYMBOL_INFO * PSYMBOL_INFO
#define ERROR_CALL_NOT_IMPLEMENTED
BOOL(CALLBACK * PSYM_ENUMERATESYMBOLS_CALLBACKW)(PSYMBOL_INFOW, ULONG, PVOID)
#define ERROR_INVALID_PARAMETER
#define SYMFLAG_PARAMETER
#define SYMSEARCH_GLOBALSONLY
BOOL(CALLBACK * PSYM_ENUMSYMBOLS_CALLBACK)(PCSTR, ULONG, ULONG, PVOID)
#define SYMOPT_AUTO_PUBLICS
#define GetProcAddress(x, y)
#define SYMFLAG_PUBLIC_CODE
#define SYMOPT_LOAD_LINES
struct _SYMBOL_INFOW SYMBOL_INFOW
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define ERROR_NO_MORE_ITEMS
struct _SYMBOL_INFO SYMBOL_INFO
BOOL(CALLBACK * PSYM_ENUMSYMBOLS_CALLBACK64)(PCSTR, DWORD64, ULONG, PVOID)
struct _SYMBOL_INFOW * PSYMBOL_INFOW
#define UNDNAME_NAME_ONLY
#define HeapFree(x, y, z)
#define SYMFLAG_VALUEPRESENT
#define ERROR_INVALID_HANDLE
#define WINE_DECLARE_DEBUG_CHANNEL(x)
#define wine_get_dos_file_name(__x)
#define WideCharToMultiByte
#define SYMOPT_CASE_INSENSITIVE
#define MultiByteToWideChar
BOOL(CALLBACK * PSYM_ENUMLINES_CALLBACK)(PSRCCODEINFO, PVOID)
struct process * process_find_by_handle(HANDLE hProcess)
void * fetch_buffer(struct process *pcs, unsigned size)
static const WCHAR fileW[]
GLuint GLuint GLsizei GLenum type
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLenum const GLvoid * addr
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static const struct newhuff ht[]
_In_ BOOL _In_ HANDLE hProcess
#define memcpy(s1, s2, n)
#define memmove(s1, s2, n)
#define sprintf(buf, format,...)
static const struct update_accum a1
static const struct update_accum a2
static HMODULE MODULEINFO DWORD cb
static unsigned __int64 next
void __cdecl qsort(_Inout_updates_bytes_(_NumOfElements *_SizeOfElements) void *_Base, _In_ size_t _NumOfElements, _In_ size_t _SizeOfElements, _In_ int(__cdecl *_PtFuncCompare)(const void *, const void *))
ULONG64 InstructionOffset
CHAR FileName[MAX_PATH+1]
struct symt_ht ** addr_sorttab
IMAGEHLP_MODULEW64 module
struct hash_table ht_symbols
IMAGEHLP_STACK_FRAME ctx_frame
char buffer[sizeof(SYMBOL_INFOW)+MAX_SYM_NAME]
PSYM_ENUMERATESYMBOLS_CALLBACKW cb
char buffer[sizeof(SYMBOL_INFO)+MAX_SYM_NAME]
PSYM_ENUMERATESYMBOLS_CALLBACK cb
PSYM_ENUMSYMBOLS_CALLBACK64 cb
PSYM_ENUMSYMBOLS_CALLBACK cb
struct hash_table_elt hash_elt
struct hash_table_elt hash_elt
struct hash_table_elt hash_elt
struct hash_table_elt hash_elt
struct hash_table_elt hash_elt
struct hash_table_elt hash_elt
static BOOL resort_symbols(struct module *module)
static const WCHAR starW[]
BOOL WINAPI SymGetSymFromName(HANDLE hProcess, PCSTR Name, PIMAGEHLP_SYMBOL Symbol)
BOOL WINAPI SymFromAddr(HANDLE hProcess, DWORD64 Address, DWORD64 *Displacement, PSYMBOL_INFO Symbol)
BOOL WINAPI SymGetLineNext(HANDLE hProcess, PIMAGEHLP_LINE Line)
BOOL WINAPI SymMatchStringA(PCSTR string, PCSTR re, BOOL _case)
void symt_add_func_line(struct module *module, struct symt_function *func, unsigned source_idx, int line_num, ULONG_PTR offset)
static BOOL symt_enum_locals_helper(struct module_pair *pair, const WCHAR *match, const struct sym_enum *se, struct symt_function *func, const struct vector *v)
BOOL WINAPI SymGetLineNext64(HANDLE hProcess, PIMAGEHLP_LINE64 Line)
struct symt * symt_index2ptr(struct module *module, DWORD id)
static void copy_line_32_from_64(IMAGEHLP_LINE *l32, const IMAGEHLP_LINE64 *l64)
static unsigned where_to_insert(struct module *module, unsigned high, const struct symt_ht *elt)
BOOL WINAPI SymUnDName(PIMAGEHLP_SYMBOL sym, PSTR UnDecName, DWORD UnDecNameLength)
struct symt_data * symt_add_func_local(struct module *module, struct symt_function *func, enum DataKind dt, const struct location *loc, struct symt_block *block, struct symt *type, const char *name)
BOOL WINAPI SymGetLinePrev64(HANDLE hProcess, PIMAGEHLP_LINE64 Line)
BOOL WINAPI SymGetLineFromName64(HANDLE hProcess, PCSTR ModuleName, PCSTR FileName, DWORD dwLineNumber, PLONG lpDisplacement, PIMAGEHLP_LINE64 Line)
struct symt_public * symt_new_public(struct module *module, struct symt_compiland *compiland, const char *name, BOOL is_function, ULONG_PTR address, unsigned size)
BOOL WINAPI SymGetSymPrev(HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol)
BOOL WINAPI SymEnumerateSymbols(HANDLE hProcess, DWORD BaseOfDll, PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext)
BOOL WINAPI SymEnumerateSymbols64(HANDLE hProcess, DWORD64 BaseOfDll, PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback, PVOID UserContext)
static void copy_line_64_from_32(IMAGEHLP_LINE64 *l64, const IMAGEHLP_LINE *l32)
DWORD symt_ptr2index(struct module *module, const struct symt *sym)
static BOOL symt_enum_module(struct module_pair *pair, const WCHAR *match, const struct sym_enum *se)
static BOOL symt_grow_sorttab(struct module *module, unsigned sz)
static void *CDECL und_alloc(size_t len)
struct symt_hierarchy_point * symt_new_label(struct module *module, struct symt_compiland *compiland, const char *name, ULONG_PTR address)
struct symt_block * symt_close_func_block(struct module *module, const struct symt_function *func, struct symt_block *block, unsigned pc)
BOOL WINAPI SymGetLineFromNameW64(HANDLE hProcess, PCWSTR ModuleName, PCWSTR FileName, DWORD dwLineNumber, PLONG plDisplacement, PIMAGEHLP_LINEW64 Line)
BOOL WINAPI SymEnumSymbols(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR Mask, PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext)
static WCHAR * file_regex(const char *srcfile)
struct symt_thunk * symt_new_thunk(struct module *module, struct symt_compiland *compiland, const char *name, THUNK_ORDINAL ord, ULONG_PTR addr, ULONG_PTR size)
static BOOL doSymSearch(HANDLE hProcess, ULONG64 BaseOfDll, DWORD Index, DWORD SymTag, PCWSTR Mask, DWORD64 Address, PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext, DWORD Options)
BOOL symt_get_func_line_next(const struct module *module, PIMAGEHLP_LINE64 line)
BOOL WINAPI SymAddSymbol(HANDLE hProcess, ULONG64 BaseOfDll, PCSTR name, DWORD64 addr, DWORD size, DWORD flags)
BOOL WINAPI SymGetSymNext(HANDLE hProcess, PIMAGEHLP_SYMBOL Symbol)
struct symt_compiland * symt_new_compiland(struct module *module, ULONG_PTR address, unsigned src_idx)
BOOL WINAPI SymGetSymPrev64(HANDLE hProcess, PIMAGEHLP_SYMBOL64 Symbol)
BOOL WINAPI SymGetLinePrev(HANDLE hProcess, PIMAGEHLP_LINE Line)
static int re_match_char(WCHAR ch1, WCHAR ch2, BOOL _case)
struct symt_block * symt_open_func_block(struct module *module, struct symt_function *func, struct symt_block *parent_block, unsigned pc, unsigned len)
PWSTR WINAPI SymSetHomeDirectoryW(HANDLE hProcess, PCWSTR dir)
BOOL WINAPI SymSearchW(HANDLE hProcess, ULONG64 BaseOfDll, DWORD Index, DWORD SymTag, PCWSTR Mask, DWORD64 Address, PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext, DWORD Options)
BOOL WINAPI SymFromIndexW(HANDLE hProcess, ULONG64 BaseOfDll, DWORD index, PSYMBOL_INFOW symbol)
static BOOL send_symbol(const struct sym_enum *se, struct module_pair *pair, const struct symt_function *func, const struct symt *sym)
BOOL WINAPI SymGetSymFromAddr(HANDLE hProcess, DWORD Address, PDWORD Displacement, PIMAGEHLP_SYMBOL Symbol)
static void symt_fill_sym_info(struct module_pair *pair, const struct symt_function *func, const struct symt *sym, SYMBOL_INFO *sym_info)
static const WCHAR * re_match_one(const WCHAR *string, const WCHAR *elt, BOOL _case)
struct symt_data * symt_new_constant(struct module *module, struct symt_compiland *compiland, const char *name, struct symt *type, const VARIANT *v)
BOOL WINAPI SymGetLineFromAddrW64(HANDLE hProcess, DWORD64 dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINEW64 Line)
BOOL symt_normalize_function(struct module *module, const struct symt_function *func)
static int cmp_sorttab_addr(struct module *module, int idx, ULONG64 addr)
static void CDECL und_free(void *ptr)
static BOOL symt_enum_locals(struct process *pcs, const WCHAR *mask, const struct sym_enum *se)
struct symt_ht * symt_find_nearest(struct module *module, DWORD_PTR addr)
static int re_fetch_char(const WCHAR **re)
BOOL WINAPI SymUnDName64(PIMAGEHLP_SYMBOL64 sym, PSTR UnDecName, DWORD UnDecNameLength)
static BOOL doSymEnumSymbols(HANDLE hProcess, ULONG64 BaseOfDll, PCWSTR Mask, PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext)
struct symt_function * symt_new_function(struct module *module, struct symt_compiland *compiland, const char *name, ULONG_PTR addr, ULONG_PTR size, struct symt *sig_type)
BOOL WINAPI SymFromIndex(HANDLE hProcess, ULONG64 BaseOfDll, DWORD index, PSYMBOL_INFO symbol)
BOOL WINAPI SymGetSymNext64(HANDLE hProcess, PIMAGEHLP_SYMBOL64 Symbol)
PCHAR WINAPI SymSetHomeDirectory(HANDLE hProcess, PCSTR dir)
BOOL WINAPI SymSetScopeFromAddr(HANDLE hProcess, ULONG64 addr)
BOOL WINAPI SymGetSymFromName64(HANDLE hProcess, PCSTR Name, PIMAGEHLP_SYMBOL64 Symbol)
static BOOL re_match_multi(const WCHAR **pstring, const WCHAR **pre, BOOL _case)
static int symt_get_best_at(struct module *module, int idx_sorttab)
BOOL WINAPI SymAddSymbolW(HANDLE hProcess, ULONG64 BaseOfDll, PCWSTR name, DWORD64 addr, DWORD size, DWORD flags)
BOOL WINAPI SymMatchStringW(PCWSTR string, PCWSTR re, BOOL _case)
BOOL WINAPI SymGetLineFromName(HANDLE hProcess, PCSTR ModuleName, PCSTR FileName, DWORD dwLineNumber, PLONG plDisplacement, PIMAGEHLP_LINE Line)
DWORD WINAPI UnDecorateSymbolName(const char *decorated_name, char *undecorated_name, DWORD undecorated_length, DWORD flags)
BOOL WINAPI SymFromAddrW(HANDLE hProcess, DWORD64 Address, DWORD64 *Displacement, PSYMBOL_INFOW Symbol)
int __cdecl symt_cmp_addr(const void *p1, const void *p2)
struct symt_hierarchy_point * symt_add_function_point(struct module *module, struct symt_function *func, enum SymTagEnum point, const struct location *loc, const char *name)
static void symt_get_length(struct module *module, const struct symt *symt, ULONG64 *size)
BOOL WINAPI SymFromName(HANDLE hProcess, PCSTR Name, PSYMBOL_INFO Symbol)
BOOL WINAPI SymGetSymFromAddr64(HANDLE hProcess, DWORD64 Address, PDWORD64 Displacement, PIMAGEHLP_SYMBOL64 Symbol)
BOOL WINAPI SymEnumLines(HANDLE hProcess, ULONG64 base, PCSTR compiland, PCSTR srcfile, PSYM_ENUMLINES_CALLBACK cb, PVOID user)
static int cmp_addr(ULONG64 a1, ULONG64 a2)
static void copy_line_W64_from_64(struct process *pcs, IMAGEHLP_LINEW64 *l64w, const IMAGEHLP_LINE64 *l64)
BOOL symt_fill_func_line_info(const struct module *module, const struct symt_function *func, DWORD64 addr, IMAGEHLP_LINE64 *line)
static BOOL CALLBACK sym_enumerate_cb(PSYMBOL_INFO syminfo, ULONG size, void *ctx)
static void symt_add_module_ht(struct module *module, struct symt_ht *ht)
DWORD WINAPI UnDecorateSymbolNameW(const WCHAR *decorated_name, WCHAR *undecorated_name, DWORD undecorated_length, DWORD flags)
struct symt_data * symt_new_global_variable(struct module *module, struct symt_compiland *compiland, const char *name, unsigned is_static, struct location loc, ULONG_PTR size, struct symt *type)
BOOL WINAPI SymSearch(HANDLE hProcess, ULONG64 BaseOfDll, DWORD Index, DWORD SymTag, PCSTR Mask, DWORD64 Address, PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, PVOID UserContext, DWORD Options)
BOOL WINAPI SymEnumSymbolsW(HANDLE hProcess, ULONG64 BaseOfDll, PCWSTR Mask, PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, PVOID UserContext)
static BOOL CALLBACK sym_enumerate_cb64(PSYMBOL_INFO syminfo, ULONG size, void *ctx)
static char * und_name(char *buffer, const char *mangled, int buflen, unsigned short flags)
BOOL WINAPI SymGetLineFromAddr(HANDLE hProcess, DWORD dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINE Line)
BOOL WINAPI SymGetLineFromAddr64(HANDLE hProcess, DWORD64 dwAddr, PDWORD pdwDisplacement, PIMAGEHLP_LINE64 Line)
void copy_symbolW(SYMBOL_INFOW *siw, const SYMBOL_INFO *si)
#define CONTAINING_RECORD(address, type, field)
struct _LARGE_INTEGER::@2299 u
_In_ WDFCOLLECTION _In_ ULONG Index
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
static unsigned int block