mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-26 21:32:10 +00:00
Fix PR23045.
Keep a note in the materializer that we are stripping debug info so that user doing a lazy read of the module don't hit outdated formats. Thanks to Duncan for suggesting the fix. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@233603 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7f3757eb9b
commit
a55ae077e4
@ -1376,6 +1376,7 @@ DITypeIdentifierMap generateDITypeIdentifierMap(const NamedMDNode *CU_Nodes);
|
|||||||
/// metadata for debugging. We also remove debug locations for instructions.
|
/// metadata for debugging. We also remove debug locations for instructions.
|
||||||
/// Return true if module is modified.
|
/// Return true if module is modified.
|
||||||
bool StripDebugInfo(Module &M);
|
bool StripDebugInfo(Module &M);
|
||||||
|
bool stripDebugInfo(Function &F);
|
||||||
|
|
||||||
/// \brief Return Debug Info Metadata Version by checking module flags.
|
/// \brief Return Debug Info Metadata Version by checking module flags.
|
||||||
unsigned getDebugMetadataVersionFromModule(const Module &M);
|
unsigned getDebugMetadataVersionFromModule(const Module &M);
|
||||||
|
@ -54,6 +54,7 @@ public:
|
|||||||
virtual std::error_code MaterializeModule(Module *M) = 0;
|
virtual std::error_code MaterializeModule(Module *M) = 0;
|
||||||
|
|
||||||
virtual std::error_code materializeMetadata() = 0;
|
virtual std::error_code materializeMetadata() = 0;
|
||||||
|
virtual void setStripDebugInfo() = 0;
|
||||||
|
|
||||||
virtual std::vector<StructType *> getIdentifiedStructTypes() const = 0;
|
virtual std::vector<StructType *> getIdentifiedStructTypes() const = 0;
|
||||||
};
|
};
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "llvm/Bitcode/LLVMBitCodes.h"
|
#include "llvm/Bitcode/LLVMBitCodes.h"
|
||||||
#include "llvm/IR/AutoUpgrade.h"
|
#include "llvm/IR/AutoUpgrade.h"
|
||||||
#include "llvm/IR/Constants.h"
|
#include "llvm/IR/Constants.h"
|
||||||
|
#include "llvm/IR/DebugInfo.h"
|
||||||
#include "llvm/IR/DebugInfoMetadata.h"
|
#include "llvm/IR/DebugInfoMetadata.h"
|
||||||
#include "llvm/IR/DerivedTypes.h"
|
#include "llvm/IR/DerivedTypes.h"
|
||||||
#include "llvm/IR/DiagnosticPrinter.h"
|
#include "llvm/IR/DiagnosticPrinter.h"
|
||||||
@ -218,6 +219,8 @@ class BitcodeReader : public GVMaterializer {
|
|||||||
/// True if any Metadata block has been materialized.
|
/// True if any Metadata block has been materialized.
|
||||||
bool IsMetadataMaterialized;
|
bool IsMetadataMaterialized;
|
||||||
|
|
||||||
|
bool StripDebugInfo = false;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
std::error_code Error(BitcodeError E, const Twine &Message);
|
std::error_code Error(BitcodeError E, const Twine &Message);
|
||||||
std::error_code Error(BitcodeError E);
|
std::error_code Error(BitcodeError E);
|
||||||
@ -255,6 +258,8 @@ public:
|
|||||||
/// Materialize any deferred Metadata block.
|
/// Materialize any deferred Metadata block.
|
||||||
std::error_code materializeMetadata() override;
|
std::error_code materializeMetadata() override;
|
||||||
|
|
||||||
|
void setStripDebugInfo() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector<StructType *> IdentifiedStructTypes;
|
std::vector<StructType *> IdentifiedStructTypes;
|
||||||
StructType *createIdentifiedStructType(LLVMContext &Context, StringRef Name);
|
StructType *createIdentifiedStructType(LLVMContext &Context, StringRef Name);
|
||||||
@ -2609,6 +2614,10 @@ std::error_code BitcodeReader::materializeMetadata() {
|
|||||||
return std::error_code();
|
return std::error_code();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void BitcodeReader::setStripDebugInfo() {
|
||||||
|
StripDebugInfo = true;
|
||||||
|
}
|
||||||
|
|
||||||
/// RememberAndSkipFunctionBody - When we see the block for a function body,
|
/// RememberAndSkipFunctionBody - When we see the block for a function body,
|
||||||
/// remember where it is and then skip it. This lets us lazily deserialize the
|
/// remember where it is and then skip it. This lets us lazily deserialize the
|
||||||
/// functions.
|
/// functions.
|
||||||
@ -4305,6 +4314,9 @@ std::error_code BitcodeReader::materialize(GlobalValue *GV) {
|
|||||||
return EC;
|
return EC;
|
||||||
F->setIsMaterializable(false);
|
F->setIsMaterializable(false);
|
||||||
|
|
||||||
|
if (StripDebugInfo)
|
||||||
|
stripDebugInfo(*F);
|
||||||
|
|
||||||
// Upgrade any old intrinsic calls in the function.
|
// Upgrade any old intrinsic calls in the function.
|
||||||
for (UpgradedIntrinsicMap::iterator I = UpgradedIntrinsics.begin(),
|
for (UpgradedIntrinsicMap::iterator I = UpgradedIntrinsics.begin(),
|
||||||
E = UpgradedIntrinsics.end(); I != E; ++I) {
|
E = UpgradedIntrinsics.end(); I != E; ++I) {
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include "llvm/IR/Instructions.h"
|
#include "llvm/IR/Instructions.h"
|
||||||
#include "llvm/IR/IntrinsicInst.h"
|
#include "llvm/IR/IntrinsicInst.h"
|
||||||
#include "llvm/IR/Intrinsics.h"
|
#include "llvm/IR/Intrinsics.h"
|
||||||
|
#include "llvm/IR/GVMaterializer.h"
|
||||||
#include "llvm/IR/Module.h"
|
#include "llvm/IR/Module.h"
|
||||||
#include "llvm/IR/ValueHandle.h"
|
#include "llvm/IR/ValueHandle.h"
|
||||||
#include "llvm/Support/Debug.h"
|
#include "llvm/Support/Debug.h"
|
||||||
@ -945,6 +946,19 @@ template <> DITypeRef DIDescriptor::getFieldAs<DITypeRef>(unsigned Elt) const {
|
|||||||
return DITypeRef(cast_or_null<Metadata>(getField(DbgNode, Elt)));
|
return DITypeRef(cast_or_null<Metadata>(getField(DbgNode, Elt)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool llvm::stripDebugInfo(Function &F) {
|
||||||
|
bool Changed = false;
|
||||||
|
for (BasicBlock &BB : F) {
|
||||||
|
for (Instruction &I : BB) {
|
||||||
|
if (I.getDebugLoc()) {
|
||||||
|
Changed = true;
|
||||||
|
I.setDebugLoc(DebugLoc());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Changed;
|
||||||
|
}
|
||||||
|
|
||||||
bool llvm::StripDebugInfo(Module &M) {
|
bool llvm::StripDebugInfo(Module &M) {
|
||||||
bool Changed = false;
|
bool Changed = false;
|
||||||
|
|
||||||
@ -978,16 +992,11 @@ bool llvm::StripDebugInfo(Module &M) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (Function &F : M) {
|
for (Function &F : M)
|
||||||
for (BasicBlock &BB : F) {
|
Changed |= stripDebugInfo(F);
|
||||||
for (Instruction &I : BB) {
|
|
||||||
if (I.getDebugLoc()) {
|
if ( GVMaterializer *Materializer = M.getMaterializer())
|
||||||
Changed = true;
|
Materializer->setStripDebugInfo();
|
||||||
I.setDebugLoc(DebugLoc());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return Changed;
|
return Changed;
|
||||||
}
|
}
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include "llvm/Bitcode/ReaderWriter.h"
|
#include "llvm/Bitcode/ReaderWriter.h"
|
||||||
#include "llvm/CodeGen/Analysis.h"
|
#include "llvm/CodeGen/Analysis.h"
|
||||||
#include "llvm/CodeGen/CommandFlags.h"
|
#include "llvm/CodeGen/CommandFlags.h"
|
||||||
|
#include "llvm/IR/AutoUpgrade.h"
|
||||||
#include "llvm/IR/Constants.h"
|
#include "llvm/IR/Constants.h"
|
||||||
#include "llvm/IR/DiagnosticInfo.h"
|
#include "llvm/IR/DiagnosticInfo.h"
|
||||||
#include "llvm/IR/DiagnosticPrinter.h"
|
#include "llvm/IR/DiagnosticPrinter.h"
|
||||||
@ -602,11 +603,8 @@ getModuleForFile(LLVMContext &Context, claimed_file &F,
|
|||||||
|
|
||||||
Module &M = Obj.getModule();
|
Module &M = Obj.getModule();
|
||||||
|
|
||||||
// Fixme (pr23045). We would like to upgrade the metadata with something like
|
M.materializeMetadata();
|
||||||
// Result->materializeMetadata();
|
UpgradeDebugInfo(M);
|
||||||
// UpgradeDebugInfo(*Result);
|
|
||||||
// but that fails to drop old debug info from function bodies.
|
|
||||||
M.materializeAllPermanently();
|
|
||||||
|
|
||||||
SmallPtrSet<GlobalValue *, 8> Used;
|
SmallPtrSet<GlobalValue *, 8> Used;
|
||||||
collectUsedGlobalVariables(M, Used, /*CompilerUsed*/ false);
|
collectUsedGlobalVariables(M, Used, /*CompilerUsed*/ false);
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "llvm/Linker/Linker.h"
|
#include "llvm/Linker/Linker.h"
|
||||||
#include "llvm/ADT/STLExtras.h"
|
#include "llvm/ADT/STLExtras.h"
|
||||||
#include "llvm/Bitcode/ReaderWriter.h"
|
#include "llvm/Bitcode/ReaderWriter.h"
|
||||||
|
#include "llvm/IR/AutoUpgrade.h"
|
||||||
#include "llvm/IR/DiagnosticInfo.h"
|
#include "llvm/IR/DiagnosticInfo.h"
|
||||||
#include "llvm/IR/DiagnosticPrinter.h"
|
#include "llvm/IR/DiagnosticPrinter.h"
|
||||||
#include "llvm/IR/LLVMContext.h"
|
#include "llvm/IR/LLVMContext.h"
|
||||||
@ -69,11 +70,8 @@ loadFile(const char *argv0, const std::string &FN, LLVMContext &Context) {
|
|||||||
if (!Result)
|
if (!Result)
|
||||||
Err.print(argv0, errs());
|
Err.print(argv0, errs());
|
||||||
|
|
||||||
// Fixme (pr23045). We would like to upgrade the metadata with something like
|
Result->materializeMetadata();
|
||||||
// Result->materializeMetadata();
|
UpgradeDebugInfo(*Result);
|
||||||
// UpgradeDebugInfo(*Result);
|
|
||||||
// but that fails to drop old debug info from function bodies.
|
|
||||||
Result->materializeAllPermanently();
|
|
||||||
|
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user