Skip to content

Commit d17f9d8

Browse files
authored
Merge pull request #9425 from augusto2112/remove-spare-bits-debug
[DebugInfo] Remove spare bits mask from LLVM IR and DWARF
2 parents 94f2860 + 0fece06 commit d17f9d8

File tree

16 files changed

+81
-324
lines changed

16 files changed

+81
-324
lines changed

lldb/source/Plugins/LanguageRuntime/Swift/ReflectionContext.cpp

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,6 @@ struct DescriptorFinderForwarder : public swift::reflection::DescriptorFinder {
4545
return nullptr;
4646
}
4747

48-
std::unique_ptr<swift::reflection::MultiPayloadEnumDescriptorBase>
49-
getMultiPayloadEnumDescriptor(const swift::reflection::TypeRef *TR) override {
50-
if (!m_descriptor_finders.empty() && shouldConsultDescriptorFinder())
51-
return m_descriptor_finders.back()->getMultiPayloadEnumDescriptor(TR);
52-
return nullptr;
53-
}
54-
5548
void PushExternalDescriptorFinder(
5649
swift::reflection::DescriptorFinder *descriptor_finder) {
5750
m_descriptor_finders.push_back(descriptor_finder);

lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserSwift.h

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,10 +89,6 @@ class DWARFASTParserSwift : public lldb_private::plugin::dwarf::DWARFASTParser,
8989
std::unique_ptr<swift::reflection::BuiltinTypeDescriptorBase>
9090
getBuiltinTypeDescriptor(const swift::reflection::TypeRef *TR) override;
9191

92-
/// Returns a builtin descriptor constructed from DWARF info.
93-
std::unique_ptr<swift::reflection::MultiPayloadEnumDescriptorBase>
94-
getMultiPayloadEnumDescriptor(const swift::reflection::TypeRef *TR) override;
95-
9692
private:
9793
/// Returns the canonical demangle tree of a die's type.
9894
NodePointer GetCanonicalDemangleTree(DWARFDIE &die);

lldb/source/Plugins/SymbolFile/DWARF/DWARFASTParserSwiftDescriptorFinder.cpp

Lines changed: 0 additions & 126 deletions
Original file line numberDiff line numberDiff line change
@@ -280,53 +280,6 @@ class DWARFFieldDescriptorImpl : public swift::reflection::FieldDescriptorBase {
280280
return payload_fields;
281281
}
282282
};
283-
284-
class DWARFMultiPayloadEnumDescriptorImpl
285-
: public swift::reflection::MultiPayloadEnumDescriptorBase {
286-
ConstString m_mangled_name;
287-
DIERef m_die_ref;
288-
std::vector<uint8_t> m_spare_bits_mask;
289-
uint64_t m_byte_offset;
290-
291-
public:
292-
~DWARFMultiPayloadEnumDescriptorImpl() override = default;
293-
294-
DWARFMultiPayloadEnumDescriptorImpl(ConstString mangled_name, DIERef die_ref,
295-
std::vector<uint8_t> &&spare_bits_mask,
296-
uint64_t byte_offset)
297-
: swift::reflection::MultiPayloadEnumDescriptorBase(),
298-
m_mangled_name(mangled_name), m_die_ref(die_ref),
299-
m_spare_bits_mask(std::move(spare_bits_mask)),
300-
m_byte_offset(byte_offset) {}
301-
302-
llvm::StringRef getMangledTypeName() override {
303-
return m_mangled_name.GetStringRef();
304-
}
305-
306-
uint32_t getContentsSizeInWords() const override {
307-
return m_spare_bits_mask.size() / 4;
308-
}
309-
310-
size_t getSizeInBytes() const override { return m_spare_bits_mask.size(); }
311-
312-
uint32_t getFlags() const override { return usesPayloadSpareBits(); }
313-
314-
bool usesPayloadSpareBits() const override {
315-
return !m_spare_bits_mask.empty();
316-
}
317-
318-
uint32_t getPayloadSpareBitMaskByteOffset() const override {
319-
return m_byte_offset;
320-
}
321-
322-
uint32_t getPayloadSpareBitMaskByteCount() const override {
323-
return getSizeInBytes();
324-
}
325-
326-
const uint8_t *getPayloadSpareBits() const override {
327-
return m_spare_bits_mask.data();
328-
}
329-
};
330283
} // namespace
331284

332285
/// Constructs a builtin type descriptor from DWARF information.
@@ -374,85 +327,6 @@ DWARFASTParserSwift::getBuiltinTypeDescriptor(
374327
type.GetMangledTypeName());
375328
}
376329

377-
std::unique_ptr<swift::reflection::MultiPayloadEnumDescriptorBase>
378-
DWARFASTParserSwift::getMultiPayloadEnumDescriptor(
379-
const swift::reflection::TypeRef *TR) {
380-
assert(ModuleList::GetGlobalModuleListProperties()
381-
.GetSwiftEnableFullDwarfDebugging() !=
382-
lldb_private::AutoBool::False &&
383-
"Full DWARF debugging for Swift is disabled!");
384-
385-
auto pair = getTypeAndDie(m_swift_typesystem, TR);
386-
if (!pair)
387-
return nullptr;
388-
389-
auto [type, die] = *pair;
390-
if (!die)
391-
return nullptr;
392-
393-
auto kind = getFieldDescriptorKindForDie(type);
394-
if (!kind)
395-
return nullptr;
396-
397-
auto child_die = die.GetFirstChild();
398-
auto bit_offset =
399-
child_die.GetAttributeValueAsUnsigned(llvm::dwarf::DW_AT_bit_offset, 0);
400-
401-
auto byte_offset = (bit_offset + 7) / 8;
402-
403-
const auto &attributes = child_die.GetAttributes();
404-
auto spare_bits_mask_idx =
405-
attributes.FindAttributeIndex(llvm::dwarf::DW_AT_APPLE_spare_bits_mask);
406-
if (spare_bits_mask_idx == UINT32_MAX)
407-
return nullptr;
408-
409-
DWARFFormValue form_value;
410-
attributes.ExtractFormValueAtIndex(spare_bits_mask_idx, form_value);
411-
412-
if (!form_value.IsValid()) {
413-
if (auto *log = GetLog(LLDBLog::Types)) {
414-
std::stringstream ss;
415-
TR->dump(ss);
416-
LLDB_LOG(log,
417-
"Could not produce MultiPayloadEnumTypeInfo for typeref: {0}",
418-
ss.str());
419-
}
420-
return nullptr;
421-
}
422-
// If there's a block data, this is a number bigger than 64 bits already
423-
// encoded as an array.
424-
if (form_value.BlockData()) {
425-
uint64_t block_length = form_value.Unsigned();
426-
std::vector<uint8_t> bytes(form_value.BlockData(),
427-
form_value.BlockData() + block_length);
428-
return std::make_unique<DWARFMultiPayloadEnumDescriptorImpl>(
429-
type.GetMangledTypeName(), *die.GetDIERef(),
430-
std::move(bytes), byte_offset);
431-
}
432-
433-
// If there is no block data, the spare bits mask is encoded as a single 64
434-
// bit number. Convert this to a byte array with only the amount of bytes
435-
// necessary to cover the whole number (see
436-
// MultiPayloadEnumDescriptorBuilder::layout on GenReflection.cpp for a
437-
// similar calculation when emitting this into metadata).
438-
llvm::APInt bits(64, form_value.Unsigned());
439-
auto bitsInMask = bits.getActiveBits();
440-
uint32_t bytesInMask = (bitsInMask + 7) / 8;
441-
auto wordsInMask = (bytesInMask + 3) / 4;
442-
bits = bits.zextOrTrunc(wordsInMask * 32);
443-
444-
std::vector<uint8_t> bytes;
445-
for (size_t i = 0; i < bytesInMask; ++i) {
446-
uint8_t byte = bits.extractBitsAsZExtValue(8, 0);
447-
bytes.push_back(byte);
448-
bits.lshrInPlace(8);
449-
}
450-
451-
return std::make_unique<DWARFMultiPayloadEnumDescriptorImpl>(
452-
type.GetMangledTypeName(), *die.GetDIERef(), std::move(bytes),
453-
byte_offset);
454-
}
455-
456330
namespace {
457331
DWARFDIE FindSuperClassDIE(DWARFDIE &die) {
458332
const auto inheritance_die_it =

llvm/include/llvm/BinaryFormat/Dwarf.def

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -636,7 +636,6 @@ HANDLE_DW_AT(0x3fee, APPLE_objc_direct, 0, APPLE)
636636
HANDLE_DW_AT(0x3fef, APPLE_sdk, 0, APPLE)
637637
HANDLE_DW_AT(0x3ff0, APPLE_origin, 0, APPLE)
638638
HANDLE_DW_AT(0x3ff1, APPLE_num_extra_inhabitants, 0, APPLE)
639-
HANDLE_DW_AT(0x3ff2, APPLE_spare_bits_mask, 0, APPLE)
640639

641640
// Attribute form encodings.
642641
HANDLE_DW_FORM(0x01, addr, 2, DWARF)

llvm/include/llvm/IR/DIBuilder.h

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -533,17 +533,12 @@ namespace llvm {
533533
/// \param Discriminator Discriminant member
534534
/// \param Elements Variant elements.
535535
/// \param UniqueIdentifier A unique identifier for the union.
536-
/// \param OffsetInBits The offset of the variant payload in the variant
537-
/// type.
538-
/// \param SpareBitMask A mask of spare bits of the payload, spare bits are
539-
/// bits that aren't used in any of the variant's cases.
540536
DICompositeType *
541537
createVariantPart(DIScope *Scope, StringRef Name, DIFile *File,
542538
unsigned LineNumber, uint64_t SizeInBits,
543539
uint32_t AlignInBits, DINode::DIFlags Flags,
544540
DIDerivedType *Discriminator, DINodeArray Elements,
545-
StringRef UniqueIdentifier = "",
546-
uint64_t OffsetInBits = 0, APInt SpareBitsMask = APInt());
541+
StringRef UniqueIdentifier = "");
547542

548543
/// Create debugging information for template
549544
/// type parameter.

llvm/include/llvm/IR/DebugInfoMetadata.h

Lines changed: 24 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1172,16 +1172,15 @@ class DICompositeType : public DIType {
11721172
friend class MDNode;
11731173

11741174
unsigned RuntimeLang;
1175-
llvm::APInt SpareBitsMask;
11761175

11771176
DICompositeType(LLVMContext &C, StorageType Storage, unsigned Tag,
11781177
unsigned Line, unsigned RuntimeLang, uint64_t SizeInBits,
11791178
uint32_t AlignInBits, uint64_t OffsetInBits,
1180-
uint32_t NumExtraInhabitants, APInt SpareBitsMask,
1181-
DIFlags Flags, ArrayRef<Metadata *> Ops)
1179+
uint32_t NumExtraInhabitants, DIFlags Flags,
1180+
ArrayRef<Metadata *> Ops)
11821181
: DIType(C, DICompositeTypeKind, Storage, Tag, Line, SizeInBits,
11831182
AlignInBits, OffsetInBits, NumExtraInhabitants, Flags, Ops),
1184-
RuntimeLang(RuntimeLang), SpareBitsMask(SpareBitsMask) {}
1183+
RuntimeLang(RuntimeLang) {}
11851184
~DICompositeType() = default;
11861185

11871186
/// Change fields in place.
@@ -1199,20 +1198,20 @@ class DICompositeType : public DIType {
11991198
getImpl(LLVMContext &Context, unsigned Tag, StringRef Name, Metadata *File,
12001199
unsigned Line, DIScope *Scope, DIType *BaseType, uint64_t SizeInBits,
12011200
uint32_t AlignInBits, uint64_t OffsetInBits, DIType *SpecificationOf,
1202-
uint32_t NumExtraInhabitants, APInt SpareBitsMask, DIFlags Flags,
1203-
DINodeArray Elements, unsigned RuntimeLang, DIType *VTableHolder,
1201+
uint32_t NumExtraInhabitants, DIFlags Flags, DINodeArray Elements,
1202+
unsigned RuntimeLang, DIType *VTableHolder,
12041203
DITemplateParameterArray TemplateParams, StringRef Identifier,
12051204
DIDerivedType *Discriminator, Metadata *DataLocation,
12061205
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
12071206
DINodeArray Annotations, StorageType Storage,
12081207
bool ShouldCreate = true) {
1209-
return getImpl(
1210-
Context, Tag, getCanonicalMDString(Context, Name), File, Line, Scope,
1211-
BaseType, SizeInBits, AlignInBits, OffsetInBits, Flags, Elements.get(),
1212-
RuntimeLang, VTableHolder, TemplateParams.get(),
1213-
getCanonicalMDString(Context, Identifier), Discriminator, DataLocation,
1214-
Associated, Allocated, Rank, Annotations.get(), SpecificationOf,
1215-
NumExtraInhabitants, SpareBitsMask, Storage, ShouldCreate);
1208+
return getImpl(Context, Tag, getCanonicalMDString(Context, Name), File,
1209+
Line, Scope, BaseType, SizeInBits, AlignInBits, OffsetInBits,
1210+
Flags, Elements.get(), RuntimeLang, VTableHolder,
1211+
TemplateParams.get(),
1212+
getCanonicalMDString(Context, Identifier), Discriminator,
1213+
DataLocation, Associated, Allocated, Rank, Annotations.get(),
1214+
SpecificationOf, NumExtraInhabitants, Storage, ShouldCreate);
12161215
}
12171216
static DICompositeType *
12181217
getImpl(LLVMContext &Context, unsigned Tag, MDString *Name, Metadata *File,
@@ -1223,8 +1222,8 @@ class DICompositeType : public DIType {
12231222
MDString *Identifier, Metadata *Discriminator, Metadata *DataLocation,
12241223
Metadata *Associated, Metadata *Allocated, Metadata *Rank,
12251224
Metadata *Annotations, Metadata *SpecificationOf,
1226-
uint32_t NumExtraInhabitants, APInt SpareBitsMask,
1227-
StorageType Storage, bool ShouldCreate = true);
1225+
uint32_t NumExtraInhabitants, StorageType Storage,
1226+
bool ShouldCreate = true);
12281227

12291228
TempDICompositeType cloneImpl() const {
12301229
return getTemporary(
@@ -1234,7 +1233,7 @@ class DICompositeType : public DIType {
12341233
getTemplateParams(), getIdentifier(), getDiscriminator(),
12351234
getRawDataLocation(), getRawAssociated(), getRawAllocated(),
12361235
getRawRank(), getAnnotations(), getSpecificationOf(),
1237-
getNumExtraInhabitants(), getSpareBitsMask());
1236+
getNumExtraInhabitants());
12381237
}
12391238

12401239
public:
@@ -1249,11 +1248,11 @@ class DICompositeType : public DIType {
12491248
Metadata *DataLocation = nullptr, Metadata *Associated = nullptr,
12501249
Metadata *Allocated = nullptr, Metadata *Rank = nullptr,
12511250
DINodeArray Annotations = nullptr, DIType *SpecificationOf = nullptr,
1252-
uint32_t NumExtraInhabitants = 0, APInt SpareBitsMask = APInt()),
1251+
uint32_t NumExtraInhabitants = 0),
12531252
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
1254-
OffsetInBits, SpecificationOf, NumExtraInhabitants, SpareBitsMask, Flags,
1255-
Elements, RuntimeLang, VTableHolder, TemplateParams, Identifier,
1256-
Discriminator, DataLocation, Associated, Allocated, Rank, Annotations))
1253+
OffsetInBits, SpecificationOf, NumExtraInhabitants, Flags, Elements,
1254+
RuntimeLang, VTableHolder, TemplateParams, Identifier, Discriminator,
1255+
DataLocation, Associated, Allocated, Rank, Annotations))
12571256
DEFINE_MDNODE_GET(
12581257
DICompositeType,
12591258
(unsigned Tag, MDString *Name, Metadata *File, unsigned Line,
@@ -1264,12 +1263,11 @@ class DICompositeType : public DIType {
12641263
Metadata *Discriminator = nullptr, Metadata *DataLocation = nullptr,
12651264
Metadata *Associated = nullptr, Metadata *Allocated = nullptr,
12661265
Metadata *Rank = nullptr, Metadata *Annotations = nullptr,
1267-
Metadata *SpecificationOf = nullptr, uint32_t NumExtraInhabitants = 0,
1268-
APInt SpareBitsMask = APInt()),
1266+
Metadata *SpecificationOf = nullptr, uint32_t NumExtraInhabitants = 0),
12691267
(Tag, Name, File, Line, Scope, BaseType, SizeInBits, AlignInBits,
12701268
OffsetInBits, Flags, Elements, RuntimeLang, VTableHolder, TemplateParams,
12711269
Identifier, Discriminator, DataLocation, Associated, Allocated, Rank,
1272-
Annotations, SpecificationOf, NumExtraInhabitants, SpareBitsMask))
1270+
Annotations, SpecificationOf, NumExtraInhabitants))
12731271

12741272
TempDICompositeType clone() const { return cloneImpl(); }
12751273

@@ -1285,7 +1283,7 @@ class DICompositeType : public DIType {
12851283
MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
12861284
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
12871285
uint64_t OffsetInBits, Metadata *SpecificationOf,
1288-
uint32_t NumExtraInhabitants, APInt SpareBitsMask, DIFlags Flags,
1286+
uint32_t NumExtraInhabitants, DIFlags Flags,
12891287
Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
12901288
Metadata *TemplateParams, Metadata *Discriminator,
12911289
Metadata *DataLocation, Metadata *Associated, Metadata *Allocated,
@@ -1307,8 +1305,8 @@ class DICompositeType : public DIType {
13071305
MDString *Name, Metadata *File, unsigned Line, Metadata *Scope,
13081306
Metadata *BaseType, uint64_t SizeInBits, uint32_t AlignInBits,
13091307
uint64_t OffsetInBits, Metadata *SpecificationOf,
1310-
uint32_t NumExtraInhabitants, APInt SpareBitsMask, DIFlags Flags,
1311-
Metadata *Elements, unsigned RuntimeLang, Metadata *VTableHolder,
1308+
uint32_t NumExtraInhabitants, DIFlags Flags, Metadata *Elements,
1309+
unsigned RuntimeLang, Metadata *VTableHolder,
13121310
Metadata *TemplateParams, Metadata *Discriminator,
13131311
Metadata *DataLocation, Metadata *Associated,
13141312
Metadata *Allocated, Metadata *Rank, Metadata *Annotations);
@@ -1325,7 +1323,6 @@ class DICompositeType : public DIType {
13251323
}
13261324
StringRef getIdentifier() const { return getStringOperand(7); }
13271325
unsigned getRuntimeLang() const { return RuntimeLang; }
1328-
const APInt &getSpareBitsMask() const { return SpareBitsMask; }
13291326

13301327
Metadata *getRawBaseType() const { return getOperand(3); }
13311328
Metadata *getRawElements() const { return getOperand(4); }

llvm/lib/AsmParser/LLParser.cpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5433,8 +5433,7 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54335433
OPTIONAL(rank, MDSignedOrMDField, ); \
54345434
OPTIONAL(annotations, MDField, ); \
54355435
OPTIONAL(num_extra_inhabitants, MDUnsignedField, (0, UINT32_MAX)); \
5436-
OPTIONAL(specification_of, MDField, ); \
5437-
OPTIONAL(spare_bits_mask, MDAPSIntField, );
5436+
OPTIONAL(specification_of, MDField, );
54385437
PARSE_MD_FIELDS();
54395438
#undef VISIT_MD_FIELDS
54405439

@@ -5450,11 +5449,10 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54505449
if (auto *CT = DICompositeType::buildODRType(
54515450
Context, *identifier.Val, tag.Val, name.Val, file.Val, line.Val,
54525451
scope.Val, baseType.Val, size.Val, align.Val, offset.Val,
5453-
specification_of.Val, num_extra_inhabitants.Val,
5454-
spare_bits_mask.Val, flags.Val, elements.Val, runtimeLang.Val,
5455-
vtableHolder.Val, templateParams.Val, discriminator.Val,
5456-
dataLocation.Val, associated.Val, allocated.Val, Rank,
5457-
annotations.Val)) {
5452+
specification_of.Val, num_extra_inhabitants.Val, flags.Val,
5453+
elements.Val, runtimeLang.Val, vtableHolder.Val, templateParams.Val,
5454+
discriminator.Val, dataLocation.Val, associated.Val, allocated.Val,
5455+
Rank, annotations.Val)) {
54585456
Result = CT;
54595457
return false;
54605458
}
@@ -5467,8 +5465,7 @@ bool LLParser::parseDICompositeType(MDNode *&Result, bool IsDistinct) {
54675465
size.Val, align.Val, offset.Val, flags.Val, elements.Val,
54685466
runtimeLang.Val, vtableHolder.Val, templateParams.Val, identifier.Val,
54695467
discriminator.Val, dataLocation.Val, associated.Val, allocated.Val, Rank,
5470-
annotations.Val, specification_of.Val, num_extra_inhabitants.Val,
5471-
spare_bits_mask.Val));
5468+
annotations.Val, specification_of.Val, num_extra_inhabitants.Val));
54725469
return false;
54735470
}
54745471

0 commit comments

Comments
 (0)