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)
19 if (pHelper->dwVersion < 0x20000) {
21 return (void *)dwAddress;
25 return (void *)pHelper->GetRealAddress(pHelper);
32 HRESULT copy_from_debuggee(const void *address, DEBUGHELPER *pHelper, void *dst, DWORD size)
36 if (pHelper->dwVersion < 0x20000) {
38 if (pHelper->ReadDebuggeeMemory(pHelper, (DWORD)address, size, dst, &nGot) != S_OK)
45 if (pHelper->ReadDebuggeeMemoryEx(pHelper, (DWORDLONG)address, size, dst, &nGot) != S_OK)
54 * Evaluate an firm * object
56 HRESULT WINAPI firm_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
60 void *address = GetInitialAddress(dwAddress, pHelper);
62 if (address == NULL) {
63 _tcsncpy(pResult, "NULL", max);
67 if (copy_from_debuggee(address, pHelper, &kind, sizeof(kind)) != S_OK)
70 size = get_firm_object_size(kind);
74 return FormatFirmObject(pHelper, nBase, kind, address, pResult, max);
78 * Evaluate an ident * object
80 HRESULT WINAPI firm_ident_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
83 void *address = GetInitialAddress(dwAddress, pHelper);
85 if (address == NULL) {
86 _tcsncpy(pResult, "NULL", max);
90 return format_ident(pHelper, address, pResult, max);
94 * Evaluate a pset * object
96 HRESULT WINAPI firm_pset_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
99 void *address = GetInitialAddress(dwAddress, pHelper);
101 if (address == NULL) {
102 _tcsncpy(pResult, "NULL", max);
106 return format_pset(pHelper, nBase, address, pResult, max);
110 * Evaluate a set * object
112 HRESULT WINAPI firm_set_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
115 void *address = GetInitialAddress(dwAddress, pHelper);
118 _tcsncpy(pResult, "NULL", max);
122 return format_set(pHelper, nBase, address, pResult, max);
126 * Evaluate a _arr_descr * object
128 HRESULT WINAPI firm_arr_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
131 void *address = GetInitialAddress(dwAddress, pHelper);
133 if (address == NULL) {
134 _tcsncpy(pResult, "NULL", max);
138 return format_arr_descr(pHelper, nBase, address, pResult, max);
142 * Evaluate a pdeq * object
144 HRESULT WINAPI firm_pdeq_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
147 void *address = GetInitialAddress(dwAddress, pHelper);
150 _tcsncpy(pResult, "NULL", max);
154 return format_pdeq(pHelper, nBase, address, pResult, max);
158 * Evaluate a bitset_t * object
160 HRESULT WINAPI firm_bitset_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
163 void *address = GetInitialAddress(dwAddress, pHelper);
166 _tcsncpy(pResult, "NULL", max);
170 return format_bitset(pHelper, nBase, address, pResult, max);
176 HRESULT WINAPI firm_op_Evaluate(DWORD dwAddress, DEBUGHELPER *pHelper, int nBase, BOOL bUniStrings, char *pResult, size_t max, DWORD reserved )
179 void *address = GetInitialAddress(dwAddress, pHelper);
182 _tcsncpy(pResult, "NULL", max);
186 return format_op(pHelper, address, pResult, max);