SWDEV-470698 - fix formatting, add format check workflow (#657)
This commit is contained in:
committed by
GitHub
parent
5840940caa
commit
f7338717ae
@@ -33,10 +33,9 @@
|
||||
// Functions defined in devhcprintf.cpp
|
||||
namespace amd {
|
||||
void handlePrintfDelayed(const uint64_t* input, uint64_t len, uint64_t control);
|
||||
bool populateFormatStringHashMap(
|
||||
const std::vector<device::PrintfInfo> &printfInfo,
|
||||
std::map<uint64_t, std::string> &strMap);
|
||||
} // namespace amd
|
||||
bool populateFormatStringHashMap(const std::vector<device::PrintfInfo>& printfInfo,
|
||||
std::map<uint64_t, std::string>& strMap);
|
||||
} // namespace amd
|
||||
|
||||
namespace amd::pal {
|
||||
|
||||
@@ -264,8 +263,7 @@ size_t PrintfDbg::outputArgument(const std::string& fmt, bool printFloat, size_t
|
||||
const unsigned char* argumentStr = reinterpret_cast<const unsigned char*>(argument);
|
||||
amd::Os::printf(fmt.data(), argumentStr);
|
||||
// copiedBytes = strlen(argumentStr)
|
||||
while (argumentStr[copiedBytes++] != 0)
|
||||
;
|
||||
while (argumentStr[copiedBytes++] != 0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -282,8 +280,7 @@ size_t PrintfDbg::outputArgument(const std::string& fmt, bool printFloat, size_t
|
||||
const char* str = reinterpret_cast<const char*>(argument);
|
||||
amd::Os::printf(fmt.data(), str);
|
||||
// Find the string length
|
||||
while (str[copiedBytes++] != 0)
|
||||
;
|
||||
while (str[copiedBytes++] != 0);
|
||||
} break;
|
||||
case 1:
|
||||
amd::Os::printf(fmt.data(), *(reinterpret_cast<const unsigned char*>(argument)));
|
||||
@@ -291,9 +288,9 @@ size_t PrintfDbg::outputArgument(const std::string& fmt, bool printFloat, size_t
|
||||
case 2:
|
||||
case 4:
|
||||
if (printFloat) {
|
||||
const float fArg = size == 2 ?
|
||||
amd::half2float(*(reinterpret_cast<const uint16_t *>(argument))) :
|
||||
*(reinterpret_cast<const float *>(argument));
|
||||
const float fArg = size == 2
|
||||
? amd::half2float(*(reinterpret_cast<const uint16_t*>(argument)))
|
||||
: *(reinterpret_cast<const float*>(argument));
|
||||
static const char* fSpecifiers = "eEfgGa";
|
||||
std::string fmtF = fmt;
|
||||
size_t posS = fmtF.find_first_of("%");
|
||||
@@ -330,13 +327,13 @@ size_t PrintfDbg::outputArgument(const std::string& fmt, bool printFloat, size_t
|
||||
hhFmt.erase(hhFmt.find_first_of("h"), 2);
|
||||
amd::Os::printf(hhFmt.data(), *(reinterpret_cast<const unsigned char*>(argument)));
|
||||
} else if (hlModifier) {
|
||||
amd::Os::printf(hlFmt.data(), size == 2 ?
|
||||
*(reinterpret_cast<const uint16_t *>(argument)):
|
||||
*(reinterpret_cast<const uint32_t *>(argument)));
|
||||
amd::Os::printf(hlFmt.data(),
|
||||
size == 2 ? *(reinterpret_cast<const uint16_t*>(argument))
|
||||
: *(reinterpret_cast<const uint32_t*>(argument)));
|
||||
} else {
|
||||
amd::Os::printf(fmt.data(), size == 2 ?
|
||||
*(reinterpret_cast<const uint16_t *>(argument)):
|
||||
*(reinterpret_cast<const uint32_t *>(argument)));
|
||||
amd::Os::printf(fmt.data(),
|
||||
size == 2 ? *(reinterpret_cast<const uint16_t*>(argument))
|
||||
: *(reinterpret_cast<const uint32_t*>(argument)));
|
||||
}
|
||||
}
|
||||
break;
|
||||
@@ -409,8 +406,7 @@ void PrintfDbg::outputDbgBuffer(const device::PrintfInfo& info, const uint32_t*
|
||||
}
|
||||
break;
|
||||
} else if (pos < str.length()) {
|
||||
outputArgument(sepStr, false, ConstStr,
|
||||
str.substr(pos).data());
|
||||
outputArgument(sepStr, false, ConstStr, str.substr(pos).data());
|
||||
}
|
||||
} while (posStart != std::string::npos);
|
||||
|
||||
@@ -477,8 +473,7 @@ void PrintfDbg::outputDbgBuffer(const device::PrintfInfo& info, const uint32_t*
|
||||
outputArgument(sepStr, false, ConstStr, Separator);
|
||||
|
||||
// Output the next element
|
||||
outputArgument(elementStr, printFloat, elemSize,
|
||||
&t[k + e * elemSize]);
|
||||
outputArgument(elementStr, printFloat, elemSize, &t[k + e * elemSize]);
|
||||
}
|
||||
i += (amd::alignUp(info.arguments_[j], sizeof(uint32_t))) / sizeof(uint32_t);
|
||||
}
|
||||
@@ -643,12 +638,11 @@ bool PrintfDbgHSA::output(VirtualGPU& gpu, bool printfEnabled,
|
||||
|
||||
// Populate string map with hashes and actual
|
||||
// format strings.
|
||||
if(!amd::populateFormatStringHashMap(printfInfo, StrMap))
|
||||
return false;
|
||||
if (!amd::populateFormatStringHashMap(printfInfo, StrMap)) return false;
|
||||
|
||||
while (sbt < copySize) {
|
||||
auto controlDword = *BufferForHIP++;
|
||||
uint64_t nextOffset = controlDword >> 2;
|
||||
uint64_t nextOffset = controlDword >> 2;
|
||||
|
||||
if (sbt + nextOffset > bufSize) {
|
||||
break; // Need new portion of data in staging buffer
|
||||
@@ -670,25 +664,22 @@ bool PrintfDbgHSA::output(VirtualGPU& gpu, bool printfEnabled,
|
||||
BufferLen = ArgsLen + amd::alignUp(StrLenWithNull, sizeof(uint64_t));
|
||||
PBuffer.resize(BufferLen);
|
||||
memcpy(PBuffer.data(), Str.c_str(), StrLenWithNull);
|
||||
memset(PBuffer.data() + Str.size(), 0, 8 - (StrLenWithNull % 8 ));
|
||||
memcpy(PBuffer.data() + amd::alignUp(StrLenWithNull, sizeof(uint64_t)),
|
||||
PB, ArgsLen);
|
||||
}
|
||||
else {
|
||||
memset(PBuffer.data() + Str.size(), 0, 8 - (StrLenWithNull % 8));
|
||||
memcpy(PBuffer.data() + amd::alignUp(StrLenWithNull, sizeof(uint64_t)), PB, ArgsLen);
|
||||
} else {
|
||||
// Process Non constant format string case.
|
||||
// Here, The buffer itself contains the actual
|
||||
// format string and hence just copy the contents
|
||||
// of format string and arguments into a temporary
|
||||
// buffer
|
||||
BufferLen = nextOffset - /*ControlDWord*/4;
|
||||
BufferLen = nextOffset - /*ControlDWord*/ 4;
|
||||
PBuffer.resize(BufferLen);
|
||||
memcpy(PBuffer.data(), BufferForHIP, nextOffset);
|
||||
}
|
||||
|
||||
// Handle printing
|
||||
amd::handlePrintfDelayed((uint64_t*)PBuffer.data(), BufferLen / 8,
|
||||
controlDword);
|
||||
BufferForHIP += (nextOffset / 4) - /*ControlDWord*/1;
|
||||
amd::handlePrintfDelayed((uint64_t*)PBuffer.data(), BufferLen / 8, controlDword);
|
||||
BufferForHIP += (nextOffset / 4) - /*ControlDWord*/ 1;
|
||||
sbt += nextOffset;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user