Added source file/line correspondence for dwarf (PowerPC only at this point.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@24748 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Jim Laskey
2005-12-16 22:45:29 +00:00
parent d9e0ba49a4
commit f5395cee6a
10 changed files with 160 additions and 5 deletions

View File

@@ -0,0 +1,80 @@
//===-- llvm/CodeGen/MachineDebugInfo.h -------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
// This file was developed by James M. Laskey and is distributed under
// the University of Illinois Open Source License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Collect debug information for a module. This information should be in a
// neutral form that can be used by different debugging schemes.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CODEGEN_MACHINEDEBUGINFO_H
#define LLVM_CODEGEN_MACHINEDEBUGINFO_H
#include <string>
#include <map>
#include <vector>
namespace llvm {
//===----------------------------------------------------------------------===//
/// MachineDebugInfo - This class contains debug information specific to a
/// module. Queries can be made by different debugging schemes and reformated
/// for specific use.
///
class MachineDebugInfo {
private:
// convenience types
typedef std::map<std::string, unsigned> StrIntMap;
typedef StrIntMap::iterator StrIntMapIter;
StrIntMap SourceMap; // Map of source file path to id
unsigned SourceCount; // Number of source files (used to
// generate id)
public:
// Ctor.
MachineDebugInfo() : SourceMap(), SourceCount(0) {}
/// RecordSource - Register a source file with debug info. Returns an id.
///
unsigned 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> 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;
}
}; // End class MachineDebugInfo
//===----------------------------------------------------------------------===//
} // End llvm namespace
#endif

View File

@@ -18,6 +18,7 @@
#ifndef LLVM_CODEGEN_MACHINEFUNCTION_H
#define LLVM_CODEGEN_MACHINEFUNCTION_H
#include "llvm/CodeGen/MachineDebugInfo.h"
#include "llvm/CodeGen/MachineBasicBlock.h"
#include "llvm/Support/Annotation.h"
@@ -112,6 +113,10 @@ class MachineFunction : private Annotation {
/// stored in the second element.
std::vector<std::pair<unsigned, unsigned> > LiveIns;
std::vector<unsigned> LiveOuts;
/// DebugInfo - Keep track of debug information for the function.
///
MachineDebugInfo DebugInfo;
public:
MachineFunction(const Function *Fn, const TargetMachine &TM);
@@ -212,6 +217,11 @@ public:
const MachineBasicBlock *getLastBlock() const {
return MBBNumbering.back();
}
/// getDebugInfo - Returns the DebugInfo.
MachineDebugInfo &getDebugInfo() {
return DebugInfo;
}
/// print - Print out the MachineFunction in a format suitable for debugging
/// to the specified stream.

View File

@@ -352,6 +352,12 @@ namespace ISD {
// as output.
LOCATION,
// DEBUG_LOC - This node is used to represent source line information
// embedded in the code. It takes token chain as input, then a line number,
// then a column then a file id (provided by MachineDebugInfo. It produces
// a token chain as output.
DEBUG_LOC,
// BUILTIN_OP_END - This must be the last enum value in this list.
BUILTIN_OP_END,
};