[llvm] r327430 - Handle mixed-OS paths in DWARF reader

Pavel Labath via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 21 03:43:08 PDT 2018


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.


On Mon, 19 Mar 2018 at 18:06, Eugene Zemtsov via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> It is possible. I think that binary based tests should be avoided when
> possible, because they are hard to read and support.
> But I admit that this test turned out to be somewhat clumsy and not very
> robust.
> ​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.
>
> On Mon, Mar 19, 2018 at 9:27 AM David Blaikie <dblaikie at gmail.com> wrote:
>
>> 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?)
>>
>> On Tue, Mar 13, 2018 at 10:56 AM Eugene Zemtsov via llvm-commits <
>> llvm-commits at lists.llvm.org> wrote:
>>
>>> Author: eugene
>>> Date: Tue Mar 13 10:54:29 2018
>>> New Revision: 327430
>>>
>>> URL: http://llvm.org/viewvc/llvm-project?rev=327430&view=rev
>>> Log:
>>> Handle mixed-OS paths in DWARF reader
>>>
>>> Make sure that DWARF line information generated by Windows can be
>>> properly read by Posix OS and vice versa.
>>>
>>> Differential Revision: https://reviews.llvm.org/D44290
>>>
>>> Added:
>>>     llvm/trunk/test/DebugInfo/debuglineinfo-path.ll
>>> Modified:
>>>     llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
>>>
>>> Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp?rev=327430&r1=327429&r2=327430&view=diff
>>>
>>> ==============================================================================
>>> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp (original)
>>> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp Tue Mar 13
>>> 10:54:29 2018
>>> @@ -956,6 +956,14 @@ Optional<StringRef> DWARFDebugLine::Line
>>>    return None;
>>>  }
>>>
>>> +static bool isPathAbsoluteOnWindowsOrPosix(const Twine &Path) {
>>> +  // Debug info can contain paths from any OS, not necessarily
>>> +  // an OS we're currently running on. Moreover different compilation
>>> units can
>>> +  // be compiled on different operating systems and linked together
>>> later.
>>> +  return sys::path::is_absolute(Path, sys::path::Style::posix) ||
>>> +         sys::path::is_absolute(Path, sys::path::Style::windows);
>>> +}
>>> +
>>>  bool DWARFDebugLine::LineTable::getFileNameByIndex(uint64_t FileIndex,
>>>                                                     const char *CompDir,
>>>                                                     FileLineInfoKind
>>> Kind,
>>> @@ -965,7 +973,7 @@ bool DWARFDebugLine::LineTable::getFileN
>>>    const FileNameEntry &Entry = Prologue.FileNames[FileIndex - 1];
>>>    StringRef FileName = Entry.Name.getAsCString().getValue();
>>>    if (Kind != FileLineInfoKind::AbsoluteFilePath ||
>>> -      sys::path::is_absolute(FileName)) {
>>> +      isPathAbsoluteOnWindowsOrPosix(FileName)) {
>>>      Result = FileName;
>>>      return true;
>>>    }
>>> @@ -984,7 +992,7 @@ bool DWARFDebugLine::LineTable::getFileN
>>>    // We know that FileName is not absolute, the only way to have an
>>>    // absolute path at this point would be if IncludeDir is absolute.
>>>    if (CompDir && Kind == FileLineInfoKind::AbsoluteFilePath &&
>>> -      sys::path::is_relative(IncludeDir))
>>> +      !isPathAbsoluteOnWindowsOrPosix(IncludeDir))
>>>      sys::path::append(FilePath, CompDir);
>>>
>>>    // sys::path::append skips empty strings.
>>>
>>> Added: llvm/trunk/test/DebugInfo/debuglineinfo-path.ll
>>> URL:
>>> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/debuglineinfo-path.ll?rev=327430&view=auto
>>>
>>> ==============================================================================
>>> --- llvm/trunk/test/DebugInfo/debuglineinfo-path.ll (added)
>>> +++ llvm/trunk/test/DebugInfo/debuglineinfo-path.ll Tue Mar 13 10:54:29
>>> 2018
>>> @@ -0,0 +1,78 @@
>>> +; Make sure that absolute source dir is detected correctly regardless
>>> of the platform.
>>> +; REQUIRES: object-emission
>>> +; RUN: %llc_dwarf -filetype=obj -o %t < %s
>>> +; RUN: echo -n 0x > %t.posix_relative_func
>>> +; RUN: echo -n 0x > %t.posix_absolute_func
>>> +; RUN: echo -n 0x > %t.win_func
>>> +; RUN: llvm-nm %t | grep posix_absolute_func >> %t.posix_absolute_func
>>> +; RUN: llvm-nm %t | grep posix_relative_func >> %t.posix_relative_func
>>> +; RUN: llvm-nm %t | grep win_func  >> %t.win_func
>>> +; RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false
>>> --obj %t < %t.posix_absolute_func | FileCheck %s --check-prefix=POSIX_A
>>> +; RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false
>>> --obj %t < %t.posix_relative_func | FileCheck %s --check-prefix=POSIX_R
>>> +; RUN: llvm-symbolizer --functions=linkage --inlining --demangle=false
>>> --obj %t < %t.win_func | FileCheck %s --check-prefix=WIN
>>> +
>>> +;POSIX_A: posix_absolute_func
>>> +;POSIX_A: /absolute/posix/path{{[\/]}}posix.c
>>> +
>>> +;POSIX_R: posix_relative_func
>>> +;POSIX_R: /ABSOLUTE/CU/PATH{{[\/]}}relative/posix/path{{[\/]}}posix2.c
>>> +
>>> +;WIN: win_func
>>> +;WIN: E:\absolute\windows\path{{[\/]}}win.c
>>> +
>>> +
>>> +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>>> +target triple = "x86_64-pc-linux-gnu"
>>> +
>>> +define i32 @win_func() #0 !dbg !54 {
>>> +  ret i32 5, !dbg !511
>>> +}
>>> +
>>> +define i32 @posix_absolute_func() #0 !dbg !34 {
>>> +  ret i32 3, !dbg !311
>>> +}
>>> +
>>> +define i32 @posix_relative_func() #0 !dbg !44 {
>>> +  ret i32 4, !dbg !411
>>> +}
>>> +
>>> +!llvm.dbg.cu = !{!50, !30, !40}
>>> +!llvm.module.flags = !{!8, !9}
>>> +!llvm.ident = !{!10}
>>> +!8 = !{i32 2, !"Dwarf Version", i32 4}
>>> +!9 = !{i32 2, !"Debug Info Version", i32 3}
>>> +!10 = !{!"clang"}
>>> +
>>> +!50 = distinct !DICompileUnit(language: DW_LANG_C99, file: !512,
>>> producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1,
>>> enums: !52)
>>> +!51 = !DIFile(filename: "win.c", directory:
>>> "E:\\absolute\\windows\\path")
>>> +!52 = !{}
>>> +!53 = !{!54}
>>> +!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)
>>> +!55 = !DISubroutineType(types: !56)
>>> +!56 = !{!57}
>>> +!57 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>>> DW_ATE_signed)
>>> +!511 = !DILocation(line: 55, column: 2, scope: !54)
>>> +!512 = !DIFile(filename: "a.c", directory: "/WIN_CU/PATH")
>>> +
>>> +!30 = distinct !DICompileUnit(language: DW_LANG_C99, file: !312,
>>> producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1,
>>> enums: !32)
>>> +!31 = !DIFile(filename: "posix.c", directory: "/absolute/posix/path")
>>> +!32 = !{}
>>> +!33 = !{!34}
>>> +!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)
>>> +!35 = !DISubroutineType(types: !36)
>>> +!36 = !{!37}
>>> +!37 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>>> DW_ATE_signed)
>>> +!311 = !DILocation(line: 33, column: 2, scope: !34)
>>> +!312 = !DIFile(filename: "b.c", directory: "/POSIX_CU/PATH")
>>> +
>>> +!40 = distinct !DICompileUnit(language: DW_LANG_C99, file: !412,
>>> producer: "clang", isOptimized: false, runtimeVersion: 0, emissionKind: 1,
>>> enums: !42)
>>> +!41 = !DIFile(filename: "posix2.c", directory: "relative/posix/path")
>>> +!42 = !{}
>>> +!43 = !{!44}
>>> +!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)
>>> +!45 = !DISubroutineType(types: !46)
>>> +!46 = !{!47}
>>> +!47 = !DIBasicType(name: "int", size: 32, align: 32, encoding:
>>> DW_ATE_signed)
>>> +!411 = !DILocation(line: 44, column: 2, scope: !44)
>>> +!412 = !DIFile(filename: "c.c", directory: "/ABSOLUTE/CU/PATH")
>>> +
>>>
>>>
>>> _______________________________________________
>>> llvm-commits mailing list
>>> llvm-commits at lists.llvm.org
>>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>>
>>
>
> --
> Thanks,
> Eugene Zemtsov.
> _______________________________________________
> llvm-commits mailing list
> 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/20180321/eced84ea/attachment.html>


More information about the llvm-commits mailing list