From: Ali Tamur Date: Mon, 25 Mar 2019 21:09:07 +0000 (+0000) Subject: Revert "[llvm] Prevent duplicate files in debug line header in dwarf 5." X-Git-Tag: android-x86-9.0-r1~5512 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=a81909135b7da7710b97124af7d9a49a5746b317;p=android-x86%2Fexternal-llvm.git Revert "[llvm] Prevent duplicate files in debug line header in dwarf 5." This reverts commit 312ab05887d0e2caa29aaf843cefe39379a98d36. My commit broke the build; I will revert and find out what happened. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356951 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h b/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h index 6247c31d717..1f36e0daed0 100644 --- a/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h +++ b/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h @@ -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 diff --git a/include/llvm/MC/MCContext.h b/include/llvm/MC/MCContext.h index 6beb6463964..c87df5a82ce 100644 --- a/include/llvm/MC/MCContext.h +++ b/include/llvm/MC/MCContext.h @@ -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 { diff --git a/include/llvm/MC/MCDwarf.h b/include/llvm/MC/MCDwarf.h index 70624d0a4df..991ad525f89 100644 --- a/include/llvm/MC/MCDwarf.h +++ b/include/llvm/MC/MCDwarf.h @@ -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 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 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 &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 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); diff --git a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h index 683d3245e56..d9addb52376 100644 --- a/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h +++ b/lib/CodeGen/AsmPrinter/DwarfCompileUnit.h @@ -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); diff --git a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 226014cf0bb..0e0a5b24864 100644 --- a/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -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(); diff --git a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index 5d8e236a6b3..6e547469c24 100644 --- a/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -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); } diff --git a/lib/DebugInfo/DWARF/DWARFDebugLine.cpp b/lib/DebugInfo/DWARF/DWARFDebugLine.cpp index 6ad06a8553e..53420187773 100644 --- a/lib/DebugInfo/DWARF/DWARFDebugLine.cpp +++ b/lib/DebugInfo/DWARF/DWARFDebugLine.cpp @@ -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 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 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)) { diff --git a/lib/MC/MCContext.cpp b/lib/MC/MCContext.cpp index 348436f4bd0..49fad131a2c 100644 --- a/lib/MC/MCContext.cpp +++ b/lib/MC/MCContext.cpp @@ -603,8 +603,7 @@ Expected MCContext::getDwarfFile(StringRef Directory, MD5::MD5Result *Checksum, Optional 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 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; diff --git a/lib/MC/MCDwarf.cpp b/lib/MC/MCDwarf.cpp index 73b4d4bcd19..83b6b4f1aa3 100644 --- a/lib/MC/MCDwarf.cpp +++ b/lib/MC/MCDwarf.cpp @@ -542,15 +542,6 @@ Expected 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 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. diff --git a/test/MC/ARM/dwarf-asm-multiple-sections.s b/test/MC/ARM/dwarf-asm-multiple-sections.s index 39c69c9f7d2..cff8f000731 100644 --- a/test/MC/ARM/dwarf-asm-multiple-sections.s +++ b/test/MC/ARM/dwarf-asm-multiple-sections.s @@ -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: "{{(|-)}}" -// 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 diff --git a/test/MC/ELF/debug-mixed-md5.ll b/test/MC/ELF/debug-mixed-md5.ll index d48e42c8d12..2ec8141325f 100644 --- a/test/MC/ELF/debug-mixed-md5.ll +++ b/test/MC/ELF/debug-mixed-md5.ll @@ -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 diff --git a/test/MC/ELF/dwarf-file0.s b/test/MC/ELF/dwarf-file0.s index f98fdcc2b40..1a3afb6875f 100644 --- a/test/MC/ELF/dwarf-file0.s +++ b/test/MC/ELF/dwarf-file0.s @@ -19,14 +19,16 @@ # 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 diff --git a/test/tools/llvm-objdump/Inputs/embedded-source b/test/tools/llvm-objdump/Inputs/embedded-source index e0f6fea6084..072b5a90c5c 100644 Binary files a/test/tools/llvm-objdump/Inputs/embedded-source and b/test/tools/llvm-objdump/Inputs/embedded-source differ diff --git a/test/tools/llvm-objdump/X86/function-sections-line-numbers.s b/test/tools/llvm-objdump/X86/function-sections-line-numbers.s index 46607440cb9..b932a5d3f32 100644 --- a/test/tools/llvm-objdump/X86/function-sections-line-numbers.s +++ b/test/tools/llvm-objdump/X86/function-sections-line-numbers.s @@ -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