<div dir="ltr">A .s file might be a suitable middle ground for this test. With a .s file, it should be possible to hardcode all the function offsets in the test, while still preserving a human-readable (and with difficulties, human-editable) input.</div><br><br><div class="gmail_quote"><div dir="ltr">On Mon, 19 Mar 2018 at 18:06, Eugene Zemtsov via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:verdana,sans-serif">It is possible. I think that binary based tests should be avoided when possible, because they are hard to read and support. </div><div class="gmail_default" style="font-family:verdana,sans-serif">But I admit that this test turned out to be somewhat clumsy and not very robust. <br></div><div><div class="gmail_default" style="font-family:verdana,sans-serif">​So at this point I don't feel strongly either way. I can certainly check in an ELF binary if you think it's better in this case.</div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Mar 19, 2018 at 9:27 AM David Blaikie <<a href="mailto:dblaikie@gmail.com" target="_blank">dblaikie@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Would it be possible to test this like most/all the other llvm-symbolizer tests, using checked in binaries, rather than generating, grepping for symbol addresses, etc? (that might fix the PowerPC portability problem, too?)</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Mar 13, 2018 at 10:56 AM Eugene Zemtsov via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: eugene<br>
Date: Tue Mar 13 10:54:29 2018<br>
New Revision: 327430<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=327430&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=327430&view=rev</a><br>
Log:<br>
Handle mixed-OS paths in DWARF reader<br>
<br>
Make sure that DWARF line information generated by Windows can be properly read by Posix OS and vice versa.<br>
<br>
Differential Revision: <a href="https://reviews.llvm.org/D44290" rel="noreferrer" target="_blank">https://reviews.llvm.org/D44290</a><br>
<br>
Added:<br>
    llvm/trunk/test/DebugInfo/debuglineinfo-path.ll<br>
Modified:<br>
    llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp<br>
<br>
Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp?rev=327430&r1=327429&r2=327430&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp?rev=327430&r1=327429&r2=327430&view=diff</a><br>
==============================================================================<br>
--- llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp (original)<br>
+++ llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp Tue Mar 13 10:54:29 2018<br>
@@ -956,6 +956,14 @@ Optional<StringRef> DWARFDebugLine::Line<br>
   return None;<br>
 }<br>
<br>
+static bool isPathAbsoluteOnWindowsOrPosix(const Twine &Path) {<br>
+  // Debug info can contain paths from any OS, not necessarily<br>
+  // an OS we're currently running on. Moreover different compilation units can<br>
+  // be compiled on different operating systems and linked together later.<br>
+  return sys::path::is_absolute(Path, sys::path::Style::posix) ||<br>
+         sys::path::is_absolute(Path, sys::path::Style::windows);<br>
+}<br>
+<br>
 bool DWARFDebugLine::LineTable::getFileNameByIndex(uint64_t FileIndex,<br>
                                                    const char *CompDir,<br>
                                                    FileLineInfoKind Kind,<br>
@@ -965,7 +973,7 @@ bool DWARFDebugLine::LineTable::getFileN<br>
   const FileNameEntry &Entry = Prologue.FileNames[FileIndex - 1];<br>
   StringRef FileName = Entry.Name.getAsCString().getValue();<br>
   if (Kind != FileLineInfoKind::AbsoluteFilePath ||<br>
-      sys::path::is_absolute(FileName)) {<br>
+      isPathAbsoluteOnWindowsOrPosix(FileName)) {<br>
     Result = FileName;<br>
     return true;<br>
   }<br>
@@ -984,7 +992,7 @@ bool DWARFDebugLine::LineTable::getFileN<br>
   // We know that FileName is not absolute, the only way to have an<br>
   // absolute path at this point would be if IncludeDir is absolute.<br>
   if (CompDir && Kind == FileLineInfoKind::AbsoluteFilePath &&<br>
-      sys::path::is_relative(IncludeDir))<br>
+      !isPathAbsoluteOnWindowsOrPosix(IncludeDir))<br>
     sys::path::append(FilePath, CompDir);<br>
<br>
   // sys::path::append skips empty strings.<br>
<br>
Added: llvm/trunk/test/DebugInfo/debuglineinfo-path.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/debuglineinfo-path.ll?rev=327430&view=auto" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/debuglineinfo-path.ll?rev=327430&view=auto</a><br>
==============================================================================<br>
--- llvm/trunk/test/DebugInfo/debuglineinfo-path.ll (added)<br>
+++ llvm/trunk/test/DebugInfo/debuglineinfo-path.ll Tue Mar 13 10:54:29 2018<br>
@@ -0,0 +1,78 @@<br>
+; Make sure that absolute source dir is detected correctly regardless of the platform.<br>
+; REQUIRES: object-emission<br>
+; RUN: %llc_dwarf -filetype=obj -o %t < %s<br>
+; RUN: echo -n 0x > %t.posix_relative_func<br>
+; RUN: echo -n 0x > %t.posix_absolute_func<br>
+; RUN: echo -n 0x > %t.win_func<br>
+; RUN: llvm-nm %t | grep posix_absolute_func >> %t.posix_absolute_func<br>
+; RUN: llvm-nm %t | grep posix_relative_func >> %t.posix_relative_func<br>
+; RUN: llvm-nm %t | grep win_func  >> %t.win_func<br>
+; RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false --obj %t < %t.posix_absolute_func | FileCheck %s --check-prefix=POSIX_A<br>
+; RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false --obj %t < %t.posix_relative_func | FileCheck %s --check-prefix=POSIX_R<br>
+; RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false --obj %t < %t.win_func | FileCheck %s --check-prefix=WIN<br>
+<br>
+;POSIX_A: posix_absolute_func<br>
+;POSIX_A: /absolute/posix/path{{[\/]}}posix.c<br>
+<br>
+;POSIX_R: posix_relative_func<br>
+;POSIX_R: /ABSOLUTE/CU/PATH{{[\/]}}relative/posix/path{{[\/]}}posix2.c<br>
+<br>
+;WIN: win_func<br>
+;WIN: E:\absolute\windows\path{{[\/]}}win.c<br>
+<br>
+<br>
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"<br>
+target triple = "x86_64-pc-linux-gnu"<br>
+<br>
+define i32 @win_func() #0 !dbg !54 {<br>
+  ret i32 5, !dbg !511<br>
+}<br>
+<br>
+define i32 @posix_absolute_func() #0 !dbg !34 {<br>
+  ret i32 3, !dbg !311<br>
+}<br>
+<br>
+define i32 @posix_relative_func() #0 !dbg !44 {<br>
+  ret i32 4, !dbg !411<br>
+}<br>
+<br>
+!<a href="http://llvm.dbg.cu" rel="noreferrer" target="_blank">llvm.dbg.cu</a> = !{!50, !30, !40}<br>
+!llvm.module.flags = !{!8, !9}<br>
+!llvm.ident = !{!10}<br>
+!8 = !{i32 2, !"Dwarf Version", i32 4}<br>
+!9 = !{i32 2, !"Debug Info Version", i32 3}<br>
+!10 = !{!"clang"}<br>
+<br>
+!50 = distinct !DICompileUnit(language: DW_LANG_C99, file: !512, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !52)<br>
+!51 = !DIFile(filename: "win.c", directory: "E:\\absolute\\windows\\path")<br>
+!52 = !{}<br>
+!53 = !{!54}<br>
+!54 = distinct !DISubprogram(name: "win_func", scope: !51, file: !51, line: 55, type: !55, unit: !50, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, variables: !52)<br>
+!55 = !DISubroutineType(types: !56)<br>
+!56 = !{!57}<br>
+!57 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)<br>
+!511 = !DILocation(line: 55, column: 2, scope: !54)<br>
+!512 = !DIFile(filename: "a.c", directory: "/WIN_CU/PATH")<br>
+<br>
+!30 = distinct !DICompileUnit(language: DW_LANG_C99, file: !312, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !32)<br>
+!31 = !DIFile(filename: "posix.c", directory: "/absolute/posix/path")<br>
+!32 = !{}<br>
+!33 = !{!34}<br>
+!34 = distinct !DISubprogram(name: "posix_absolute_func", scope: !31, file: !31, line: 33, type: !35, unit: !30, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, variables: !32)<br>
+!35 = !DISubroutineType(types: !36)<br>
+!36 = !{!37}<br>
+!37 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)<br>
+!311 = !DILocation(line: 33, column: 2, scope: !34)<br>
+!312 = !DIFile(filename: "b.c", directory: "/POSIX_CU/PATH")<br>
+<br>
+!40 = distinct !DICompileUnit(language: DW_LANG_C99, file: !412, producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1, enums: !42)<br>
+!41 = !DIFile(filename: "posix2.c", directory: "relative/posix/path")<br>
+!42 = !{}<br>
+!43 = !{!44}<br>
+!44 = distinct !DISubprogram(name: "posix_relative_func", scope: !41, file: !41, line: 44, type: !45, unit: !40, isLocal: false, isDefinition: true, scopeLine: 1, isOptimized: false, variables: !42)<br>
+!45 = !DISubroutineType(types: !46)<br>
+!46 = !{!47}<br>
+!47 = !DIBasicType(name: "int", size: 32, align: 32, encoding: DW_ATE_signed)<br>
+!411 = !DILocation(line: 44, column: 2, scope: !44)<br>
+!412 = !DIFile(filename: "c.c", directory: "/ABSOLUTE/CU/PATH")<br>
+<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>
</blockquote></div><br clear="all"><div><br></div>-- <br><div dir="ltr" class="m_-8025745424907836733gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><font face="verdana, sans-serif">Thanks,</font><div><font face="verdana, sans-serif">Eugene Zemtsov.</font></div></div></div></div>
_______________________________________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div>