[llvm] r336793 - Use debug-prefix-map for AT_NAME

via llvm-commits llvm-commits at lists.llvm.org
Wed Jul 11 12:08:11 PDT 2018


Filed PR38137 to track down why the backslashes are doubled.
--paulr

From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On Behalf Of via llvm-commits
Sent: Wednesday, July 11, 2018 2:57 PM
To: gkistanova at gmail.com; jonas at devlieghere.com
Cc: llvm-commits at lists.llvm.org
Subject: RE: [llvm] r336793 - Use debug-prefix-map for AT_NAME

For some reason in this test the backslash is doubled.  I think we may have an inconsistency somewhere in how we print filenames.
To get the bots happy I've updated the regexes in the test in r336832, but we should take a closer look and try to straighten this out.
--paulr

From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On Behalf Of Galina Kistanova via llvm-commits
Sent: Wednesday, July 11, 2018 2:14 PM
To: Jonas Devlieghere
Cc: Artur Pilipenko via llvm-commits
Subject: Re: [llvm] r336793 - Use debug-prefix-map for AT_NAME

Hello Jonas,

This commit broke one of our builders:
http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/18383
. . .
Failing Tests (1):
    LLVM :: MC/ELF/debug-prefix-map.s

Please have a look?
The builder was already red and did not send notifications.

Also at least one more builder is affected:
http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win/builds/10902

Thanks

Galina

On Wed, Jul 11, 2018 at 5:30 AM, Jonas Devlieghere via llvm-commits <llvm-commits at lists.llvm.org<mailto:llvm-commits at lists.llvm.org>> wrote:
Author: jdevlieghere
Date: Wed Jul 11 05:30:35 2018
New Revision: 336793

URL: http://llvm.org/viewvc/llvm-project?rev=336793&view=rev
Log:
Use debug-prefix-map for AT_NAME

AT_NAME was being emitted before the directory paths were remapped. This
ensures that all paths are remapped before anything is emitted.

An additional test case has been added.

Note that this only works if the replacement string is an absolute path.
If not, then AT_decl_file believes the new path is a relative path, and
joins that path with the compilation directory. I do not know of a good
way to resolve this.

Patch by: Siddhartha Bagaria (starsid)

Differential revision: https://reviews.llvm.org/D49169

Modified:
    llvm/trunk/include/llvm/MC/MCContext.h
    llvm/trunk/include/llvm/MC/MCDwarf.h
    llvm/trunk/lib/MC/MCContext.cpp
    llvm/trunk/lib/MC/MCDwarf.cpp
    llvm/trunk/lib/MC/MCObjectStreamer.cpp
    llvm/trunk/test/MC/ELF/debug-prefix-map.s

Modified: llvm/trunk/include/llvm/MC/MCContext.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCContext.h?rev=336793&r1=336792&r2=336793&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCContext.h (original)
+++ llvm/trunk/include/llvm/MC/MCContext.h Wed Jul 11 05:30:35 2018
@@ -502,11 +502,8 @@ namespace llvm {
     /// Add an entry to the debug prefix map.
     void addDebugPrefixMapEntry(const std::string &From, const std::string &To);

-    // Remaps the given path in-place as per the debug prefix map.
-    void RemapDebugPath(std::string *Path);
-
-    // Remaps the compilation dir as per the debug prefix map.
-    void RemapCompilationDir();
+    // Remaps all debug directory paths in-place as per the debug prefix map.
+    void RemapDebugPaths();

     /// Get the main file name for use in error messages and debug
     /// info. This can be set to ensure we've got the correct file name

Modified: llvm/trunk/include/llvm/MC/MCDwarf.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCDwarf.h?rev=336793&r1=336792&r2=336793&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCDwarf.h (original)
+++ llvm/trunk/include/llvm/MC/MCDwarf.h Wed Jul 11 05:30:35 2018
@@ -301,8 +301,6 @@ public:
                                FileNumber));
   }

-  void RemapDwarfDirs(MCContext &Context);
-
   void setRootFile(StringRef Directory, StringRef FileName,
                    MD5::MD5Result *Checksum, Optional<StringRef> Source) {
     Header.CompilationDir = Directory;

Modified: llvm/trunk/lib/MC/MCContext.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=336793&r1=336792&r2=336793&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCContext.cpp (original)
+++ llvm/trunk/lib/MC/MCContext.cpp Wed Jul 11 05:30:35 2018
@@ -540,19 +540,26 @@ void MCContext::addDebugPrefixMapEntry(c
   DebugPrefixMap.insert(std::make_pair(From, To));
 }

-void MCContext::RemapDebugPath(std::string *Path) {
-  for (const auto &Entry : DebugPrefixMap)
-    if (StringRef(*Path).startswith(Entry.first)) {
-      std::string RemappedPath =
-          (Twine(Entry.second) + Path->substr(Entry.first.size())).str();
-      Path->swap(RemappedPath);
-    }
-}
+void MCContext::RemapDebugPaths() {
+  const auto &DebugPrefixMap = this->DebugPrefixMap;
+  const auto RemapDebugPath = [&DebugPrefixMap](std::string &Path) {
+    for (const auto &Entry : DebugPrefixMap)
+      if (StringRef(Path).startswith(Entry.first)) {
+        std::string RemappedPath =
+            (Twine(Entry.second) + Path.substr(Entry.first.size())).str();
+        Path.swap(RemappedPath);
+      }
+  };

-void MCContext::RemapCompilationDir() {
+  // Remap compilation directory.
   std::string CompDir = CompilationDir.str();
-  RemapDebugPath(&CompDir);
+  RemapDebugPath(CompDir);
   CompilationDir = CompDir;
+
+  // Remap MCDwarfDirs in all compilation units.
+  for (auto &CUIDTablePair : MCDwarfLineTablesCUMap)
+    for (auto &Dir : CUIDTablePair.second.getMCDwarfDirs())
+      RemapDebugPath(Dir);
 }

 //===----------------------------------------------------------------------===//

Modified: llvm/trunk/lib/MC/MCDwarf.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCDwarf.cpp?rev=336793&r1=336792&r2=336793&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCDwarf.cpp (original)
+++ llvm/trunk/lib/MC/MCDwarf.cpp Wed Jul 11 05:30:35 2018
@@ -251,9 +251,7 @@ void MCDwarfLineTable::Emit(MCObjectStre

   // Handle the rest of the Compile Units.
   for (const auto &CUIDTablePair : LineTables) {
-    auto &LineTable = context.getMCDwarfLineTable(CUIDTablePair.first);
-    LineTable.RemapDwarfDirs(MCOS->getContext());
-    LineTable.EmitCU(MCOS, Params, LineStr);
+    CUIDTablePair.second.EmitCU(MCOS, Params, LineStr);
   }

   if (LineStr)
@@ -634,11 +632,6 @@ MCDwarfLineTableHeader::tryGetFile(Strin
   return FileNumber;
 }

-void MCDwarfLineTable::RemapDwarfDirs(MCContext &Context) {
-  for (auto &Dir : Header.MCDwarfDirs)
-    Context.RemapDebugPath(&Dir);
-}
-
 /// Utility function to emit the encoding to a streamer.
 void MCDwarfLineAddr::Emit(MCStreamer *MCOS, MCDwarfLineTableParams Params,
                            int64_t LineDelta, uint64_t AddrDelta) {

Modified: llvm/trunk/lib/MC/MCObjectStreamer.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCObjectStreamer.cpp?rev=336793&r1=336792&r2=336793&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCObjectStreamer.cpp (original)
+++ llvm/trunk/lib/MC/MCObjectStreamer.cpp Wed Jul 11 05:30:35 2018
@@ -661,8 +661,7 @@ void MCObjectStreamer::EmitFileDirective
 }

 void MCObjectStreamer::FinishImpl() {
-  // Remap the compilation directory before emitting.
-  getContext().RemapCompilationDir();
+  getContext().RemapDebugPaths();

   // If we are generating dwarf for assembly source files dump out the sections.
   if (getContext().getGenDwarfForAssembly())

Modified: llvm/trunk/test/MC/ELF/debug-prefix-map.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ELF/debug-prefix-map.s?rev=336793&r1=336792&r2=336793&view=diff
==============================================================================
--- llvm/trunk/test/MC/ELF/debug-prefix-map.s (original)
+++ llvm/trunk/test/MC/ELF/debug-prefix-map.s Wed Jul 11 05:30:35 2018
@@ -4,9 +4,13 @@

 // RUN: llvm-mc -triple=x86_64-linux-unknown -g src.s -filetype=obj -o out.o
 // RUN: llvm-dwarfdump -v -debug-info out.o | FileCheck --check-prefix=NO_MAP %s
+
 // RUN: llvm-mc -triple=x86_64-linux-unknown -g src.s -filetype=obj -o out.o -fdebug-prefix-map=%t.foo=src_root
 // RUN: llvm-dwarfdump -v -debug-info out.o | FileCheck --check-prefix=MAP --implicit-check-not ".foo" %s

+// RUN: llvm-mc -triple=x86_64-linux-unknown -g %t.foo/src.s -filetype=obj -o out.o -fdebug-prefix-map=%t.foo=/src_root
+// RUN: llvm-dwarfdump -v -debug-info out.o | FileCheck --check-prefix=MAP_ABS --implicit-check-not ".foo" %s
+
 f:
   nop

@@ -15,3 +19,7 @@ f:
 // MAP: DW_AT_name [DW_FORM_string] ("src.s")
 // MAP: DW_AT_comp_dir [DW_FORM_string] ("src_root")
 // MAP: DW_AT_decl_file [DW_FORM_data4] ("src_root{{(/|\\)}}src.s")
+
+// MAP_ABS: DW_AT_name [DW_FORM_string] ("{{/|\\}}src_root{{(/|\\)}}src.s")
+// MAP_ABS: DW_AT_comp_dir [DW_FORM_string] ("{{/|\\}}src_root")
+// MAP_ABS: DW_AT_decl_file [DW_FORM_data4] ("{{/|\\}}src_root{{(/|\\)}}src.s")


_______________________________________________
llvm-commits mailing list
llvm-commits at lists.llvm.org<mailto:llvm-commits at lists.llvm.org>
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180711/b3356ec6/attachment.html>


More information about the llvm-commits mailing list