[llvm] r176838 - Remove support for versioned debug info.
Eric Christopher
echristo at gmail.com
Mon Mar 11 16:47:15 PDT 2013
woot.
Thank you! *crosses off of TODO list*
-eric
On Mon, Mar 11, 2013 at 4:39 PM, David Blaikie <dblaikie at gmail.com> wrote:
> Author: dblaikie
> Date: Mon Mar 11 18:39:23 2013
> New Revision: 176838
>
> URL: http://llvm.org/viewvc/llvm-project?rev=176838&view=rev
> Log:
> Remove support for versioned debug info.
>
> Versioned debug info support has been a burden to maintain & also
> compromised
> current debug info verification by causing test cases testing old debug
> info to
> remain rather than being updated to the latest. It also makes it hard to
> add or
> change the metadata schema by requiring various backwards-compatibility in
> the
> DI* hierarchy.
>
> So it's being removed in preparation for new changes to the schema to tidy
> up
> old/unnecessary fields and add new fields needed for new debug info (well,
> new
> to LLVM at least).
>
> The more surprising part of this is the changes to DI*::Verify - this
> became
> necessary due to the changes to AsmWriter. AsmWriter was relying on the
> version
> test to decide which bits of metadata were actually debug info when
> printing
> the comment annotations. Without the version information the tag numbers
> were
> too common & it would print debug info on random metadata that happened to
> start with an integer that matched a tag number. Instead this change makes
> the
> Verify functions more precise (just adding "number of operands" checks -
> not
> type checking those operands yet) & relies on that to decide which
> metadata is
> debug info metadata.
>
> Modified:
> llvm/trunk/include/llvm/DebugInfo.h
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> llvm/trunk/lib/IR/AsmWriter.cpp
> llvm/trunk/lib/IR/DebugInfo.cpp
>
> Modified: llvm/trunk/include/llvm/DebugInfo.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo.h?rev=176838&r1=176837&r2=176838&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo.h Mon Mar 11 18:39:23 2013
> @@ -96,15 +96,11 @@ namespace llvm {
> explicit DIDescriptor(const DIVariable F);
> explicit DIDescriptor(const DIType F);
>
> - bool Verify() const { return DbgNode != 0; }
> + bool Verify() const;
>
> operator MDNode *() const { return const_cast<MDNode*>(DbgNode); }
> MDNode *operator ->() const { return const_cast<MDNode*>(DbgNode); }
>
> - unsigned getVersion() const {
> - return getUnsignedField(0) & LLVMDebugVersionMask;
> - }
> -
> unsigned getTag() const {
> return getUnsignedField(0) & ~LLVMDebugVersionMask;
> }
> @@ -146,6 +142,7 @@ namespace llvm {
>
> int64_t getLo() const { return getInt64Field(1); }
> int64_t getCount() const { return getInt64Field(2); }
> + bool Verify() const;
> };
>
> /// DIArray - This descriptor holds an array of descriptors.
> @@ -220,10 +217,7 @@ namespace llvm {
> }
> StringRef getFilename() const { return getStringField(1); }
> StringRef getDirectory() const { return getStringField(2); }
> - DICompileUnit getCompileUnit() const{
> - assert (getVersion() <= LLVMDebugVersion10 && "Invalid
> CompileUnit!");
> - return getFieldAs<DICompileUnit>(3);
> - }
> + bool Verify() const;
> };
>
> /// DIEnumerator - A wrapper for an enumerator (e.g. X and Y in 'enum
> {X,Y}').
> @@ -237,6 +231,7 @@ namespace llvm {
>
> StringRef getName() const { return getStringField(1); }
> uint64_t getEnumValue() const { return getUInt64Field(2); }
> + bool Verify() const;
> };
>
> /// DIType - This is a wrapper for a type.
> @@ -257,13 +252,6 @@ namespace llvm {
>
> DIScope getContext() const { return getFieldAs<DIScope>(1); }
> StringRef getName() const { return getStringField(2); }
> - DICompileUnit getCompileUnit() const{
> - assert (getVersion() <= LLVMDebugVersion10 && "Invalid
> getCompileUnit!");
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getFieldAs<DICompileUnit>(3);
> -
> - return getFieldAs<DIFile>(3).getCompileUnit();
> - }
> DIFile getFile() const { return getFieldAs<DIFile>(3); }
> unsigned getLineNumber() const { return getUnsignedField(4); }
> uint64_t getSizeInBits() const { return getUInt64Field(5); }
> @@ -310,15 +298,9 @@ namespace llvm {
> return DbgNode && (isBasicType() || isDerivedType() ||
> isCompositeType());
> }
> StringRef getDirectory() const {
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getCompileUnit().getDirectory();
> -
> return getFieldAs<DIFile>(3).getDirectory();
> }
> StringRef getFilename() const {
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getCompileUnit().getFilename();
> -
> return getFieldAs<DIFile>(3).getFilename();
> }
>
> @@ -375,44 +357,6 @@ namespace llvm {
> return getConstantField(10);
> }
>
> - StringRef getObjCPropertyName() const {
> - if (getVersion() > LLVMDebugVersion11)
> - return StringRef();
> - return getStringField(10);
> - }
> - StringRef getObjCPropertyGetterName() const {
> - assert (getVersion() <= LLVMDebugVersion11 && "Invalid Request");
> - return getStringField(11);
> - }
> - StringRef getObjCPropertySetterName() const {
> - assert (getVersion() <= LLVMDebugVersion11 && "Invalid Request");
> - return getStringField(12);
> - }
> - bool isReadOnlyObjCProperty() {
> - assert (getVersion() <= LLVMDebugVersion11 && "Invalid Request");
> - return (getUnsignedField(13) & dwarf::DW_APPLE_PROPERTY_readonly)
> != 0;
> - }
> - bool isReadWriteObjCProperty() {
> - assert (getVersion() <= LLVMDebugVersion11 && "Invalid Request");
> - return (getUnsignedField(13) & dwarf::DW_APPLE_PROPERTY_readwrite)
> != 0;
> - }
> - bool isAssignObjCProperty() {
> - assert (getVersion() <= LLVMDebugVersion11 && "Invalid Request");
> - return (getUnsignedField(13) & dwarf::DW_APPLE_PROPERTY_assign) !=
> 0;
> - }
> - bool isRetainObjCProperty() {
> - assert (getVersion() <= LLVMDebugVersion11 && "Invalid Request");
> - return (getUnsignedField(13) & dwarf::DW_APPLE_PROPERTY_retain) !=
> 0;
> - }
> - bool isCopyObjCProperty() {
> - assert (getVersion() <= LLVMDebugVersion11 && "Invalid Request");
> - return (getUnsignedField(13) & dwarf::DW_APPLE_PROPERTY_copy) != 0;
> - }
> - bool isNonAtomicObjCProperty() {
> - assert (getVersion() <= LLVMDebugVersion11 && "Invalid Request");
> - return (getUnsignedField(13) & dwarf::DW_APPLE_PROPERTY_nonatomic)
> != 0;
> - }
> -
> /// Verify - Verify that a derived type descriptor is well formed.
> bool Verify() const;
> };
> @@ -457,6 +401,7 @@ namespace llvm {
> }
> unsigned getLineNumber() const { return getUnsignedField(5); }
> unsigned getColumnNumber() const { return getUnsignedField(6); }
> + bool Verify() const;
> };
>
> /// DITemplateValueParameter - This is a wrapper for template value
> parameter.
> @@ -476,6 +421,7 @@ namespace llvm {
> }
> unsigned getLineNumber() const { return getUnsignedField(6); }
> unsigned getColumnNumber() const { return getUnsignedField(7); }
> + bool Verify() const;
> };
>
> /// DISubprogram - This is a wrapper for a subprogram (e.g. a function).
> @@ -489,13 +435,6 @@ namespace llvm {
> StringRef getName() const { return getStringField(3); }
> StringRef getDisplayName() const { return getStringField(4); }
> StringRef getLinkageName() const { return getStringField(5); }
> - DICompileUnit getCompileUnit() const{
> - assert (getVersion() <= LLVMDebugVersion10 && "Invalid
> getCompileUnit!");
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getFieldAs<DICompileUnit>(6);
> -
> - return getFieldAs<DIFile>(6).getCompileUnit();
> - }
> unsigned getLineNumber() const { return getUnsignedField(7); }
> DICompositeType getType() const { return
> getFieldAs<DICompositeType>(8); }
>
> @@ -529,50 +468,34 @@ namespace llvm {
> }
>
> unsigned isArtificial() const {
> - if (getVersion() <= llvm::LLVMDebugVersion8)
> - return getUnsignedField(14);
> return (getUnsignedField(14) & FlagArtificial) != 0;
> }
> /// isPrivate - Return true if this subprogram has "private"
> /// access specifier.
> bool isPrivate() const {
> - if (getVersion() <= llvm::LLVMDebugVersion8)
> - return false;
> return (getUnsignedField(14) & FlagPrivate) != 0;
> }
> /// isProtected - Return true if this subprogram has "protected"
> /// access specifier.
> bool isProtected() const {
> - if (getVersion() <= llvm::LLVMDebugVersion8)
> - return false;
> return (getUnsignedField(14) & FlagProtected) != 0;
> }
> /// isExplicit - Return true if this subprogram is marked as explicit.
> bool isExplicit() const {
> - if (getVersion() <= llvm::LLVMDebugVersion8)
> - return false;
> return (getUnsignedField(14) & FlagExplicit) != 0;
> }
> /// isPrototyped - Return true if this subprogram is prototyped.
> bool isPrototyped() const {
> - if (getVersion() <= llvm::LLVMDebugVersion8)
> - return false;
> return (getUnsignedField(14) & FlagPrototyped) != 0;
> }
>
> unsigned isOptimized() const;
>
> StringRef getFilename() const {
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getCompileUnit().getFilename();
> -
> return getFieldAs<DIFile>(6).getFilename();
> }
>
> StringRef getDirectory() const {
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getCompileUnit().getFilename();
> -
> return getFieldAs<DIFile>(6).getDirectory();
> }
>
> @@ -613,22 +536,10 @@ namespace llvm {
> StringRef getName() const { return getStringField(3); }
> StringRef getDisplayName() const { return getStringField(4); }
> StringRef getLinkageName() const { return getStringField(5); }
> - DICompileUnit getCompileUnit() const{
> - assert (getVersion() <= LLVMDebugVersion10 && "Invalid
> getCompileUnit!");
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getFieldAs<DICompileUnit>(6);
> -
> - DIFile F = getFieldAs<DIFile>(6);
> - return F.getCompileUnit();
> - }
> StringRef getFilename() const {
> - if (getVersion() <= llvm::LLVMDebugVersion10)
> - return getContext().getFilename();
> return getFieldAs<DIFile>(6).getFilename();
> }
> StringRef getDirectory() const {
> - if (getVersion() <= llvm::LLVMDebugVersion10)
> - return getContext().getDirectory();
> return getFieldAs<DIFile>(6).getDirectory();
>
> }
> @@ -659,14 +570,6 @@ namespace llvm {
>
> DIScope getContext() const { return getFieldAs<DIScope>(1); }
> StringRef getName() const { return getStringField(2); }
> - DICompileUnit getCompileUnit() const {
> - assert (getVersion() <= LLVMDebugVersion10 && "Invalid
> getCompileUnit!");
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getFieldAs<DICompileUnit>(3);
> -
> - DIFile F = getFieldAs<DIFile>(3);
> - return F.getCompileUnit();
> - }
> DIFile getFile() const { return getFieldAs<DIFile>(3); }
> unsigned getLineNumber() const {
> return (getUnsignedField(4) << 8) >> 8;
> @@ -679,8 +582,6 @@ namespace llvm {
>
> /// isArtificial - Return true if this variable is marked as
> "artificial".
> bool isArtificial() const {
> - if (getVersion() <= llvm::LLVMDebugVersion8)
> - return false;
> return (getUnsignedField(6) & FlagArtificial) != 0;
> }
>
> @@ -702,10 +603,6 @@ namespace llvm {
> unsigned getNumAddrElements() const;
>
> uint64_t getAddrElement(unsigned Idx) const {
> - if (getVersion() <= llvm::LLVMDebugVersion8)
> - return getUInt64Field(Idx+6);
> - if (getVersion() == llvm::LLVMDebugVersion9)
> - return getUInt64Field(Idx+7);
> return getUInt64Field(Idx+8);
> }
>
> @@ -737,6 +634,7 @@ namespace llvm {
> StringRef filename = getFieldAs<DIFile>(4).getFilename();
> return !filename.empty() ? filename : getContext().getFilename();
> }
> + bool Verify() const;
> };
>
> /// DILexicalBlockFile - This is a wrapper for a lexical block with
> @@ -757,6 +655,7 @@ namespace llvm {
> return filename;
> }
> DILexicalBlock getScope() const { return
> getFieldAs<DILexicalBlock>(1); }
> + bool Verify() const;
> };
>
> /// DINameSpace - A wrapper for a C++ style name space.
> @@ -771,13 +670,6 @@ namespace llvm {
> StringRef getFilename() const {
> return getFieldAs<DIFile>(3).getFilename();
> }
> - DICompileUnit getCompileUnit() const{
> - assert (getVersion() <= LLVMDebugVersion10 && "Invalid
> getCompileUnit!");
> - if (getVersion() == llvm::LLVMDebugVersion7)
> - return getFieldAs<DICompileUnit>(3);
> -
> - return getFieldAs<DIFile>(3).getCompileUnit();
> - }
> unsigned getLineNumber() const { return getUnsignedField(4); }
> bool Verify() const;
> };
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp?rev=176838&r1=176837&r2=176838&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCompileUnit.cpp Mon Mar 11
> 18:39:23 2013
> @@ -1672,33 +1672,6 @@ DIE *CompileUnit::createMemberDIE(DIDeri
> if (DT.isArtificial())
> addFlag(MemberDie, dwarf::DW_AT_artificial);
>
> - // This is only for backward compatibility.
> - StringRef PropertyName = DT.getObjCPropertyName();
> - if (!PropertyName.empty()) {
> - addString(MemberDie, dwarf::DW_AT_APPLE_property_name, PropertyName);
> - StringRef GetterName = DT.getObjCPropertyGetterName();
> - if (!GetterName.empty())
> - addString(MemberDie, dwarf::DW_AT_APPLE_property_getter,
> GetterName);
> - StringRef SetterName = DT.getObjCPropertySetterName();
> - if (!SetterName.empty())
> - addString(MemberDie, dwarf::DW_AT_APPLE_property_setter,
> SetterName);
> - unsigned PropertyAttributes = 0;
> - if (DT.isReadOnlyObjCProperty())
> - PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readonly;
> - if (DT.isReadWriteObjCProperty())
> - PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_readwrite;
> - if (DT.isAssignObjCProperty())
> - PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_assign;
> - if (DT.isRetainObjCProperty())
> - PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_retain;
> - if (DT.isCopyObjCProperty())
> - PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_copy;
> - if (DT.isNonAtomicObjCProperty())
> - PropertyAttributes |= dwarf::DW_APPLE_PROPERTY_nonatomic;
> - if (PropertyAttributes)
> - addUInt(MemberDie, dwarf::DW_AT_APPLE_property_attribute, 0,
> - PropertyAttributes);
> - }
> return MemberDie;
> }
>
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp?rev=176838&r1=176837&r2=176838&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.cpp Mon Mar 11 18:39:23
> 2013
> @@ -756,82 +756,6 @@ void DwarfDebug::constructSubprogramDIE(
> TheCU->addGlobalName(SP.getName(), SubprogramDie);
> }
>
> -// Collect debug info from named mdnodes such as llvm.dbg.enum and
> llvm.dbg.ty.
> -void DwarfDebug::collectInfoFromNamedMDNodes(const Module *M) {
> - if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.sp"))
> - for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
> - const MDNode *N = NMD->getOperand(i);
> - if (CompileUnit *CU =
> CUMap.lookup(DISubprogram(N).getCompileUnit()))
> - constructSubprogramDIE(CU, N);
> - }
> -
> - if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.gv"))
> - for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
> - const MDNode *N = NMD->getOperand(i);
> - if (CompileUnit *CU =
> CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
> - CU->createGlobalVariableDIE(N);
> - }
> -
> - if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.enum"))
> - for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
> - DIType Ty(NMD->getOperand(i));
> - if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
> - CU->getOrCreateTypeDIE(Ty);
> - }
> -
> - if (NamedMDNode *NMD = M->getNamedMetadata("llvm.dbg.ty"))
> - for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
> - DIType Ty(NMD->getOperand(i));
> - if (CompileUnit *CU = CUMap.lookup(Ty.getCompileUnit()))
> - CU->getOrCreateTypeDIE(Ty);
> - }
> -}
> -
> -// Collect debug info using DebugInfoFinder.
> -// FIXME - Remove this when dragonegg switches to DIBuilder.
> -bool DwarfDebug::collectLegacyDebugInfo(const Module *M) {
> - DebugInfoFinder DbgFinder;
> - DbgFinder.processModule(*M);
> -
> - bool HasDebugInfo = false;
> - // Scan all the compile-units to see if there are any marked as the main
> - // unit. If not, we do not generate debug info.
> - for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
> - E = DbgFinder.compile_unit_end(); I != E; ++I) {
> - if (DICompileUnit(*I).isMain()) {
> - HasDebugInfo = true;
> - break;
> - }
> - }
> - if (!HasDebugInfo) return false;
> -
> - // Emit initial sections so we can refer to them later.
> - emitSectionLabels();
> -
> - // Create all the compile unit DIEs.
> - for (DebugInfoFinder::iterator I = DbgFinder.compile_unit_begin(),
> - E = DbgFinder.compile_unit_end(); I != E; ++I)
> - constructCompileUnit(*I);
> -
> - // Create DIEs for each global variable.
> - for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
> - E = DbgFinder.global_variable_end(); I != E; ++I) {
> - const MDNode *N = *I;
> - if (CompileUnit *CU =
> CUMap.lookup(DIGlobalVariable(N).getCompileUnit()))
> - CU->createGlobalVariableDIE(N);
> - }
> -
> - // Create DIEs for each subprogram.
> - for (DebugInfoFinder::iterator I = DbgFinder.subprogram_begin(),
> - E = DbgFinder.subprogram_end(); I != E; ++I) {
> - const MDNode *N = *I;
> - if (CompileUnit *CU = CUMap.lookup(DISubprogram(N).getCompileUnit()))
> - constructSubprogramDIE(CU, N);
> - }
> -
> - return HasDebugInfo;
> -}
> -
> // Emit all Dwarf sections that should come prior to the content. Create
> // global DIEs and emit initial debug info sections. This is invoked by
> // the target AsmPrinter.
> @@ -844,30 +768,28 @@ void DwarfDebug::beginModule() {
> // If module has named metadata anchors then use them, otherwise scan
> the
> // module using debug info finder to collect debug info.
> NamedMDNode *CU_Nodes = M->getNamedMetadata("llvm.dbg.cu");
> - if (CU_Nodes) {
> - // Emit initial sections so we can reference labels later.
> - emitSectionLabels();
> -
> - for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
> - DICompileUnit CUNode(CU_Nodes->getOperand(i));
> - CompileUnit *CU = constructCompileUnit(CUNode);
> - DIArray GVs = CUNode.getGlobalVariables();
> - for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
> - CU->createGlobalVariableDIE(GVs.getElement(i));
> - DIArray SPs = CUNode.getSubprograms();
> - for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
> - constructSubprogramDIE(CU, SPs.getElement(i));
> - DIArray EnumTypes = CUNode.getEnumTypes();
> - for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
> - CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
> - DIArray RetainedTypes = CUNode.getRetainedTypes();
> - for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e;
> ++i)
> - CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
> - }
> - } else if (!collectLegacyDebugInfo(M))
> + if (!CU_Nodes)
> return;
>
> - collectInfoFromNamedMDNodes(M);
> + // Emit initial sections so we can reference labels later.
> + emitSectionLabels();
> +
> + for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
> + DICompileUnit CUNode(CU_Nodes->getOperand(i));
> + CompileUnit *CU = constructCompileUnit(CUNode);
> + DIArray GVs = CUNode.getGlobalVariables();
> + for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i)
> + CU->createGlobalVariableDIE(GVs.getElement(i));
> + DIArray SPs = CUNode.getSubprograms();
> + for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
> + constructSubprogramDIE(CU, SPs.getElement(i));
> + DIArray EnumTypes = CUNode.getEnumTypes();
> + for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
> + CU->getOrCreateTypeDIE(EnumTypes.getElement(i));
> + DIArray RetainedTypes = CUNode.getRetainedTypes();
> + for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e; ++i)
> + CU->getOrCreateTypeDIE(RetainedTypes.getElement(i));
> + }
>
> // Tell MMI that we have debug info.
> MMI->setDebugInfoAvailability(true);
> @@ -1211,16 +1133,10 @@ DwarfDebug::collectVariableInfo(const Ma
> if (DV.getTag() == dwarf::DW_TAG_arg_variable &&
> DISubprogram(DV.getContext()).describes(MF->getFunction()))
> Scope = LScopes.getCurrentFunctionScope();
> - else {
> - if (DV.getVersion() <= LLVMDebugVersion9)
> - Scope = LScopes.findLexicalScope(MInsn->getDebugLoc());
> - else {
> - if (MDNode *IA = DV.getInlinedAt())
> - Scope =
> LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
> - else
> - Scope =
> LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
> - }
> - }
> + else if (MDNode *IA = DV.getInlinedAt())
> + Scope = LScopes.findInlinedScope(DebugLoc::getFromDILocation(IA));
> + else
> + Scope = LScopes.findLexicalScope(cast<MDNode>(DV->getOperand(1)));
> // If variable scope is not found then skip this variable.
> if (!Scope)
> continue;
>
> Modified: llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h?rev=176838&r1=176837&r2=176838&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h (original)
> +++ llvm/trunk/lib/CodeGen/AsmPrinter/DwarfDebug.h Mon Mar 11 18:39:23 2013
> @@ -598,14 +598,6 @@ public:
> DwarfDebug(AsmPrinter *A, Module *M);
> ~DwarfDebug();
>
> - /// \brief Collect debug info from named mdnodes such as llvm.dbg.enum
> - /// and llvm.dbg.ty
> - void collectInfoFromNamedMDNodes(const Module *M);
> -
> - /// \brief Collect debug info using DebugInfoFinder.
> - /// FIXME - Remove this when DragonEgg switches to DIBuilder.
> - bool collectLegacyDebugInfo(const Module *M);
> -
> /// \brief Emit all Dwarf sections that should come prior to the
> /// content.
> void beginModule();
>
> Modified: llvm/trunk/lib/IR/AsmWriter.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/AsmWriter.cpp?rev=176838&r1=176837&r2=176838&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/AsmWriter.cpp (original)
> +++ llvm/trunk/lib/IR/AsmWriter.cpp Mon Mar 11 18:39:23 2013
> @@ -2094,7 +2094,7 @@ static void WriteMDNodeComment(const MDN
> return;
>
> DIDescriptor Desc(Node);
> - if (Desc.getVersion() < LLVMDebugVersion11)
> + if (!Desc.Verify())
> return;
>
> unsigned Tag = Desc.getTag();
>
> Modified: llvm/trunk/lib/IR/DebugInfo.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/IR/DebugInfo.cpp?rev=176838&r1=176837&r2=176838&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/IR/DebugInfo.cpp (original)
> +++ llvm/trunk/lib/IR/DebugInfo.cpp Mon Mar 11 18:39:23 2013
> @@ -51,6 +51,21 @@ DIDescriptor::DIDescriptor(const DIVaria
> DIDescriptor::DIDescriptor(const DIType F) : DbgNode(F.DbgNode) {
> }
>
> +bool DIDescriptor::Verify() const {
> + return DbgNode &&
> + (DIDerivedType(DbgNode).Verify() ||
> + DICompositeType(DbgNode).Verify() ||
> DIBasicType(DbgNode).Verify() ||
> + DIVariable(DbgNode).Verify() || DISubprogram(DbgNode).Verify()
> ||
> + DIGlobalVariable(DbgNode).Verify() || DIFile(DbgNode).Verify()
> ||
> + DICompileUnit(DbgNode).Verify() ||
> DINameSpace(DbgNode).Verify() ||
> + DILexicalBlock(DbgNode).Verify() ||
> + DILexicalBlockFile(DbgNode).Verify() ||
> + DISubrange(DbgNode).Verify() || DIEnumerator(DbgNode).Verify()
> ||
> + DIObjCProperty(DbgNode).Verify() ||
> + DITemplateTypeParameter(DbgNode).Verify() ||
> + DITemplateValueParameter(DbgNode).Verify());
> +}
> +
> StringRef
> DIDescriptor::getStringField(unsigned Elt) const {
> if (DbgNode == 0)
> @@ -135,17 +150,11 @@ void DIDescriptor::replaceFunctionField(
> }
>
> unsigned DIVariable::getNumAddrElements() const {
> - if (getVersion() <= LLVMDebugVersion8)
> - return DbgNode->getNumOperands()-6;
> - if (getVersion() == LLVMDebugVersion9)
> - return DbgNode->getNumOperands()-7;
> return DbgNode->getNumOperands()-8;
> }
>
> /// getInlinedAt - If this variable is inlined then return inline
> location.
> MDNode *DIVariable::getInlinedAt() const {
> - if (getVersion() <= LLVMDebugVersion9)
> - return NULL;
> return dyn_cast_or_null<MDNode>(DbgNode->getOperand(7));
> }
>
> @@ -392,31 +401,30 @@ bool DIType::isUnsignedDIType() {
>
> /// Verify - Verify that a compile unit is well formed.
> bool DICompileUnit::Verify() const {
> - if (!DbgNode)
> + if (!isCompileUnit())
> return false;
> StringRef N = getFilename();
> if (N.empty())
> return false;
> // It is possible that directory and produce string is empty.
> - return true;
> + return DbgNode->getNumOperands() == 15;
> }
>
> /// Verify - Verify that an ObjC property is well formed.
> bool DIObjCProperty::Verify() const {
> - if (!DbgNode)
> + if (!isObjCProperty())
> return false;
> - unsigned Tag = getTag();
> - if (Tag != dwarf::DW_TAG_APPLE_property) return false;
> +
> DIType Ty = getType();
> if (!Ty.Verify()) return false;
>
> // Don't worry about the rest of the strings for now.
> - return true;
> + return DbgNode->getNumOperands() == 8;
> }
>
> /// Verify - Verify that a type descriptor is well formed.
> bool DIType::Verify() const {
> - if (!DbgNode)
> + if (!isType())
> return false;
> if (getContext() && !getContext().Verify())
> return false;
> @@ -437,27 +445,28 @@ bool DIType::Verify() const {
>
> /// Verify - Verify that a basic type descriptor is well formed.
> bool DIBasicType::Verify() const {
> - return isBasicType();
> + return isBasicType() && DbgNode->getNumOperands() == 10;
> }
>
> /// Verify - Verify that a derived type descriptor is well formed.
> bool DIDerivedType::Verify() const {
> - return isDerivedType();
> + return isDerivedType() && DbgNode->getNumOperands() >= 10 &&
> + DbgNode->getNumOperands() <= 14;
> }
>
> /// Verify - Verify that a composite type descriptor is well formed.
> bool DICompositeType::Verify() const {
> - if (!DbgNode)
> + if (!isCompositeType())
> return false;
> if (getContext() && !getContext().Verify())
> return false;
>
> - return true;
> + return DbgNode->getNumOperands() >= 10 && DbgNode->getNumOperands() <=
> 14;
> }
>
> /// Verify - Verify that a subprogram descriptor is well formed.
> bool DISubprogram::Verify() const {
> - if (!DbgNode)
> + if (!isSubprogram())
> return false;
>
> if (getContext() && !getContext().Verify())
> @@ -466,12 +475,12 @@ bool DISubprogram::Verify() const {
> DICompositeType Ty = getType();
> if (!Ty.Verify())
> return false;
> - return true;
> + return DbgNode->getNumOperands() == 21;
> }
>
> /// Verify - Verify that a global variable descriptor is well formed.
> bool DIGlobalVariable::Verify() const {
> - if (!DbgNode)
> + if (!isGlobalVariable())
> return false;
>
> if (getDisplayName().empty())
> @@ -487,12 +496,12 @@ bool DIGlobalVariable::Verify() const {
> if (!getGlobal() && !getConstant())
> return false;
>
> - return true;
> + return DbgNode->getNumOperands() == 13;
> }
>
> /// Verify - Verify that a variable descriptor is well formed.
> bool DIVariable::Verify() const {
> - if (!DbgNode)
> + if (!isVariable())
> return false;
>
> if (getContext() && !getContext().Verify())
> @@ -502,7 +511,7 @@ bool DIVariable::Verify() const {
> if (!Ty.Verify())
> return false;
>
> - return true;
> + return DbgNode->getNumOperands() >= 8;
> }
>
> /// Verify - Verify that a location descriptor is well formed.
> @@ -515,9 +524,44 @@ bool DILocation::Verify() const {
>
> /// Verify - Verify that a namespace descriptor is well formed.
> bool DINameSpace::Verify() const {
> - if (!DbgNode)
> + if (!isNameSpace())
> return false;
> - return true;
> + return DbgNode->getNumOperands() == 5;
> +}
> +
> +/// \brief Verify that the file descriptor is well formed.
> +bool DIFile::Verify() const {
> + return isFile() && DbgNode->getNumOperands() == 4;
> +}
> +
> +/// \brief Verify that the enumerator descriptor is well formed.
> +bool DIEnumerator::Verify() const {
> + return isEnumerator() && DbgNode->getNumOperands() == 3;
> +}
> +
> +/// \brief Verify that the subrange descriptor is well formed.
> +bool DISubrange::Verify() const {
> + return isSubrange() && DbgNode->getNumOperands() == 3;
> +}
> +
> +/// \brief Verify that the lexical block descriptor is well formed.
> +bool DILexicalBlock::Verify() const {
> + return isLexicalBlock() && DbgNode->getNumOperands() == 6;
> +}
> +
> +/// \brief Verify that the file-scoped lexical block descriptor is well
> formed.
> +bool DILexicalBlockFile::Verify() const {
> + return isLexicalBlockFile() && DbgNode->getNumOperands() == 3;
> +}
> +
> +/// \brief Verify that the template type parameter descriptor is well
> formed.
> +bool DITemplateTypeParameter::Verify() const {
> + return isTemplateTypeParameter() && DbgNode->getNumOperands() == 7;
> +}
> +
> +/// \brief Verify that the template value parameter descriptor is well
> formed.
> +bool DITemplateValueParameter::Verify() const {
> + return isTemplateValueParameter() && DbgNode->getNumOperands() == 8;
> }
>
> /// getOriginalTypeSize - If this type is derived from a base type then
> @@ -551,7 +595,7 @@ uint64_t DIDerivedType::getOriginalTypeS
>
> /// getObjCProperty - Return property node, if this ivar is associated
> with one.
> MDNode *DIDerivedType::getObjCProperty() const {
> - if (getVersion() <= LLVMDebugVersion11 || DbgNode->getNumOperands() <=
> 10)
> + if (DbgNode->getNumOperands() <= 10)
> return NULL;
> return dyn_cast_or_null<MDNode>(DbgNode->getOperand(10));
> }
> @@ -803,71 +847,25 @@ void DebugInfoFinder::processModule(cons
> for (unsigned i = 0, e = CU_Nodes->getNumOperands(); i != e; ++i) {
> DICompileUnit CU(CU_Nodes->getOperand(i));
> addCompileUnit(CU);
> - if (CU.getVersion() > LLVMDebugVersion10) {
> - DIArray GVs = CU.getGlobalVariables();
> - for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) {
> - DIGlobalVariable DIG(GVs.getElement(i));
> - if (addGlobalVariable(DIG))
> - processType(DIG.getType());
> - }
> - DIArray SPs = CU.getSubprograms();
> - for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
> - processSubprogram(DISubprogram(SPs.getElement(i)));
> - DIArray EnumTypes = CU.getEnumTypes();
> - for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
> - processType(DIType(EnumTypes.getElement(i)));
> - DIArray RetainedTypes = CU.getRetainedTypes();
> - for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e;
> ++i)
> - processType(DIType(RetainedTypes.getElement(i)));
> - return;
> - }
> - }
> - }
> -
> - for (Module::const_iterator I = M.begin(), E = M.end(); I != E; ++I)
> - for (Function::const_iterator FI = (*I).begin(), FE = (*I).end();
> - FI != FE; ++FI)
> - for (BasicBlock::const_iterator BI = (*FI).begin(), BE =
> (*FI).end();
> - BI != BE; ++BI) {
> - if (const DbgDeclareInst *DDI = dyn_cast<DbgDeclareInst>(BI))
> - processDeclare(DDI);
> -
> - DebugLoc Loc = BI->getDebugLoc();
> - if (Loc.isUnknown())
> - continue;
> -
> - LLVMContext &Ctx = BI->getContext();
> - DIDescriptor Scope(Loc.getScope(Ctx));
> -
> - if (Scope.isCompileUnit())
> - addCompileUnit(DICompileUnit(Scope));
> - else if (Scope.isSubprogram())
> - processSubprogram(DISubprogram(Scope));
> - else if (Scope.isLexicalBlockFile()) {
> - DILexicalBlockFile DBF = DILexicalBlockFile(Scope);
> - processLexicalBlock(DILexicalBlock(DBF.getScope()));
> - }
> - else if (Scope.isLexicalBlock())
> - processLexicalBlock(DILexicalBlock(Scope));
> -
> - if (MDNode *IA = Loc.getInlinedAt(Ctx))
> - processLocation(DILocation(IA));
> - }
> -
> - if (NamedMDNode *NMD = M.getNamedMetadata("llvm.dbg.gv")) {
> - for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i) {
> - DIGlobalVariable DIG(cast<MDNode>(NMD->getOperand(i)));
> - if (addGlobalVariable(DIG)) {
> - if (DIG.getVersion() <= LLVMDebugVersion10)
> - addCompileUnit(DIG.getCompileUnit());
> - processType(DIG.getType());
> + DIArray GVs = CU.getGlobalVariables();
> + for (unsigned i = 0, e = GVs.getNumElements(); i != e; ++i) {
> + DIGlobalVariable DIG(GVs.getElement(i));
> + if (addGlobalVariable(DIG))
> + processType(DIG.getType());
> }
> + DIArray SPs = CU.getSubprograms();
> + for (unsigned i = 0, e = SPs.getNumElements(); i != e; ++i)
> + processSubprogram(DISubprogram(SPs.getElement(i)));
> + DIArray EnumTypes = CU.getEnumTypes();
> + for (unsigned i = 0, e = EnumTypes.getNumElements(); i != e; ++i)
> + processType(DIType(EnumTypes.getElement(i)));
> + DIArray RetainedTypes = CU.getRetainedTypes();
> + for (unsigned i = 0, e = RetainedTypes.getNumElements(); i != e;
> ++i)
> + processType(DIType(RetainedTypes.getElement(i)));
> + // FIXME: We really shouldn't be bailing out after visiting just
> one CU
> + return;
> }
> }
> -
> - if (NamedMDNode *NMD = M.getNamedMetadata("llvm.dbg.sp"))
> - for (unsigned i = 0, e = NMD->getNumOperands(); i != e; ++i)
> - processSubprogram(DISubprogram(NMD->getOperand(i)));
> }
>
> /// processLocation - Process DILocation.
> @@ -891,8 +889,6 @@ void DebugInfoFinder::processLocation(DI
> void DebugInfoFinder::processType(DIType DT) {
> if (!addType(DT))
> return;
> - if (DT.getVersion() <= LLVMDebugVersion10)
> - addCompileUnit(DT.getCompileUnit());
> if (DT.isCompositeType()) {
> DICompositeType DCT(DT);
> processType(DCT.getTypeDerivedFrom());
> @@ -927,8 +923,6 @@ void DebugInfoFinder::processLexicalBloc
> void DebugInfoFinder::processSubprogram(DISubprogram SP) {
> if (!addSubprogram(SP))
> return;
> - if (SP.getVersion() <= LLVMDebugVersion10)
> - addCompileUnit(SP.getCompileUnit());
> processType(SP.getType());
> }
>
> @@ -943,8 +937,6 @@ void DebugInfoFinder::processDeclare(con
>
> if (!NodesSeen.insert(DV))
> return;
> - if (DIVariable(N).getVersion() <= LLVMDebugVersion10)
> - addCompileUnit(DIVariable(N).getCompileUnit());
> processType(DIVariable(N).getType());
> }
>
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20130311/515c83ec/attachment.html>
More information about the llvm-commits
mailing list