diff options
author | Devang Patel <dpatel@apple.com> | 2010-07-26 18:49:27 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2010-07-26 18:49:27 +0000 |
commit | e9b711c39827d7dcba0fc4cb787a4a7395285634 (patch) | |
tree | 5823b8e89072223f5f27cee95c73273aaf4be847 /lib/CodeGen/CGDebugInfo.cpp | |
parent | 66d0acd5f1010625df9987a89b8cc4df3d378d5e (diff) |
Revert 109303.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@109426 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/CGDebugInfo.cpp')
-rw-r--r-- | lib/CodeGen/CGDebugInfo.cpp | 46 |
1 files changed, 14 insertions, 32 deletions
diff --git a/lib/CodeGen/CGDebugInfo.cpp b/lib/CodeGen/CGDebugInfo.cpp index 0309c6e09b..753cdcddd2 100644 --- a/lib/CodeGen/CGDebugInfo.cpp +++ b/lib/CodeGen/CGDebugInfo.cpp @@ -148,8 +148,13 @@ llvm::DIFile CGDebugInfo::getOrCreateFile(SourceLocation Loc) { return llvm::DIFile(cast<llvm::MDNode>(it->second)); } - llvm::DIFile F = DebugFactory.CreateFile(PLoc.getFilename(), - getCurrentDirname(), TheCU); + // FIXME: We shouldn't even need to call 'makeAbsolute()' in the cases + // where we can consult the FileEntry. + llvm::sys::Path AbsFileName(PLoc.getFilename()); + AbsFileName.makeAbsolute(); + + llvm::DIFile F = DebugFactory.CreateFile(AbsFileName.getLast(), + AbsFileName.getDirname(), TheCU); DIFileCache[fname] = F; return F; @@ -174,25 +179,6 @@ unsigned CGDebugInfo::getColumnNumber(SourceLocation Loc) { return PLoc.getColumn(); } -llvm::StringRef CGDebugInfo::getCurrentDirname() { - if (!CWDName.empty()) - return CWDName; - char *CompDirnamePtr = NULL; - llvm::sys::Path CWD = llvm::sys::Path::GetCurrentDirectory(); - CompDirnamePtr = DebugInfoNames.Allocate<char>(CWD.size()); - memcpy(CompDirnamePtr, CWD.c_str(), CWD.size()); - return CWDName = llvm::StringRef(CompDirnamePtr, CWD.size()); -} - -/// getCompDirname - AT_comp_dir is empty if filename is absulte otherwise -/// it points to compilation directory. -llvm::StringRef CGDebugInfo::getCompDirname(llvm::StringRef Filename) { - llvm::sys::Path FilePath(Filename); - if (FilePath.isAbsolute()) - return llvm::StringRef(); - return getCurrentDirname(); -} - /// CreateCompileUnit - Create new compile unit. void CGDebugInfo::CreateCompileUnit() { @@ -202,22 +188,19 @@ void CGDebugInfo::CreateCompileUnit() { if (MainFileName.empty()) MainFileName = "<unknown>"; + llvm::sys::Path AbsFileName(MainFileName); + AbsFileName.makeAbsolute(); + // The main file name provided via the "-main-file-name" option contains just // the file name itself with no path information. This file name may have had // a relative path, so we look into the actual file entry for the main // file to determine the real absolute path for the file. std::string MainFileDir; - if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) { + if (const FileEntry *MainFile = SM.getFileEntryForID(SM.getMainFileID())) MainFileDir = MainFile->getDir()->getName(); - if (MainFileDir != ".") - MainFileName = MainFileDir + "/" + MainFileName; - } + else + MainFileDir = AbsFileName.getDirname(); - // Save filename string. - char *FilenamePtr = DebugInfoNames.Allocate<char>(MainFileName.length()); - memcpy(FilenamePtr, MainFileName.c_str(), MainFileName.length()); - llvm::StringRef Filename(FilenamePtr, MainFileName.length()); - unsigned LangTag; const LangOptions &LO = CGM.getLangOptions(); if (LO.CPlusPlus) { @@ -246,8 +229,7 @@ void CGDebugInfo::CreateCompileUnit() { // Create new compile unit. TheCU = DebugFactory.CreateCompileUnit( - LangTag, Filename, getCompDirname(Filename), - Producer, true, + LangTag, AbsFileName.getLast(), MainFileDir, Producer, true, LO.Optimize, CGM.getCodeGenOpts().DwarfDebugFlags, RuntimeVers); } |