Skip to content

Commit 8b56262

Browse files
committed
Address review comments
1 parent a070e3c commit 8b56262

File tree

1 file changed

+26
-37
lines changed

1 file changed

+26
-37
lines changed

llvm/tools/llvm-readobj/ELFDumper.cpp

Lines changed: 26 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@
6161
#include "llvm/Support/SystemZ/zOSSupport.h"
6262
#include "llvm/Support/raw_ostream.h"
6363
#include <algorithm>
64+
#include <array>
6465
#include <cinttypes>
6566
#include <cstddef>
6667
#include <cstdint>
@@ -5119,7 +5120,7 @@ static bool printAArch64PAuthABICoreInfo(raw_ostream &OS, uint32_t DataSize,
51195120
uint64_t Version =
51205121
support::endian::read64<ELFT::TargetEndianness>(Desc.data() + 8);
51215122

5122-
std::string PlatformDesc = [Platform]() {
5123+
const char *PlatformDesc = [Platform]() {
51235124
switch (Platform) {
51245125
case AARCH64_PAUTH_PLATFORM_INVALID:
51255126
return "invalid";
@@ -5137,47 +5138,35 @@ static bool printAArch64PAuthABICoreInfo(raw_ostream &OS, uint32_t DataSize,
51375138
return "";
51385139
if (Version >= (1 << (AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_LAST + 1)))
51395140
return "unknown";
5140-
return std::string("") +
5141-
((Version &
5142-
(1 << AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_INTRINSICS))
5143-
? ""
5144-
: "!") +
5145-
"PointerAuthIntrinsics, " +
5146-
((Version & (1 << AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_CALLS))
5147-
? ""
5148-
: "!") +
5149-
"PointerAuthCalls, " +
5150-
((Version & (1 << AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_RETURNS))
5151-
? ""
5152-
: "!") +
5153-
"PointerAuthReturns, " +
5154-
((Version &
5155-
(1 << AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_AUTHTRAPS))
5156-
? ""
5157-
: "!") +
5158-
"PointerAuthAuthTraps, " +
5159-
((Version &
5160-
(1 << AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_VPTRADDRDISCR))
5161-
? ""
5162-
: "!") +
5163-
"PointerAuthVTPtrAddressDiscrimination, " +
5164-
((Version &
5165-
(1 << AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_VPTRTYPEDISCR))
5166-
? ""
5167-
: "!") +
5168-
"PointerAuthVTPtrTypeDiscrimination, " +
5169-
((Version &
5170-
(1 << AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_INITFINI))
5171-
? ""
5172-
: "!") +
5173-
"PointerAuthInitFini";
5141+
5142+
std::array<StringRef, AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_LAST + 1>
5143+
Flags;
5144+
Flags[AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_INTRINSICS] = "Intrinsics";
5145+
Flags[AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_CALLS] = "Calls";
5146+
Flags[AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_RETURNS] = "Returns";
5147+
Flags[AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_AUTHTRAPS] = "AuthTraps";
5148+
Flags[AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_VPTRADDRDISCR] =
5149+
"VTPtrAddressDiscrimination";
5150+
Flags[AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_VPTRTYPEDISCR] =
5151+
"VTPtrTypeDiscrimination";
5152+
Flags[AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_INITFINI] = "InitFini";
5153+
51745154
static_assert(AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_INITFINI ==
51755155
AARCH64_PAUTH_PLATFORM_LLVM_LINUX_VERSION_LAST,
51765156
"Update when new enum items are defined");
5157+
5158+
std::string Desc;
5159+
for (uint32_t I = 0; I < Flags.size(); ++I) {
5160+
if (!(Version & (1 << I)))
5161+
Desc += '!';
5162+
Desc += Twine("PointerAuth" + Flags[I] + ", ").str();
5163+
}
5164+
Desc.resize(Desc.size() - 2); // Trim last ", "
5165+
return Desc;
51775166
}();
51785167

5179-
OS << format("platform 0x%x (%s), version 0x%x", Platform,
5180-
PlatformDesc.c_str(), Version);
5168+
OS << format("platform 0x%x (%s), version 0x%x", Platform, PlatformDesc,
5169+
Version);
51815170
if (!VersionDesc.empty())
51825171
OS << format(" (%s)", VersionDesc.c_str());
51835172

0 commit comments

Comments
 (0)