4 * (C) 2005 Michael Beck beck@ipd.info.uni-karlsruhe.de
11 #include "firmEvaluator.h"
14 * Get the initial address. As the interface allows only 32 bit
15 * transmitted, new I/F must be asked for 64bit support.
17 static void *GetInitialAddress(DWORD dwAddress, DEBUGHELPER *pHelper) {
18 if (pHelper->dwVersion < 0x20000) {
20 return (void *)dwAddress;
24 return (void *)pHelper->GetRealAddress(pHelper);
31 HRESULT copy_from_debuggee(const void *address, DEBUGHELPER *pHelper, void *dst, DWORD size)
35 if (pHelper->dwVersion < 0x20000) {
37 if (pHelper->ReadDebuggeeMemory(pHelper, (DWORD)address, size, dst, &nGot) != S_OK)
44 if (pHelper->ReadDebuggeeMemoryEx(pHelper, (DWORDLONG)address, size, dst, &nGot) != S_OK)
53 * Evaluate an firm * object
55 HRESULT WINAPI firm_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
59 void *address = GetInitialAddress(dwAddress, pHelper);
61 if (address == NULL) {
62 _tcsncpy(pResult, "NULL", max);
66 if (copy_from_debuggee(address, pHelper, &kind, sizeof(kind)) != S_OK)
69 size = get_firm_object_size(kind);
73 return FormatFirmObject(pHelper, nBase, kind, address, pResult, max);
77 * Evaluate an ident * object
79 HRESULT WINAPI firm_ident_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
82 void *address = GetInitialAddress(dwAddress, pHelper);
84 if (address == NULL) {
85 _tcsncpy(pResult, "NULL", max);
89 return format_ident(pHelper, address, pResult, max);
93 * Evaluate a pset * object
95 HRESULT WINAPI firm_pset_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
98 void *address = GetInitialAddress(dwAddress, pHelper);
100 if (address == NULL) {
101 _tcsncpy(pResult, "NULL", max);
105 return format_pset(pHelper, nBase, address, pResult, max);
109 * Evaluate a set * object
111 HRESULT WINAPI firm_set_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
114 void *address = GetInitialAddress(dwAddress, pHelper);
117 _tcsncpy(pResult, "NULL", max);
121 return format_set(pHelper, nBase, address, pResult, max);
125 * Evaluate a _arr_descr * object
127 HRESULT WINAPI firm_arr_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
130 void *address = GetInitialAddress(dwAddress, pHelper);
132 if (address == NULL) {
133 _tcsncpy(pResult, "NULL", max);
137 return format_arr_descr(pHelper, nBase, address, pResult, max);
141 * Evaluate a pdeq * object
143 HRESULT WINAPI firm_pdeq_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
146 void *address = GetInitialAddress(dwAddress, pHelper);
149 _tcsncpy(pResult, "NULL", max);
153 return format_pdeq(pHelper, nBase, address, pResult, max);
157 * Evaluate a bitset_t * object
159 HRESULT WINAPI firm_bitset_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
162 void *address = GetInitialAddress(dwAddress, pHelper);
165 _tcsncpy(pResult, "NULL", max);
169 return format_bitset(pHelper, nBase, address, pResult, max);
175 HRESULT WINAPI firm_op_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
178 void *address = GetInitialAddress(dwAddress, pHelper);
181 _tcsncpy(pResult, "NULL", max);
185 return format_op(pHelper, address, pResult, max);