summaryrefslogtreecommitdiff
path: root/src/ToolBox
diff options
context:
space:
mode:
authorKonstantin Baladurin <k.baladurin@partner.samsung.com>2017-10-05 13:07:31 +0300
committerJan Vorlicek <janvorli@microsoft.com>2017-10-05 12:07:31 +0200
commit076a61ef2eb3baf69182139f36b948f104e3b740 (patch)
treeaa38b7834786d50a3d3010aa2cb6f10072042420 /src/ToolBox
parentde4daccc1ea52ddc1ae8ac9e48cde603c507b868 (diff)
downloadcoreclr-076a61ef2eb3baf69182139f36b948f104e3b740.tar.gz
coreclr-076a61ef2eb3baf69182139f36b948f104e3b740.tar.bz2
coreclr-076a61ef2eb3baf69182139f36b948f104e3b740.zip
[SOS] Fix address types inconsistency (#14188)
GetObjFieldOffset function expects that cdaObj and cdaMT arguments have CLRDATA_ADDRESS type (sign-extended) but in some cases we use TADDR instead of CLRDATA_ADDRESS that isn't sign-extended. Due to it some SOS commands (for example DumpRuntimeTypes) don't work on x86 and ARM32.
Diffstat (limited to 'src/ToolBox')
-rw-r--r--src/ToolBox/SOS/Strike/strike.cpp42
1 files changed, 21 insertions, 21 deletions
diff --git a/src/ToolBox/SOS/Strike/strike.cpp b/src/ToolBox/SOS/Strike/strike.cpp
index 5ab45d5dca..338e70dc9a 100644
--- a/src/ToolBox/SOS/Strike/strike.cpp
+++ b/src/ToolBox/SOS/Strike/strike.cpp
@@ -776,7 +776,7 @@ BOOL GatherDynamicInfo(TADDR DynamicMethodObj, DacpObjectData *codeArray,
if (objData.Request(g_sos, TO_CDADDR(DynamicMethodObj)) != S_OK)
return bRet;
- iOffset = GetObjFieldOffset(DynamicMethodObj, objData.MethodTable, W("m_resolver"));
+ iOffset = GetObjFieldOffset(TO_CDADDR(DynamicMethodObj), objData.MethodTable, W("m_resolver"));
if (iOffset <= 0)
return bRet;
@@ -787,7 +787,7 @@ BOOL GatherDynamicInfo(TADDR DynamicMethodObj, DacpObjectData *codeArray,
if (objData.Request(g_sos, TO_CDADDR(resolverPtr)) != S_OK)
return bRet;
- iOffset = GetObjFieldOffset(resolverPtr, objData.MethodTable, W("m_code"));
+ iOffset = GetObjFieldOffset(TO_CDADDR(resolverPtr), objData.MethodTable, W("m_code"));
if (iOffset <= 0)
return bRet;
@@ -802,7 +802,7 @@ BOOL GatherDynamicInfo(TADDR DynamicMethodObj, DacpObjectData *codeArray,
return bRet;
// We also need the resolution table
- iOffset = GetObjFieldOffset (resolverPtr, objData.MethodTable, W("m_scope"));
+ iOffset = GetObjFieldOffset (TO_CDADDR(resolverPtr), objData.MethodTable, W("m_scope"));
if (iOffset <= 0)
return bRet;
@@ -813,7 +813,7 @@ BOOL GatherDynamicInfo(TADDR DynamicMethodObj, DacpObjectData *codeArray,
if (objData.Request(g_sos, TO_CDADDR(scopePtr)) != S_OK)
return bRet;
- iOffset = GetObjFieldOffset (scopePtr, objData.MethodTable, W("m_tokens"));
+ iOffset = GetObjFieldOffset (TO_CDADDR(scopePtr), objData.MethodTable, W("m_tokens"));
if (iOffset <= 0)
return bRet;
@@ -824,7 +824,7 @@ BOOL GatherDynamicInfo(TADDR DynamicMethodObj, DacpObjectData *codeArray,
if (objData.Request(g_sos, TO_CDADDR(tokensPtr)) != S_OK)
return bRet;
- iOffset = GetObjFieldOffset(tokensPtr, objData.MethodTable, W("_items"));
+ iOffset = GetObjFieldOffset(TO_CDADDR(tokensPtr), objData.MethodTable, W("_items"));
if (iOffset <= 0)
return bRet;
@@ -1471,7 +1471,7 @@ HRESULT PrintVC(TADDR taMT, TADDR taObject, BOOL bPrintFields = TRUE)
void PrintRuntimeTypeInfo(TADDR p_rtObject, const DacpObjectData & rtObjectData)
{
// Get the method table
- int iOffset = GetObjFieldOffset(p_rtObject, rtObjectData.MethodTable, W("m_handle"));
+ int iOffset = GetObjFieldOffset(TO_CDADDR(p_rtObject), rtObjectData.MethodTable, W("m_handle"));
if (iOffset > 0)
{
TADDR mtPtr;
@@ -1543,7 +1543,7 @@ HRESULT PrintObj(TADDR taObj, BOOL bPrintFields = TRUE)
if (_wcscmp(obj.GetTypeName(), W("System.RuntimeType+RuntimeTypeCache")) == 0)
{
// Get the method table
- int iOffset = GetObjFieldOffset (taObj, objData.MethodTable, W("m_runtimeType"));
+ int iOffset = GetObjFieldOffset (TO_CDADDR(taObj), objData.MethodTable, W("m_runtimeType"));
if (iOffset > 0)
{
TADDR rtPtr;
@@ -1714,7 +1714,7 @@ HRESULT PrintPermissionSet (TADDR p_PermSet)
// Walk the fields, printing some fields in a special way.
- int iOffset = GetObjFieldOffset (p_PermSet, PermSetData.MethodTable, W("m_Unrestricted"));
+ int iOffset = GetObjFieldOffset (TO_CDADDR(p_PermSet), PermSetData.MethodTable, W("m_Unrestricted"));
if (iOffset > 0)
{
@@ -1726,7 +1726,7 @@ HRESULT PrintPermissionSet (TADDR p_PermSet)
ExtOut("Unrestricted: FALSE\n");
}
- iOffset = GetObjFieldOffset (p_PermSet, PermSetData.MethodTable, W("m_permSet"));
+ iOffset = GetObjFieldOffset (TO_CDADDR(p_PermSet), PermSetData.MethodTable, W("m_permSet"));
if (iOffset > 0)
{
TADDR tbSetPtr;
@@ -1740,7 +1740,7 @@ HRESULT PrintPermissionSet (TADDR p_PermSet)
return Status;
}
- iOffset = GetObjFieldOffset (tbSetPtr, tbSetData.MethodTable, W("m_Set"));
+ iOffset = GetObjFieldOffset (TO_CDADDR(tbSetPtr), tbSetData.MethodTable, W("m_Set"));
if (iOffset > 0)
{
DWORD_PTR PermsArrayPtr;
@@ -1760,7 +1760,7 @@ HRESULT PrintPermissionSet (TADDR p_PermSet)
}
}
- iOffset = GetObjFieldOffset (tbSetPtr, tbSetData.MethodTable, W("m_Obj"));
+ iOffset = GetObjFieldOffset (TO_CDADDR(tbSetPtr), tbSetData.MethodTable, W("m_Obj"));
if (iOffset > 0)
{
DWORD_PTR PermObjPtr;
@@ -2190,7 +2190,7 @@ static const HRESULT AsyncHResultValues[] =
COR_E_DATAMISALIGNED, // kDataMisalignedException
};
-BOOL IsAsyncException(TADDR taObj, TADDR mtObj)
+BOOL IsAsyncException(CLRDATA_ADDRESS taObj, CLRDATA_ADDRESS mtObj)
{
// by default we'll treat exceptions as synchronous
UINT32 xcode = EXCEPTION_COMPLUS;
@@ -2384,12 +2384,12 @@ void SosExtOutLargeString(__inout_z __inout_ecount_opt(len) WCHAR * pwszLargeStr
ExtOut("%S", pwsz);
}
-HRESULT FormatException(TADDR taObj, BOOL bLineNumbers = FALSE)
+HRESULT FormatException(CLRDATA_ADDRESS taObj, BOOL bLineNumbers = FALSE)
{
HRESULT Status = S_OK;
DacpObjectData objData;
- if ((Status=objData.Request(g_sos, TO_CDADDR(taObj))) != S_OK)
+ if ((Status=objData.Request(g_sos, taObj)) != S_OK)
{
ExtOut("Invalid object\n");
return Status;
@@ -2418,7 +2418,7 @@ HRESULT FormatException(TADDR taObj, BOOL bLineNumbers = FALSE)
// First try to get exception object data using ISOSDacInterface2
DacpExceptionObjectData excData;
- BOOL bGotExcData = SUCCEEDED(excData.Request(g_sos, TO_CDADDR(taObj)));
+ BOOL bGotExcData = SUCCEEDED(excData.Request(g_sos, taObj));
// Walk the fields, printing some fields in a special way.
// HR, InnerException, Message, StackTrace, StackTraceString
@@ -2488,7 +2488,7 @@ HRESULT FormatException(TADDR taObj, BOOL bLineNumbers = FALSE)
}
BOOL bAsync = bGotExcData ? IsAsyncException(excData)
- : IsAsyncException(taObj, TO_TADDR(objData.MethodTable));
+ : IsAsyncException(taObj, objData.MethodTable);
{
TADDR taStackTrace = 0;
@@ -2722,7 +2722,7 @@ DECLARE_API(PrintException)
if (p_Object)
{
- FormatException(p_Object, bLineNumbers);
+ FormatException(TO_CDADDR(p_Object), bLineNumbers);
}
// Are there nested exceptions?
@@ -2762,7 +2762,7 @@ DECLARE_API(PrintException)
}
ExtOut("\nNested exception -------------------------------------------------------------\n");
- Status = FormatException((DWORD_PTR) obj, bLineNumbers);
+ Status = FormatException(obj, bLineNumbers);
if (Status != S_OK)
{
return Status;
@@ -3175,7 +3175,7 @@ DECLARE_API(DumpPermissionSet)
{
INIT_API();
MINIDUMP_NOT_SUPPORTED();
-
+
DWORD_PTR p_Object = NULL;
CMDValue arg[] =
@@ -3524,7 +3524,7 @@ void PrintRuntimeTypes(DWORD_PTR objAddr,size_t Size,DWORD_PTR methodTable,LPVOI
if (_wcscmp(g_mdName, W("System.RuntimeType")) == 0)
{
pArgs->mtOfRuntimeType = methodTable;
- pArgs->handleFieldOffset = GetObjFieldOffset(objAddr, methodTable, W("m_handle"));
+ pArgs->handleFieldOffset = GetObjFieldOffset(TO_CDADDR(objAddr), TO_CDADDR(methodTable), W("m_handle"));
if (pArgs->handleFieldOffset <= 0)
ExtOut("Error getting System.RuntimeType.m_handle offset\n");
@@ -13798,7 +13798,7 @@ HRESULT AppendExceptionInfo(CLRDATA_ADDRESS cdaObj,
}
BOOL bAsync = bGotExcData ? IsAsyncException(excData)
- : IsAsyncException(TO_TADDR(cdaObj), TO_TADDR(objData.MethodTable));
+ : IsAsyncException(cdaObj, objData.MethodTable);
DWORD_PTR arrayPtr;
if (bGotExcData)