[PATCH] D73583: Handle non-absolute include dirs properly for both dwarf4 and dwarf5.

Sterling Augustine via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jan 29 10:54:06 PST 2020


This revision was automatically updated to reflect the committed changes.
Closed by commit rG0758ac4e0cfb: Handle non-absolute include dirs properly for both dwarf4 and dwarf5. (authored by saugustine).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D73583/new/

https://reviews.llvm.org/D73583

Files:
  llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
  llvm/test/DebugInfo/symbolize-paths.s


Index: llvm/test/DebugInfo/symbolize-paths.s
===================================================================
--- /dev/null
+++ llvm/test/DebugInfo/symbolize-paths.s
@@ -0,0 +1,72 @@
+# REQUIRES: x86-registered-target
+
+# RUN: llvm-mc -filetype=obj -triple=x86_64 -dwarf-version=4 %s -o %t.o
+# RUN: llvm-symbolizer --obj=%t.o --functions=none 0 1 | FileCheck %s
+# RUN: llvm-mc -filetype=obj -triple=x86_64 -dwarf-version=5 %s -o %t.o
+# RUN: llvm-symbolizer --obj=%t.o --functions=none 0 1 | FileCheck %s
+
+# Absolute include-dirs should not have comp-dir prepended
+# CHECK: /absolute{{/|\\|\\\\}}1.cc:1:0
+# Relative include-dirs should have comp-dir prepended	
+# CHECK: /comp_dir/relative{{/|\\|\\\\}}2.cc:2:1
+
+.Lfunc_begin0:
+  .file 1 "/absolute" "1.cc"
+  .file 2 "relative" "2.cc"
+  .loc 1 1 0                 # 1.cc:1:0
+  nop
+  .loc 2 2 1                 # 2.cc:2:1
+  nop
+  .loc 1 1 1 prologue_end    # 1.cc:1:1
+.Lfunc_end0:
+
+.section .debug_abbrev,"", at progbits
+  .byte 1     # Abbreviation Code
+  .byte 17    # DW_TAG_compile_unit
+  .byte 1     # DW_children_yes
+  .byte 16    # DW_AT_stmt_list
+  .byte 23    # DW_FROM_sec_offset
+  .byte 17    # DW_AT_low_pc
+  .byte 1     # DW_FORM_addr
+  .byte 18    # DW_AT_high_pc
+  .byte 6     # DW_FORM_data4
+  .byte 27    # DW_AT_comp_dir
+  .byte 8     # DW_FORM_string	
+  .byte 0     # EOM(1)
+  .byte 0     # EOM(2)
+
+  .byte 2     # Abbreviation Code
+  .byte 46    # DW_TAG_subprogram
+  .byte 0     # DW_children_no
+  .byte 3     # DW_AT_name
+  .byte 8     # DW_FORM_string
+  .byte 17    # DW_AT_low_pc
+  .byte 1     # DW_FORM_addr
+  .byte 18    # DW_AT_high_pc
+  .byte 6     # DW_FORM_data4
+  .byte 27    # DW_AT_comp_dir
+  .byte 8     # DW_FORM_string	
+  .byte 0     # EOM(1)
+  .byte 0     # EOM(2)
+
+  .byte 0     # EOM(3)
+
+.section .debug_info,"", at progbits
+.Lcu_begin0:
+  .long .Lcu_end0-.Lcu_begin0-4 # Length of Unit
+  .short 5                      # DWARF version number
+  .byte 1                       # DWARF Unit Type
+  .byte 8                       # Address Size (in bytes)
+  .long .debug_abbrev           # Offset Into Abbrev.
+  .byte 1                       # Abbrev [1]
+  .long 0                       # DW_AT_stmt_list
+  .quad 0                       # DW_AT_low_pc
+  .long 2                       # DW_AT_high_pc
+  .asciz "/comp_dir"            # DW_AT_comp_dir	
+  .byte 2                       # Abbrev [2] DW_TAG_subprogram
+  .asciz "1.c"                  # DW_AT_name
+  .quad 0                       # DW_AT_low_pc
+  .long 2                       # DW_AT_high_pc
+  .asciz "/comp_dir"            # DW_AT_comp_dir	
+  .byte 0
+.Lcu_end0:
Index: llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
===================================================================
--- llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
+++ llvm/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
@@ -1090,13 +1090,12 @@
     if (0 < Entry.DirIdx && Entry.DirIdx <= IncludeDirectories.size())
       IncludeDir =
           IncludeDirectories[Entry.DirIdx - 1].getAsCString().getValue();
-
-    // We may still need to append compilation directory of compile unit.
-    // 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.empty() && !isPathAbsoluteOnWindowsOrPosix(IncludeDir))
-      sys::path::append(FilePath, Style, CompDir);
   }
+  // We may still need to append compilation directory of compile unit.
+  // 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.empty() && !isPathAbsoluteOnWindowsOrPosix(IncludeDir))
+    sys::path::append(FilePath, Style, CompDir);
 
   // sys::path::append skips empty strings.
   sys::path::append(FilePath, Style, IncludeDir, FileName);


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73583.241224.patch
Type: text/x-patch
Size: 3869 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20200129/1bd4858a/attachment.bin>


More information about the llvm-commits mailing list