summaryrefslogtreecommitdiffstats
path: root/src/testlib/qtestcrashhandler_unix.cpp
diff options
context:
space:
mode:
authorThiago Macieira <[email protected]>2025-05-14 18:39:22 -0700
committerThiago Macieira <[email protected]>2025-05-23 20:36:45 -0700
commitee04a324ce2d520f5233c5b10315ef8a45142997 (patch)
treec04847cd4625a48d6fe06a0172e33094b8313e32 /src/testlib/qtestcrashhandler_unix.cpp
parenta0c7ca37736336c6b0ab0c2bf0523bbf05313298 (diff)
QTest::CrashHandler: add asyncSafeToHexString()
Extracted from existing code; I'm going to need it for some GDB/LLDB commands in an upcoming commit. Change-Id: I7bdb7ef287ecd924df5cfffdc5aa3617540f7756 Reviewed-by: Edward Welbourne <[email protected]> Reviewed-by: Ahmad Samir <[email protected]>
Diffstat (limited to 'src/testlib/qtestcrashhandler_unix.cpp')
-rw-r--r--src/testlib/qtestcrashhandler_unix.cpp23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/testlib/qtestcrashhandler_unix.cpp b/src/testlib/qtestcrashhandler_unix.cpp
index 8a24b96e3dc..9bc0fd2fa9b 100644
--- a/src/testlib/qtestcrashhandler_unix.cpp
+++ b/src/testlib/qtestcrashhandler_unix.cpp
@@ -184,6 +184,20 @@ std::string_view asyncSafeToString(int n, AsyncSafeIntBuffer &&result = Qt::Unin
#endif
return std::string_view(result.array.data(), ptr - result.array.data());
};
+
+std::string_view asyncSafeToHexString(quintptr u, char *ptr)
+{
+ // We format with leading zeroes so the output is of fixed length.
+ // Formatting to shorter is more complex and unnecessary here (unlike
+ // decimals above).
+ int shift = sizeof(quintptr) * 8 - 4;
+ ptr[0] = '0';
+ ptr[1] = 'x';
+ for (size_t i = 0; i < sizeof(quintptr) * 2; ++i, shift -= 4)
+ ptr[i + 2] = QtMiscUtils::toHexLower(u >> shift);
+
+ return std::string_view(ptr, sizeof(quintptr) * 2 + 2);
+}
} // unnamed namespace
namespace QTest {
@@ -422,15 +436,12 @@ printSentSignalInfo(T *info)
template <typename T> static std::enable_if_t<sizeof(std::declval<T>().si_addr) >= 1>
printCrashingSignalInfo(T *info)
{
- using HexString = std::array<char, sizeof(quintptr) * 2>;
+ using HexString = std::array<char, sizeof(quintptr) * 2 + 2>;
auto toHexString = [](quintptr u, HexString &&r = {}) {
- int shift = sizeof(quintptr) * 8 - 4;
- for (size_t i = 0; i < sizeof(quintptr) * 2; ++i, shift -= 4)
- r[i] = QtMiscUtils::toHexLower(u >> shift);
- return std::string_view(r.data(), r.size());
+ return asyncSafeToHexString(u, r.data());
};
writeToStderr(", code ", asyncSafeToString(info->si_code),
- ", for address 0x", toHexString(quintptr(info->si_addr)));
+ ", for address ", toHexString(quintptr(info->si_addr)));
}
[[maybe_unused]] static void printCrashingSignalInfo(...) {}