Add support for emitting .file directives to set up file numbers for
authorDan Gohman <gohman@apple.com>
Mon, 24 Sep 2007 21:32:18 +0000 (21:32 +0000)
committerDan Gohman <gohman@apple.com>
Mon, 24 Sep 2007 21:32:18 +0000 (21:32 +0000)
use with .loc directives.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42275 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/DwarfWriter.cpp

index e9cb69214f41dc30bb701bc7fdb9b6b9a6c063e1..0358332ade5ba1b2d91db310eecec972f037bf12 100644 (file)
@@ -28,6 +28,7 @@
 #include "llvm/Support/CommandLine.h"
 #include "llvm/Support/DataTypes.h"
 #include "llvm/Support/Mangler.h"
+#include "llvm/System/Path.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/MRegisterInfo.h"
 #include "llvm/Target/TargetData.h"
@@ -1967,6 +1968,19 @@ private:
     if (didInitial) return;
     didInitial = true;
     
+    // Print out .file directives to specify files for .loc directives.
+    if (TAI->hasDotLocAndDotFile()) {
+      const UniqueVector<SourceFileInfo> &SourceFiles = MMI->getSourceFiles();
+      const UniqueVector<std::string> &Directories = MMI->getDirectories();
+      for (unsigned i = 1, e = SourceFiles.size(); i <= e; ++i) {
+        sys::Path FullPath(Directories[SourceFiles[i].getDirectoryID()]);
+        bool AppendOk = FullPath.appendComponent(SourceFiles[i].getName());
+        assert(AppendOk && "Could not append filename to directory!");
+        Asm->EmitFile(i, FullPath.toString());
+        Asm->EOL();
+      }
+    }
+
     // Dwarf sections base addresses.
     if (TAI->doesDwarfRequireFrameSection()) {
       Asm->SwitchToDataSection(TAI->getDwarfFrameSection());