]> granicus.if.org Git - llvm/commitdiff
Revert "[llvm] Reapply "Prevent duplicate files in debug line header in dwarf 5.""
authorAli Tamur <tamur@google.com>
Tue, 26 Mar 2019 20:05:27 +0000 (20:05 +0000)
committerAli Tamur <tamur@google.com>
Tue, 26 Mar 2019 20:05:27 +0000 (20:05 +0000)
This reverts commit rL357020.

The commit broke the test llvm/test/tools/llvm-objdump/embedded-source.test
on some builds including clang-ppc64be-linux-multistage,
clang-s390x-linux, clang-with-lto-ubuntu, clang-x64-windows-msvc,
llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast (and others).

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

14 files changed:
include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
include/llvm/MC/MCContext.h
include/llvm/MC/MCDwarf.h
lib/CodeGen/AsmPrinter/DwarfCompileUnit.h
lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/CodeGen/AsmPrinter/DwarfUnit.cpp
lib/DebugInfo/DWARF/DWARFDebugLine.cpp
lib/MC/MCContext.cpp
lib/MC/MCDwarf.cpp
test/MC/ARM/dwarf-asm-multiple-sections.s
test/MC/ELF/debug-mixed-md5.ll
test/MC/ELF/dwarf-file0.s
test/tools/llvm-objdump/Inputs/embedded-source
test/tools/llvm-objdump/X86/function-sections-line-numbers.s

index 6247c31d7176c3337f268eafe162e19639a80734..1f36e0daed0c553c59b09c77edaca0a51324ee0b 100644 (file)
@@ -275,8 +275,6 @@ public:
     SequenceVector Sequences;
 
   private:
-    const llvm::DWARFDebugLine::FileNameEntry &
-    getFileNameEntry(uint64_t Index) const;
     uint32_t findRowInSeq(const DWARFDebugLine::Sequence &Seq,
                           object::SectionedAddress Address) const;
     Optional<StringRef>
index 6beb646396453579c7a65f4e8dcde93579a6e592..c87df5a82ce2170dc3554601dc0487cd34dec6f7 100644 (file)
@@ -521,7 +521,7 @@ namespace llvm {
     }
 
     MCDwarfLineTable &getMCDwarfLineTable(unsigned CUID) {
-      return MCDwarfLineTablesCUMap.emplace(CUID, DwarfVersion).first->second;
+      return MCDwarfLineTablesCUMap[CUID];
     }
 
     const MCDwarfLineTable &getMCDwarfLineTable(unsigned CUID) const {
index 70624d0a4df5c79ebaff4f685c038464d6153c20..991ad525f89c81401d7453f97c7f7ee830df2d1a 100644 (file)
@@ -218,11 +218,9 @@ struct MCDwarfLineTableHeader {
 private:
   bool HasAllMD5 = true;
   bool HasAnyMD5 = false;
-  unsigned DwarfVersion;
 
 public:
-  explicit MCDwarfLineTableHeader(unsigned DwarfVersion) :
-    DwarfVersion(DwarfVersion) {}
+  MCDwarfLineTableHeader() = default;
 
   Expected<unsigned> tryGetFile(StringRef &Directory, StringRef &FileName,
                                 MD5::MD5Result *Checksum,
@@ -247,17 +245,6 @@ public:
     return MCDwarfFiles.empty() || (HasAllMD5 == HasAnyMD5);
   }
 
-  void setRootFile(StringRef Directory, StringRef FileName,
-                   MD5::MD5Result *Checksum, Optional<StringRef> Source) {
-    CompilationDir = Directory;
-    RootFile.Name = FileName;
-    RootFile.DirIndex = 0;
-    RootFile.Checksum = Checksum;
-    RootFile.Source = Source;
-    trackMD5Usage(Checksum);
-    HasSource = Source.hasValue();
-  }
-
 private:
   void emitV2FileDirTables(MCStreamer *MCOS) const;
   void emitV5FileDirTables(MCStreamer *MCOS, Optional<MCDwarfLineStr> &LineStr,
@@ -268,8 +255,6 @@ class MCDwarfDwoLineTable {
   MCDwarfLineTableHeader Header;
 
 public:
-  MCDwarfDwoLineTable(unsigned DwarfVersion) : Header(DwarfVersion) {}
-
   void maybeSetRootFile(StringRef Directory, StringRef FileName,
                         MD5::MD5Result *Checksum, Optional<StringRef> Source) {
     if (!Header.RootFile.Name.empty())
@@ -297,7 +282,6 @@ class MCDwarfLineTable {
   MCLineSection MCLineSections;
 
 public:
-  MCDwarfLineTable(unsigned DwarfVersion) : Header(DwarfVersion) {}
   // This emits the Dwarf file and the line tables for all Compile Units.
   static void Emit(MCObjectStreamer *MCOS, MCDwarfLineTableParams Params);
 
index 683d3245e5605c4f338fe604c64402c8a98a01da..d9addb52376a47325943f5e2b34bf16b5193cf97 100644 (file)
@@ -101,7 +101,6 @@ class DwarfCompileUnit final : public DwarfUnit {
   }
 
 public:
-  unsigned getDwarfVersion() const { return DD->getDwarfVersion(); }
   DwarfCompileUnit(unsigned UID, const DICompileUnit *Node, AsmPrinter *A,
                    DwarfDebug *DW, DwarfFile *DWU);
 
index 226014cf0bb4f8758f4c6af48d9072d4513a94cd..0e0a5b24864763eec1d701ad1cac7d53f3ce7812 100644 (file)
@@ -319,7 +319,6 @@ DwarfDebug::DwarfDebug(AsmPrinter *A, Module *M)
     : DebugHandlerBase(A), DebugLocs(A->OutStreamer->isVerboseAsm()),
       InfoHolder(A, "info_string", DIEValueAllocator),
       SkeletonHolder(A, "skel_string", DIEValueAllocator),
-      SplitTypeUnitFileTable(A->getDwarfVersion()),
       IsDarwin(A->TM.getTargetTriple().isOSDarwin()) {
   const Triple &TT = Asm->TM.getTargetTriple();
 
index 5d8e236a6b3683c9b9b45a145ec351e2391b0bd4..6e547469c24c7b3243a8ac815f63edadcf36428b 100644 (file)
@@ -397,6 +397,7 @@ void DwarfUnit::addSourceLine(DIE &Die, unsigned Line, const DIFile *File) {
     return;
 
   unsigned FileID = getOrCreateSourceID(File);
+  assert(FileID && "Invalid file id");
   addUInt(Die, dwarf::DW_AT_decl_file, None, FileID);
   addUInt(Die, dwarf::DW_AT_decl_line, None, Line);
 }
index 6ad06a8553ea2920b95f0c49317c174cea78400c..534201877730c950d31c26efce99160b16444328 100644 (file)
@@ -1017,28 +1017,14 @@ bool DWARFDebugLine::LineTable::lookupAddressRangeImpl(
 }
 
 bool DWARFDebugLine::LineTable::hasFileAtIndex(uint64_t FileIndex) const {
-  uint16_t DwarfVersion = Prologue.getVersion();
-  assert(DwarfVersion != 0 && "LineTable has no dwarf version information");
-  if (DwarfVersion >= 5)
-    return FileIndex < Prologue.FileNames.size();
-  else
-    return FileIndex != 0 && FileIndex <= Prologue.FileNames.size();
-}
-const llvm::DWARFDebugLine::FileNameEntry &
-DWARFDebugLine::LineTable::getFileNameEntry(uint64_t Index) const {
-  uint16_t DwarfVersion = Prologue.getVersion();
-  assert(DwarfVersion != 0 && "LineTable has no dwarf version information");
-  if (DwarfVersion >= 5)
-    return Prologue.FileNames[Index];
-  else
-    return Prologue.FileNames[Index - 1];
+  return FileIndex != 0 && FileIndex <= Prologue.FileNames.size();
 }
 
 Optional<StringRef> DWARFDebugLine::LineTable::getSourceByIndex(uint64_t FileIndex,
                                                                 FileLineInfoKind Kind) const {
   if (Kind == FileLineInfoKind::None || !hasFileAtIndex(FileIndex))
     return None;
-  const FileNameEntry &Entry = getFileNameEntry(FileIndex);
+  const FileNameEntry &Entry = Prologue.FileNames[FileIndex - 1];
   if (Optional<const char *> source = Entry.Source.getAsCString())
     return StringRef(*source);
   return None;
@@ -1058,7 +1044,7 @@ bool DWARFDebugLine::LineTable::getFileNameByIndex(uint64_t FileIndex,
                                                    std::string &Result) const {
   if (Kind == FileLineInfoKind::None || !hasFileAtIndex(FileIndex))
     return false;
-  const FileNameEntry &Entry = getFileNameEntry(FileIndex);
+  const FileNameEntry &Entry = Prologue.FileNames[FileIndex - 1];
   StringRef FileName = Entry.Name.getAsCString().getValue();
   if (Kind != FileLineInfoKind::AbsoluteFilePath ||
       isPathAbsoluteOnWindowsOrPosix(FileName)) {
index 348436f4bd083d3ce002c0bcfdaff211b88a1aeb..49fad131a2c7802d630d2b37142adec578697075 100644 (file)
@@ -603,8 +603,7 @@ Expected<unsigned> MCContext::getDwarfFile(StringRef Directory,
                                            MD5::MD5Result *Checksum,
                                            Optional<StringRef> Source,
                                            unsigned CUID) {
-  MCDwarfLineTable &Table =
-      MCDwarfLineTablesCUMap.emplace(CUID, DwarfVersion).first->second;
+  MCDwarfLineTable &Table = MCDwarfLineTablesCUMap[CUID];
   return Table.tryGetFile(Directory, FileName, Checksum, Source, FileNumber);
 }
 
@@ -613,7 +612,7 @@ Expected<unsigned> MCContext::getDwarfFile(StringRef Directory,
 bool MCContext::isValidDwarfFileNumber(unsigned FileNumber, unsigned CUID) {
   const MCDwarfLineTable &LineTable = getMCDwarfLineTable(CUID);
   if (FileNumber == 0)
-    return getDwarfVersion() >= 5;
+    return getDwarfVersion() >= 5 && LineTable.hasRootFile();
   if (FileNumber >= LineTable.getMCDwarfFiles().size())
     return false;
 
index 73b4d4bcd1989f2d492ecdaea41515c4b24f167e..83b6b4f1aa3ceaae48bd385ad96f095afd760211 100644 (file)
@@ -542,15 +542,6 @@ Expected<unsigned> MCDwarfLineTable::tryGetFile(StringRef &Directory,
   return Header.tryGetFile(Directory, FileName, Checksum, Source, FileNumber);
 }
 
-bool isRootFile(const MCDwarfFile &RootFile, StringRef &Directory,
-                StringRef &FileName, MD5::MD5Result *Checksum) {
-  if (RootFile.Name.empty() || RootFile.Name != FileName.data())
-    return false;
-  if (!RootFile.Checksum)
-    return !Checksum;
-  return *RootFile.Checksum == *Checksum;
-}
-
 Expected<unsigned>
 MCDwarfLineTableHeader::tryGetFile(StringRef &Directory,
                                    StringRef &FileName,
@@ -570,8 +561,6 @@ MCDwarfLineTableHeader::tryGetFile(StringRef &Directory,
     trackMD5Usage(Checksum);
     HasSource = (Source != None);
   }
-  if (isRootFile(RootFile, Directory, FileName, Checksum) && DwarfVersion >= 5)
-    return 0;
   if (FileNumber == 0) {
     // File numbers start with 1 and/or after any file numbers
     // allocated by inline-assembler .file directives.
index 39c69c9f7d2331248786acf65f13f294d6220831..cff8f0007311de8e253f7abffa5f8fc9dcc2f0b7 100644 (file)
@@ -2,9 +2,9 @@
 // RUN: llvm-dwarfdump -v %t | FileCheck -check-prefix DWARF -check-prefix DWARF45 %s
 // RUN: llvm-dwarfdump --debug-line %t | FileCheck -check-prefix DWARF-DL -check-prefix DWARF-DL-5 -DDWVER=5 -DDWFILE=0 %s
 // RUN: llvm-objdump -r %t | FileCheck -check-prefix RELOC -check-prefix RELOC5 %s
-// RUN: llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o %t -g -dwarf-version 4 -fdebug-compilation-dir=/tmp
+// RUN: llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o %t -g -fdebug-compilation-dir=/tmp
 // RUN: llvm-dwarfdump -v %t | FileCheck -check-prefix DWARF -check-prefix DWARF45 %s
-// RUN: llvm-dwarfdump --debug-line %t | FileCheck -check-prefix DWARF-DL -check-prefix DWARF-DL-4 -DDWVER=4 -DDWFILE=1 %s
+// RUN: llvm-dwarfdump --debug-line %t | FileCheck -check-prefix DWARF-DL -DDWVER=4 -DDWFILE=1 %s
 // RUN: llvm-objdump -r %t | FileCheck -check-prefix RELOC -check-prefix RELOC4 %s
 // RUN: llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o %t -g -dwarf-version 3 -fdebug-compilation-dir=/tmp
 // RUN: llvm-dwarfdump -v %t | FileCheck -check-prefix DWARF -check-prefix DWARF3 %s
@@ -57,14 +57,11 @@ b:
 // DWARF-DL-5:    include_directories[  0] = "/tmp"
 // DWARF-DL:      file_names[  [[DWFILE]]]:
 // DWARF-DL:      name: "{{(<stdin>|-)}}"
-// DWARF-DL-5:      0x0000000000000000     17      0      0   0   0  is_stmt
-// DWARF-DL-5-NEXT: 0x0000000000000004     17      0      0   0   0  is_stmt end_sequence
-// DWARF-DL-5-NEXT: 0x0000000000000000     21      0      0   0   0  is_stmt
-// DWARF-DL-5-NEXT: 0x0000000000000004     21      0      0   0   0  is_stmt end_sequence
-// DWARF-DL-4:      0x0000000000000000     17      0      1   0   0  is_stmt
-// DWARF-DL-4-NEXT: 0x0000000000000004     17      0      1   0   0  is_stmt end_sequence
-// DWARF-DL-4-NEXT: 0x0000000000000000     21      0      1   0   0  is_stmt
-// DWARF-DL-4-NEXT: 0x0000000000000004     21      0      1   0   0  is_stmt end_sequence
+// DWARF-DL:      0x0000000000000000     17      0      1   0   0  is_stmt
+// DWARF-DL-NEXT: 0x0000000000000004     17      0      1   0   0  is_stmt end_sequence
+// DWARF-DL-NEXT: 0x0000000000000000     21      0      1   0   0  is_stmt
+// DWARF-DL-NEXT: 0x0000000000000004     21      0      1   0   0  is_stmt end_sequence
+
 
 // DWARF: .debug_ranges contents:
 // DWARF: 00000000 ffffffff 00000000
index d48e42c8d1214c6c00a88eb51ec185fbac333dc1..2ec8141325f8db87e464e989bdd28cbc1b488aa5 100644 (file)
@@ -1,7 +1,8 @@
 ; RUN: %llc_dwarf -filetype=asm -dwarf-version=5 %s -o - | FileCheck %s -check-prefix=ASM
 ; RUN: %llc_dwarf -filetype=obj -dwarf-version=5 %s -o - | llvm-dwarfdump -debug-line - | FileCheck %s -check-prefix=OBJ
 ; ASM: .file 0 "{{.+}}" md5
-; ASM: .file 1 "t1.cpp"
+; ASM: .file 1 "{{.+}}" md5
+; ASM: .file 2 "t1.cpp"
 ; ASM-NOT: md5
 ; OBJ: file_names[ 0]:
 ; OBJ-NOT: md5
index f98fdcc2b40d9fd88c275102621e0c9d24009bab..1a3afb6875fd598bb767f05cc0d243ab038a5f7b 100644 (file)
 # CHECK:       file_names[ 1]:
 # CHECK-NEXT:  name: "header.h"
 # CHECK-NEXT:  dir_index: 1
-# CHECK-4:     file_names[ 2]:
-# CHECK-4-NEXT: name: "root.cpp"
+# CHECK:       file_names[ 2]:
+# CHECK-NEXT:  name: "root.cpp"
 # CHECK-4-NEXT: dir_index: 2
+# CHECK-5-NEXT: dir_index: 0
 
 # ASM-NOT: .file
 # ASM-5:   .file 0 "/test" "root.cpp"
 # ASM:     .file 1 "/include" "header.h"
 # ASM-4:   .file 2 "/test" "root.cpp"
+# ASM-5:   .file 2 "root.cpp"
 # ASM-NOT: .file
 
 # WARN:      file 0 not supported prior to DWARF-5
index f59027e0859e4d62becf5338984eb2f72f1fb043..072b5a90c5c83aadeb6396d0523f57962d6f586e 100644 (file)
Binary files a/test/tools/llvm-objdump/Inputs/embedded-source and b/test/tools/llvm-objdump/Inputs/embedded-source differ
index 46607440cb9bde9490ce69e47a4e2851ec768043..b932a5d3f32f0dca18827050d243ba798afc2087 100644 (file)
@@ -30,7 +30,8 @@
 _Z2f1v:                                 # @_Z2f1v
 .Lfunc_begin0:
        .file   0 "/home/avl" "test.cpp" md5 0xefae234cc05b45384d782316d3a5d338
-       .loc    0 1 0                   # test.cpp:1:0
+       .file   1 "test.cpp" md5 0xefae234cc05b45384d782316d3a5d338
+       .loc    1 1 0                   # test.cpp:1:0
        .cfi_startproc
 # %bb.0:                                # %entry
        pushq   %rbp
@@ -39,7 +40,7 @@ _Z2f1v:                                 # @_Z2f1v
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
 .Ltmp0:
-       .loc    0 1 12 prologue_end     # test.cpp:1:12
+       .loc    1 1 12 prologue_end     # test.cpp:1:12
        popq    %rbp
        .cfi_def_cfa %rsp, 8
        retq
@@ -54,7 +55,7 @@ _Z2f1v:                                 # @_Z2f1v
        .type   _Z2f2v,@function
 _Z2f2v:                                 # @_Z2f2v
 .Lfunc_begin1:
-       .loc    0 2 0                   # test.cpp:2:0
+       .loc    1 2 0                   # test.cpp:2:0
        .cfi_startproc
 # %bb.0:                                # %entry
        pushq   %rbp
@@ -63,7 +64,7 @@ _Z2f2v:                                 # @_Z2f2v
        movq    %rsp, %rbp
        .cfi_def_cfa_register %rbp
 .Ltmp2:
-       .loc    0 2 12 prologue_end     # test.cpp:2:12
+       .loc    1 2 12 prologue_end     # test.cpp:2:12
        popq    %rbp
        .cfi_def_cfa %rsp, 8
        retq