SWDEV-299162 - Use new comgr API to demangle names

Change-Id: I9e34518de94db30c345cd03c92801b8424b4e446


[ROCm/clr commit: 0faf1244b5]
Bu işleme şunda yer alıyor:
Jatin Chaudhary
2021-09-01 01:35:39 -07:00
işlemeyi yapan: Jatin Chaudhary
ebeveyn 0c08bbf838
işleme 3231b56cbc
+16 -38
Dosyayı Görüntüle
@@ -85,42 +85,9 @@ uint32_t ProgramState::addNameExpression(const char* name_expression) {
return nameExpresssion_.size();
}
char* demangle(const char* loweredName) {
if (!loweredName) {
return nullptr;
}
#if __linux__
int status = 0;
char* demangledName = DEMANGLE(loweredName, nullptr, nullptr, &status);
if (status != 0) {
LogPrintfError("Cannot demangle loweredName: %s \n", loweredName);
return nullptr;
}
#elif defined(_WIN32)
char* demangledName = (char*)malloc(UNDECORATED_SIZE);
if (!UnDecorateSymbolName(loweredName, demangledName,
UNDECORATED_SIZE/ sizeof(*demangledName), UNDNAME_COMPLETE))
{
free(demangledName);
LogPrintfError("Cannot undecorate loweredName: %s demangledName: %s \n",
loweredName, demangledName);
return nullptr;
}
#else
#error "Only Linux and Windows are supported"
#endif // __linux__
return demangledName;
}
static std::string handleMangledName(std::string name) {
std::string loweredName;
char* demangled = demangle(name.c_str());
loweredName.assign(demangled == nullptr ? std::string() : demangled);
free(demangled);
static std::string handleMangledName(std::string loweredName) {
if (loweredName.empty()) {
return name;
return loweredName;
}
if (loweredName.find(".kd") != std::string::npos) {
@@ -362,13 +329,24 @@ hiprtcResult hiprtcGetLoweredName(hiprtcProgram prog, const char* name_expressio
HIPRTC_RETURN(HIPRTC_ERROR_COMPILATION);
}
for (auto& name : mangledNames) {
std::string demangledName = handleMangledName(name);
std::vector<std::string> demangledNames;
for (const auto& name : mangledNames) {
std::string demangledName;
if (!dev_program->getDemangledName(name, demangledName)) {
LogPrintfError("Unable to demangle name: %s \n", name.c_str());
HIPRTC_RETURN(HIPRTC_ERROR_COMPILATION);
}
demangledNames.push_back(demangledName);
}
for(size_t i = 0; i < demangledNames.size(); i++) {
std::string demangledName = handleMangledName(demangledNames[i]);
demangledName.erase(std::remove_if(demangledName.begin(), demangledName.end(),
[](unsigned char c) { return std::isspace(c); }),
demangledName.end());
if (demangledName == strippedNameNoSpace) {
it->second.second.assign(name);
it->second.second.assign(mangledNames[i]);
break;
}
}