in Exdi/exdigdbsrv/GdbSrvControllerLib/XmlDataHelpers.cpp [1205:1267]
bool XmlDataGdbServerRegisterFile::HandleTargetFileTags(_In_ TAG_ATTR_LIST* const pTagAttrList,
_Out_ ConfigExdiGdbSrvData* pConfigTable)
{
HRESULT hr;
bool isDone = false;
ConfigTargetDescriptionFileEntry targetFileData = { 0 };
if (IsTargetDescriptionFile(pTagAttrList->tagName))
{
hr = XmlDataHelpers::GetXmlTagAttributeValues(pTagAttrList, attrTargetDescriptionArchitectureName, ARRAYSIZE(attrTargetDescriptionArchitectureName),
sizeof(ConfigTargetDescriptionFileEntry), static_cast<void*>(&targetFileData));
if (SUCCEEDED(hr))
{
isDone = SetFileTargetArchitecture(targetFileData.targetArchitecture, pConfigTable);
if (!isDone)
{
if (targetFileData.targetArchitecture[0] == '\x0')
{
pConfigTable->file.isTargetTagEmpty = true;
}
isDone = true;
}
}
}
if (IsRegisterFileReference(pTagAttrList->tagName))
{
hr = XmlDataHelpers::GetXmlTagAttributeValues(pTagAttrList, attrTargetDescriptionRegisterFile, ARRAYSIZE(attrTargetDescriptionRegisterFile),
sizeof(ConfigTargetDescriptionFileEntry), static_cast<void*>(&targetFileData));
if (SUCCEEDED(hr))
{
if (pConfigTable->file.registerGroupFiles.get() == nullptr)
{
pConfigTable->file.registerGroupFiles.reset(new(std::nothrow) targetDescriptionFilesMap());
if (pConfigTable->file.registerGroupFiles == nullptr)
{
throw _com_error(E_OUTOFMEMORY);
}
}
isDone = true;
if (wcsstr(targetFileData.registerFile, L"core") != nullptr || wcsstr(targetFileData.registerFile, L"general") != nullptr ||
wcsstr(targetFileData.registerFile, L"i386-64") != nullptr)
{
pConfigTable->file.registerGroupFiles->insert({ RegisterGroupType::CORE_REGS, move(targetFileData.registerFile) });
}
else if (wcsstr(targetFileData.registerFile, L"system") != nullptr || wcsstr(targetFileData.registerFile, L"banked") != nullptr)
{
pConfigTable->file.registerGroupFiles->insert({ RegisterGroupType::SYSTEM_REGS, move(targetFileData.registerFile) });
}
else if (wcsstr(targetFileData.registerFile, L"fpu") != nullptr || wcsstr(targetFileData.registerFile, L"simdfp") != nullptr)
{
pConfigTable->file.registerGroupFiles->insert({ RegisterGroupType::FPU_REGS, move(targetFileData.registerFile) });
}
else
{
assert(false);
isDone = false;
}
}
}
return isDone;
}