mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-15 21:24:00 +00:00
Applied some recommend changes from sabre. The dominate one beginning "let the
pass manager do it's thing." Fixes crash when compiling -g files and suppresses dwarf statements if no debug info is present. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25100 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -18,74 +18,52 @@ using namespace llvm;
|
||||
|
||||
// Handle the Pass registration stuff necessary to use TargetData's.
|
||||
namespace {
|
||||
RegisterPass<MachineDebugInfo> X("machinedebuginfo", "Debug Information",
|
||||
PassInfo::Analysis | PassInfo::Optimization);
|
||||
RegisterPass<MachineDebugInfo> X("machinedebuginfo", "Debug Information");
|
||||
}
|
||||
|
||||
/// doInitialization - Initialize the debug state for a new module.
|
||||
///
|
||||
bool MachineDebugInfo::doInitialization() {
|
||||
return false;
|
||||
}
|
||||
|
||||
namespace llvm {
|
||||
/// doFinalization - Tear down the debug state after completion of a module.
|
||||
///
|
||||
bool MachineDebugInfo::doFinalization() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/// getUniqueSourceID - Register a source file with debug info. Returns an id.
|
||||
///
|
||||
unsigned MachineDebugInfo::getUniqueSourceID(const std::string &fname,
|
||||
const std::string &dirname) {
|
||||
// Compose a key
|
||||
const std::string path = dirname + "/" + fname;
|
||||
// Check if the source file is already recorded
|
||||
std::map<std::string, unsigned>::iterator
|
||||
SMI = SourceMap.lower_bound(path);
|
||||
// If already there return existing id
|
||||
if (SMI != SourceMap.end() && SMI->first == path) return SMI->second;
|
||||
// Bump up the count
|
||||
++SourceCount;
|
||||
// Record the count
|
||||
SourceMap.insert(SMI, std::make_pair(path, SourceCount));
|
||||
// Return id
|
||||
return SourceCount;
|
||||
}
|
||||
|
||||
/// getSourceFiles - Return a vector of files. Vector index + 1 equals id.
|
||||
///
|
||||
std::vector<std::string> MachineDebugInfo::getSourceFiles() const {
|
||||
std::vector<std::string> Sources(SourceCount);
|
||||
|
||||
/// DebugInfo - Keep track of debug information for the function.
|
||||
///
|
||||
// FIXME - making it global until we can find a proper place to hang it from.
|
||||
MachineDebugInfo *DebugInfo;
|
||||
|
||||
// FIXME - temporary hack until we can find a place to hand debug info from.
|
||||
ModulePass *createDebugInfoPass() {
|
||||
if (!DebugInfo) DebugInfo = new MachineDebugInfo();
|
||||
return (ModulePass *)DebugInfo;
|
||||
}
|
||||
|
||||
/// getDebugInfo - Returns the DebugInfo.
|
||||
MachineDebugInfo &getMachineDebugInfo() {
|
||||
assert(DebugInfo && "DebugInfo pass not created");
|
||||
return *DebugInfo;
|
||||
for (std::map<std::string, unsigned>::const_iterator SMI = SourceMap.begin(),
|
||||
E = SourceMap.end();
|
||||
SMI != E; SMI++) {
|
||||
unsigned Index = SMI->second - 1;
|
||||
const std::string &Path = SMI->first;
|
||||
Sources[Index] = Path;
|
||||
}
|
||||
|
||||
/// doInitialization - Initialize the debug state for a new module.
|
||||
///
|
||||
bool MachineDebugInfo::doInitialization() {
|
||||
return true;
|
||||
}
|
||||
|
||||
/// doFinalization - Tear down the debug state after completion of a module.
|
||||
///
|
||||
bool MachineDebugInfo::doFinalization() {
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/// RecordSource - Register a source file with debug info. Returns an id.
|
||||
///
|
||||
unsigned MachineDebugInfo::RecordSource(std::string fname,
|
||||
std::string dirname) {
|
||||
// Compose a key
|
||||
std::string path = dirname + "/" + fname;
|
||||
// Check if the source file is already recorded
|
||||
StrIntMapIter SMI = SourceMap.find(path);
|
||||
// If already there return existing id
|
||||
if (SMI != SourceMap.end()) return SMI->second;
|
||||
// Bump up the count
|
||||
++SourceCount;
|
||||
// Record the count
|
||||
SourceMap[path] = SourceCount;
|
||||
// Return id
|
||||
return SourceCount;
|
||||
}
|
||||
|
||||
/// getSourceFiles - Return a vector of files. Vector index + 1 equals id.
|
||||
///
|
||||
std::vector<std::string> MachineDebugInfo::getSourceFiles() {
|
||||
std::vector<std::string> Sources(SourceCount);
|
||||
|
||||
for (StrIntMapIter SMI = SourceMap.begin(), E = SourceMap.end(); SMI != E;
|
||||
SMI++) {
|
||||
unsigned Index = SMI->second - 1;
|
||||
std::string Path = SMI->first;
|
||||
Sources[Index] = Path;
|
||||
}
|
||||
return Sources;
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
return Sources;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user