Skip to content

Commit f765247

Browse files
committed
Address review comments
1 parent 4549649 commit f765247

File tree

4 files changed

+36
-60
lines changed

4 files changed

+36
-60
lines changed

llvm/include/llvm/IR/DebugInfoMetadata.h

Lines changed: 16 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -975,6 +975,12 @@ class DIDerivedType : public DIType {
975975
public:
976976
/// Pointer authentication (__ptrauth) metadata.
977977
struct PtrAuthData {
978+
// RawData layout:
979+
// - Bits 0..3: Key
980+
// - Bit 4: IsAddressDiscriminated
981+
// - Bits 5..20: ExtraDiscriminator
982+
// - Bit 21: IsaPointer
983+
// - Bit 22: AuthenticatesNullValues
978984
unsigned RawData;
979985

980986
PtrAuthData(unsigned FromRawData) : RawData(FromRawData) {}
@@ -986,12 +992,6 @@ class DIDerivedType : public DIType {
986992
(IsaPointer ? (1 << 21) : 0) |
987993
(AuthenticatesNullValues ? (1 << 22) : 0);
988994
}
989-
bool operator==(struct PtrAuthData Other) const {
990-
return RawData == Other.RawData;
991-
}
992-
bool operator!=(struct PtrAuthData Other) const {
993-
return !(*this == Other);
994-
}
995995

996996
unsigned Key() { return (RawData >> 0) & 0b1111; }
997997
bool IsAddressDiscriminated() { return (RawData >> 4) & 1; }
@@ -1090,37 +1090,6 @@ class DIDerivedType : public DIType {
10901090

10911091
std::optional<PtrAuthData> getPtrAuthData() const;
10921092

1093-
/// \returns The PointerAuth key.
1094-
std::optional<unsigned> getPtrAuthKey() const {
1095-
if (auto PtrAuthData = getPtrAuthData())
1096-
return PtrAuthData->Key();
1097-
return std::nullopt;
1098-
}
1099-
/// \returns The PointerAuth address discrimination bit.
1100-
std::optional<bool> isPtrAuthAddressDiscriminated() const {
1101-
if (auto PtrAuthData = getPtrAuthData())
1102-
return PtrAuthData->IsAddressDiscriminated();
1103-
return std::nullopt;
1104-
}
1105-
/// \returns The PointerAuth extra discriminator.
1106-
std::optional<unsigned> getPtrAuthExtraDiscriminator() const {
1107-
if (auto PtrAuthData = getPtrAuthData())
1108-
return PtrAuthData->ExtraDiscriminator();
1109-
return std::nullopt;
1110-
}
1111-
/// \returns The PointerAuth IsaPointer bit.
1112-
std::optional<bool> isPtrAuthIsaPointer() const {
1113-
if (auto PtrAuthData = getPtrAuthData())
1114-
return PtrAuthData->IsaPointer();
1115-
return std::nullopt;
1116-
}
1117-
/// \returns The PointerAuth authenticates null values bit.
1118-
std::optional<bool> getPtrAuthAuthenticatesNullValues() const {
1119-
if (auto PtrAuthData = getPtrAuthData())
1120-
return PtrAuthData->AuthenticatesNullValues();
1121-
return std::nullopt;
1122-
}
1123-
11241093
/// Get extra data associated with this derived type.
11251094
///
11261095
/// Class type for pointer-to-members, objective-c property node for ivars,
@@ -1160,6 +1129,16 @@ class DIDerivedType : public DIType {
11601129
}
11611130
};
11621131

1132+
inline bool operator==(DIDerivedType::PtrAuthData Lhs,
1133+
DIDerivedType::PtrAuthData Rhs) {
1134+
return Lhs.RawData == Rhs.RawData;
1135+
}
1136+
1137+
inline bool operator!=(DIDerivedType::PtrAuthData Lhs,
1138+
DIDerivedType::PtrAuthData Rhs) {
1139+
return !(Lhs == Rhs);
1140+
}
1141+
11631142
/// Composite types.
11641143
///
11651144
/// TODO: Detach from DerivedTypeBase (split out MDEnumType?).

llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -803,20 +803,18 @@ void DwarfUnit::constructTypeDIE(DIE &Buffer, const DIDerivedType *DTy) {
803803
if (DTy->getDWARFAddressSpace())
804804
addUInt(Buffer, dwarf::DW_AT_address_class, dwarf::DW_FORM_data4,
805805
*DTy->getDWARFAddressSpace());
806-
if (auto Key = DTy->getPtrAuthKey())
807-
addUInt(Buffer, dwarf::DW_AT_LLVM_ptrauth_key, dwarf::DW_FORM_data1, *Key);
808-
if (auto AddrDisc = DTy->isPtrAuthAddressDiscriminated())
809-
if (AddrDisc.value())
806+
if (auto PtrAuthData = DTy->getPtrAuthData()) {
807+
addUInt(Buffer, dwarf::DW_AT_LLVM_ptrauth_key, dwarf::DW_FORM_data1,
808+
PtrAuthData->Key());
809+
if (PtrAuthData->IsAddressDiscriminated())
810810
addFlag(Buffer, dwarf::DW_AT_LLVM_ptrauth_address_discriminated);
811-
if (auto Disc = DTy->getPtrAuthExtraDiscriminator())
812811
addUInt(Buffer, dwarf::DW_AT_LLVM_ptrauth_extra_discriminator,
813-
dwarf::DW_FORM_data2, *Disc);
814-
if (auto IsaPointer = DTy->isPtrAuthIsaPointer())
815-
if (*IsaPointer)
812+
dwarf::DW_FORM_data2, PtrAuthData->ExtraDiscriminator());
813+
if (PtrAuthData->IsaPointer())
816814
addFlag(Buffer, dwarf::DW_AT_LLVM_ptrauth_isa_pointer);
817-
if (auto AuthenticatesNullValues = DTy->getPtrAuthAuthenticatesNullValues())
818-
if (*AuthenticatesNullValues)
815+
if (PtrAuthData->AuthenticatesNullValues())
819816
addFlag(Buffer, dwarf::DW_AT_LLVM_ptrauth_authenticates_null_values);
817+
}
820818
}
821819

822820
void DwarfUnit::constructSubprogramArguments(DIE &Buffer, DITypeRefArray Args) {

llvm/lib/IR/AsmWriter.cpp

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2135,17 +2135,16 @@ static void writeDIDerivedType(raw_ostream &Out, const DIDerivedType *N,
21352135
Printer.printInt("dwarfAddressSpace", *DWARFAddressSpace,
21362136
/* ShouldSkipZero */ false);
21372137
Printer.printMetadata("annotations", N->getRawAnnotations());
2138-
if (auto Key = N->getPtrAuthKey())
2139-
Printer.printInt("ptrAuthKey", *Key);
2140-
if (auto AddrDisc = N->isPtrAuthAddressDiscriminated())
2141-
Printer.printBool("ptrAuthIsAddressDiscriminated", *AddrDisc);
2142-
if (auto Disc = N->getPtrAuthExtraDiscriminator())
2143-
Printer.printInt("ptrAuthExtraDiscriminator", *Disc);
2144-
if (auto IsaPointer = N->isPtrAuthIsaPointer())
2145-
Printer.printBool("ptrAuthIsaPointer", *IsaPointer);
2146-
if (auto AuthenticatesNullValues = N->getPtrAuthAuthenticatesNullValues())
2138+
if (auto PtrAuthData = N->getPtrAuthData()) {
2139+
Printer.printInt("ptrAuthKey", PtrAuthData->Key());
2140+
Printer.printBool("ptrAuthIsAddressDiscriminated",
2141+
PtrAuthData->IsAddressDiscriminated());
2142+
Printer.printInt("ptrAuthExtraDiscriminator",
2143+
PtrAuthData->ExtraDiscriminator());
2144+
Printer.printBool("ptrAuthIsaPointer", PtrAuthData->IsaPointer());
21472145
Printer.printBool("ptrAuthAuthenticatesNullValues",
2148-
*AuthenticatesNullValues);
2146+
PtrAuthData->AuthenticatesNullValues());
2147+
}
21492148
Out << ")";
21502149
}
21512150

llvm/unittests/IR/MetadataTest.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1975,9 +1975,9 @@ TEST_F(DIDerivedTypeTest, getWithLargeValues) {
19751975
UINT64_MAX, UINT32_MAX - 1, UINT64_MAX - 2, UINT32_MAX - 3,
19761976
DIDerivedType::PtrAuthData(7, true, 0xffff, true, false), Flags,
19771977
ExtraData);
1978-
EXPECT_EQ(7U, *N1->getPtrAuthKey());
1979-
EXPECT_EQ(true, *N1->isPtrAuthAddressDiscriminated());
1980-
EXPECT_EQ(0xffffU, *N1->getPtrAuthExtraDiscriminator());
1978+
EXPECT_EQ(7U, N1->getPtrAuthData()->Key());
1979+
EXPECT_EQ(true, N1->getPtrAuthData()->IsAddressDiscriminated());
1980+
EXPECT_EQ(0xffffU, N1->getPtrAuthData()->ExtraDiscriminator());
19811981
}
19821982

19831983
typedef MetadataTest DICompositeTypeTest;

0 commit comments

Comments
 (0)