diff options
author | Alexander Potapenko <glider@google.com> | 2018-03-28 12:36:46 +0000 |
---|---|---|
committer | Alexander Potapenko <glider@google.com> | 2018-03-28 12:36:46 +0000 |
commit | 202f8094372e51e120629f7a5d04993455d36ad7 (patch) | |
tree | 6c8898775f36e92d2ce0b1776f19a2cd5d088d03 | |
parent | 5076b98fb91b5befd592cbcf220b0de28855fc59 (diff) | |
download | bcm5719-llvm-202f8094372e51e120629f7a5d04993455d36ad7.tar.gz bcm5719-llvm-202f8094372e51e120629f7a5d04993455d36ad7.zip |
Revert "Reapply "[DWARFv5] Emit file 0 to the line table.""
This reverts commit r328676.
Commit r328676 broke the -no-integrated-as flag necessary to build Linux kernel with Clang:
$ cat t.c
void foo() {}
$ clang -no-integrated-as -c t.c -g
/tmp/t-dcdec5.s: Assembler messages:
/tmp/t-dcdec5.s:8: Error: file number less than one
clang-7.0: error: assembler command failed with exit code 1 (use -v to see invocation)
llvm-svn: 328699
-rw-r--r-- | llvm/include/llvm/MC/MCContext.h | 9 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCDwarf.h | 29 | ||||
-rw-r--r-- | llvm/include/llvm/MC/MCStreamer.h | 6 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp | 11 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp | 2 | ||||
-rw-r--r-- | llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h | 8 | ||||
-rw-r--r-- | llvm/lib/MC/MCAsmStreamer.cpp | 86 | ||||
-rw-r--r-- | llvm/lib/MC/MCDwarf.cpp | 61 | ||||
-rw-r--r-- | llvm/lib/MC/MCParser/AsmParser.cpp | 18 | ||||
-rw-r--r-- | llvm/lib/MC/MCStreamer.cpp | 9 | ||||
-rw-r--r-- | llvm/test/CodeGen/Generic/dwarf-md5.ll | 35 | ||||
-rw-r--r-- | llvm/test/CodeGen/Generic/dwarf-source.ll | 39 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/dbg-file-name.ll | 2 | ||||
-rw-r--r-- | llvm/test/DebugInfo/X86/inline-asm-locs.ll | 2 | ||||
-rw-r--r-- | llvm/test/MC/ARM/dwarf-asm-multiple-sections.s | 4 | ||||
-rw-r--r-- | llvm/test/MC/ELF/debug-file-options.s | 13 | ||||
-rw-r--r-- | llvm/test/MC/ELF/debug-md5.s | 12 | ||||
-rw-r--r-- | llvm/test/MC/ELF/debug-source.s | 12 | ||||
-rw-r--r-- | llvm/test/MC/ELF/dwarf-file0.s | 19 | ||||
-rw-r--r-- | llvm/tools/llvm-mc/llvm-mc.cpp | 12 |
20 files changed, 133 insertions, 256 deletions
diff --git a/llvm/include/llvm/MC/MCContext.h b/llvm/include/llvm/MC/MCContext.h index c110ffd3a77..c4abef1a9b4 100644 --- a/llvm/include/llvm/MC/MCContext.h +++ b/llvm/include/llvm/MC/MCContext.h @@ -537,13 +537,8 @@ namespace llvm { DwarfCompileUnitID = CUIndex; } - /// Specifies the "root" file and directory of the compilation unit. - /// These are "file 0" and "directory 0" in DWARF v5. - void setMCLineTableRootFile(unsigned CUID, StringRef CompilationDir, - StringRef Filename, MD5::MD5Result *Checksum, - Optional<StringRef> Source) { - getMCDwarfLineTable(CUID).setRootFile(CompilationDir, Filename, Checksum, - Source); + void setMCLineTableCompilationDir(unsigned CUID, StringRef CompilationDir) { + getMCDwarfLineTable(CUID).setCompilationDir(CompilationDir); } /// Saves the information from the currently parsed dwarf .loc directive diff --git a/llvm/include/llvm/MC/MCDwarf.h b/llvm/include/llvm/MC/MCDwarf.h index 5cdb176e8e2..999e3235936 100644 --- a/llvm/include/llvm/MC/MCDwarf.h +++ b/llvm/include/llvm/MC/MCDwarf.h @@ -214,7 +214,6 @@ struct MCDwarfLineTableHeader { SmallVector<MCDwarfFile, 3> MCDwarfFiles; StringMap<unsigned> SourceIdMap; StringRef CompilationDir; - MCDwarfFile RootFile; bool HasMD5 = false; bool HasSource = false; @@ -242,17 +241,8 @@ class MCDwarfDwoLineTable { MCDwarfLineTableHeader Header; public: - void maybeSetRootFile(StringRef Directory, StringRef FileName, - MD5::MD5Result *Checksum, Optional<StringRef> Source) { - if (!Header.RootFile.Name.empty()) - return; - Header.CompilationDir = Directory; - Header.RootFile.Name = FileName; - Header.RootFile.DirIndex = 0; - Header.RootFile.Checksum = Checksum; - Header.RootFile.Source = Source; - Header.HasMD5 = (Checksum != nullptr); - Header.HasSource = Source.hasValue(); + void setCompilationDir(StringRef CompilationDir) { + Header.CompilationDir = CompilationDir; } unsigned getFile(StringRef Directory, StringRef FileName, @@ -287,17 +277,6 @@ public: FileNumber)); } - void setRootFile(StringRef Directory, StringRef FileName, - MD5::MD5Result *Checksum, Optional<StringRef> Source) { - Header.CompilationDir = Directory; - Header.RootFile.Name = FileName; - Header.RootFile.DirIndex = 0; - Header.RootFile.Checksum = Checksum; - Header.RootFile.Source = Source; - Header.HasMD5 = (Checksum != nullptr); - Header.HasSource = Source.hasValue(); - } - MCSymbol *getLabel() const { return Header.Label; } @@ -306,6 +285,10 @@ public: Header.Label = Label; } + void setCompilationDir(StringRef CompilationDir) { + Header.CompilationDir = CompilationDir; + } + const SmallVectorImpl<std::string> &getMCDwarfDirs() const { return Header.MCDwarfDirs; } diff --git a/llvm/include/llvm/MC/MCStreamer.h b/llvm/include/llvm/MC/MCStreamer.h index 582a836023b..288bcbabc21 100644 --- a/llvm/include/llvm/MC/MCStreamer.h +++ b/llvm/include/llvm/MC/MCStreamer.h @@ -775,12 +775,6 @@ public: MD5::MD5Result *Checksum = nullptr, Optional<StringRef> Source = None, unsigned CUID = 0); - /// Specify the "root" file of the compilation, using the ".file 0" extension. - virtual void emitDwarfFile0Directive(StringRef Directory, StringRef Filename, - MD5::MD5Result *Checksum, - Optional<StringRef> Source, - unsigned CUID = 0); - /// \brief This implements the DWARF2 '.loc fileno lineno ...' assembler /// directive. virtual void EmitDwarfLocDirective(unsigned FileNo, unsigned Line, diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp index 0398d0f4c97..024472db87c 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfDebug.cpp @@ -499,9 +499,8 @@ DwarfDebug::getOrCreateDwarfCompileUnit(const DICompileUnit *DIUnit) { // explicitly describe the directory of all files, never relying on the // compilation directory. if (!Asm->OutStreamer->hasRawTextSupport() || SingleCU) - Asm->OutStreamer->emitDwarfFile0Directive( - CompilationDir, FN, NewCU.getMD5AsBytes(DIUnit->getFile()), - DIUnit->getSource(), NewCU.getUniqueID()); + Asm->OutStreamer->getContext().setMCLineTableCompilationDir( + NewCU.getUniqueID(), CompilationDir); StringRef Producer = DIUnit->getProducer(); StringRef Flags = DIUnit->getFlags(); @@ -2149,10 +2148,8 @@ void DwarfDebug::emitDebugStrDWO() { MCDwarfDwoLineTable *DwarfDebug::getDwoLineTable(const DwarfCompileUnit &CU) { if (!useSplitDwarf()) return nullptr; - const DICompileUnit *DIUnit = CU.getCUNode(); - SplitTypeUnitFileTable.maybeSetRootFile( - DIUnit->getDirectory(), DIUnit->getFilename(), - CU.getMD5AsBytes(DIUnit->getFile()), DIUnit->getSource()); + if (SingleCU) + SplitTypeUnitFileTable.setCompilationDir(CU.getCUNode()->getDirectory()); return &SplitTypeUnitFileTable; } diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp index a0cd34ea76f..811112a0430 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.cpp @@ -282,7 +282,7 @@ void DwarfUnit::addSectionOffset(DIE &Die, dwarf::Attribute Attribute, addUInt(Die, Attribute, dwarf::DW_FORM_data4, Integer); } -MD5::MD5Result *DwarfUnit::getMD5AsBytes(const DIFile *File) const { +MD5::MD5Result *DwarfUnit::getMD5AsBytes(const DIFile *File) { assert(File); Optional<DIFile::ChecksumInfo<StringRef>> Checksum = File->getChecksum(); if (!Checksum || Checksum->Kind != DIFile::CSK_MD5) diff --git a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h index c1d46173567..328e3549e05 100644 --- a/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h +++ b/llvm/lib/CodeGen/AsmPrinter/DwarfUnit.h @@ -306,10 +306,6 @@ public: const MCSymbol *Label, const MCSymbol *Sec); - /// If the \p File has an MD5 checksum, return it as an MD5Result - /// allocated in the MCContext. - MD5::MD5Result *getMD5AsBytes(const DIFile *File) const; - protected: ~DwarfUnit(); @@ -320,6 +316,10 @@ protected: /// create a new ID and insert it in the line table. virtual unsigned getOrCreateSourceID(const DIFile *File) = 0; + /// If the \p File has an MD5 checksum, return it as an MD5Result + /// allocated in the MCContext. + MD5::MD5Result *getMD5AsBytes(const DIFile *File); + /// Look in the DwarfDebug map for the MDNode that corresponds to the /// reference. template <typename T> T *resolve(TypedDINodeRef<T> Ref) const { diff --git a/llvm/lib/MC/MCAsmStreamer.cpp b/llvm/lib/MC/MCAsmStreamer.cpp index 225dc757c36..f30dd3eadbd 100644 --- a/llvm/lib/MC/MCAsmStreamer.cpp +++ b/llvm/lib/MC/MCAsmStreamer.cpp @@ -219,10 +219,6 @@ public: MD5::MD5Result *Checksum = 0, Optional<StringRef> Source = None, unsigned CUID = 0) override; - void emitDwarfFile0Directive(StringRef Directory, StringRef Filename, - MD5::MD5Result *Checksum, - Optional<StringRef> Source, - unsigned CUID = 0) override; void EmitDwarfLocDirective(unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, unsigned Discriminator, @@ -1081,10 +1077,21 @@ void MCAsmStreamer::EmitFileDirective(StringRef Filename) { EmitEOL(); } -void printDwarfFileDirective(unsigned FileNo, StringRef Directory, - StringRef Filename, MD5::MD5Result *Checksum, - Optional<StringRef> Source, bool UseDwarfDirectory, - raw_svector_ostream &OS) { +Expected<unsigned> MCAsmStreamer::tryEmitDwarfFileDirective( + unsigned FileNo, StringRef Directory, StringRef Filename, + MD5::MD5Result *Checksum, Optional<StringRef> Source, unsigned CUID) { + assert(CUID == 0); + + MCDwarfLineTable &Table = getContext().getMCDwarfLineTable(CUID); + unsigned NumFiles = Table.getMCDwarfFiles().size(); + Expected<unsigned> FileNoOrErr = + Table.tryGetFile(Directory, Filename, Checksum, Source, FileNo); + if (!FileNoOrErr) + return FileNoOrErr.takeError(); + FileNo = FileNoOrErr.get(); + if (NumFiles == Table.getMCDwarfFiles().size()) + return FileNo; + SmallString<128> FullPathName; if (!UseDwarfDirectory && !Directory.empty()) { @@ -1098,68 +1105,31 @@ void printDwarfFileDirective(unsigned FileNo, StringRef Directory, } } - OS << "\t.file\t" << FileNo << ' '; + SmallString<128> Str; + raw_svector_ostream OS1(Str); + OS1 << "\t.file\t" << FileNo << ' '; if (!Directory.empty()) { - PrintQuotedString(Directory, OS); - OS << ' '; + PrintQuotedString(Directory, OS1); + OS1 << ' '; } - PrintQuotedString(Filename, OS); + PrintQuotedString(Filename, OS1); if (Checksum) { - OS << " md5 "; - PrintQuotedString(Checksum->digest(), OS); + OS1 << " md5 "; + PrintQuotedString(Checksum->digest(), OS1); } if (Source) { - OS << " source "; - PrintQuotedString(*Source, OS); + OS1 << " source "; + PrintQuotedString(*Source, OS1); } -} - -Expected<unsigned> MCAsmStreamer::tryEmitDwarfFileDirective( - unsigned FileNo, StringRef Directory, StringRef Filename, - MD5::MD5Result *Checksum, Optional<StringRef> Source, unsigned CUID) { - assert(CUID == 0 && "multiple CUs not supported by MCAsmStreamer"); - - MCDwarfLineTable &Table = getContext().getMCDwarfLineTable(CUID); - unsigned NumFiles = Table.getMCDwarfFiles().size(); - Expected<unsigned> FileNoOrErr = - Table.tryGetFile(Directory, Filename, Checksum, Source, FileNo); - if (!FileNoOrErr) - return FileNoOrErr.takeError(); - FileNo = FileNoOrErr.get(); - if (NumFiles == Table.getMCDwarfFiles().size()) - return FileNo; - - SmallString<128> Str; - raw_svector_ostream OS1(Str); - printDwarfFileDirective(FileNo, Directory, Filename, Checksum, Source, - UseDwarfDirectory, OS1); - - if (MCTargetStreamer *TS = getTargetStreamer()) + if (MCTargetStreamer *TS = getTargetStreamer()) { TS->emitDwarfFileDirective(OS1.str()); - else + } else { EmitRawText(OS1.str()); + } return FileNo; } -void MCAsmStreamer::emitDwarfFile0Directive(StringRef Directory, - StringRef Filename, - MD5::MD5Result *Checksum, - Optional<StringRef> Source, - unsigned CUID) { - assert(CUID == 0); - - SmallString<128> Str; - raw_svector_ostream OS1(Str); - printDwarfFileDirective(0, Directory, Filename, Checksum, Source, - UseDwarfDirectory, OS1); - - if (MCTargetStreamer *TS = getTargetStreamer()) - TS->emitDwarfFileDirective(OS1.str()); - else - EmitRawText(OS1.str()); -} - void MCAsmStreamer::EmitDwarfLocDirective(unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, diff --git a/llvm/lib/MC/MCDwarf.cpp b/llvm/lib/MC/MCDwarf.cpp index 0e0ea965d14..2da69fe1e4e 100644 --- a/llvm/lib/MC/MCDwarf.cpp +++ b/llvm/lib/MC/MCDwarf.cpp @@ -349,34 +349,6 @@ void MCDwarfLineTableHeader::emitV2FileDirTables(MCStreamer *MCOS) const { MCOS->EmitIntValue(0, 1); // Terminate the file list. } -static void emitOneV5FileEntry(MCStreamer *MCOS, const MCDwarfFile &DwarfFile, - bool HasMD5, bool HasSource, - Optional<MCDwarfLineStr> &LineStr) { - assert(!DwarfFile.Name.empty()); - if (LineStr) - LineStr->emitRef(MCOS, DwarfFile.Name); - else { - MCOS->EmitBytes(DwarfFile.Name); // FileName and... - MCOS->EmitBytes(StringRef("\0", 1)); // its null terminator. - } - MCOS->EmitULEB128IntValue(DwarfFile.DirIndex); // Directory number. - if (HasMD5) { - MD5::MD5Result *Cksum = DwarfFile.Checksum; - MCOS->EmitBinaryData( - StringRef(reinterpret_cast<const char *>(Cksum->Bytes.data()), - Cksum->Bytes.size())); - } - if (HasSource) { - if (LineStr) - LineStr->emitRef(MCOS, DwarfFile.Source.getValueOr(StringRef())); - else { - MCOS->EmitBytes( - DwarfFile.Source.getValueOr(StringRef())); // Source and... - MCOS->EmitBytes(StringRef("\0", 1)); // its null terminator. - } - } -} - void MCDwarfLineTableHeader::emitV5FileDirTables( MCStreamer *MCOS, Optional<MCDwarfLineStr> &LineStr) const { // The directory format, which is just a list of the directory paths. In a @@ -425,12 +397,33 @@ void MCDwarfLineTableHeader::emitV5FileDirTables( MCOS->EmitULEB128IntValue(LineStr ? dwarf::DW_FORM_line_strp : dwarf::DW_FORM_string); } - // Then the counted list of files. The root file is file #0, then emit the - // files as provide by .file directives. - MCOS->EmitULEB128IntValue(MCDwarfFiles.size()); - emitOneV5FileEntry(MCOS, RootFile, HasMD5, HasSource, LineStr); - for (unsigned i = 1; i < MCDwarfFiles.size(); ++i) - emitOneV5FileEntry(MCOS, MCDwarfFiles[i], HasMD5, HasSource, LineStr); + // Then the list of file names. These start at 1. + MCOS->EmitULEB128IntValue(MCDwarfFiles.size() - 1); + for (unsigned i = 1; i < MCDwarfFiles.size(); ++i) { + assert(!MCDwarfFiles[i].Name.empty()); + if (LineStr) + LineStr->emitRef(MCOS, MCDwarfFiles[i].Name); + else { + MCOS->EmitBytes(MCDwarfFiles[i].Name); // FileName and... + MCOS->EmitBytes(StringRef("\0", 1)); // its null terminator. + } + MCOS->EmitULEB128IntValue(MCDwarfFiles[i].DirIndex); // Directory number. + if (HasMD5) { + MD5::MD5Result *Cksum = MCDwarfFiles[i].Checksum; + MCOS->EmitBinaryData( + StringRef(reinterpret_cast<const char *>(Cksum->Bytes.data()), + Cksum->Bytes.size())); + } + if (HasSource) { + if (LineStr) + LineStr->emitRef(MCOS, MCDwarfFiles[i].Source.getValueOr(StringRef())); + else { + MCOS->EmitBytes( + MCDwarfFiles[i].Source.getValueOr(StringRef())); // Source and... + MCOS->EmitBytes(StringRef("\0", 1)); // its null terminator. + } + } + } } std::pair<MCSymbol *, MCSymbol *> diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp index 8de6579fe3f..3042f9964ff 100644 --- a/llvm/lib/MC/MCParser/AsmParser.cpp +++ b/llvm/lib/MC/MCParser/AsmParser.cpp @@ -3276,8 +3276,8 @@ bool AsmParser::parseDirectiveFile(SMLoc DirectiveLoc) { FileNumber = getTok().getIntVal(); Lex(); - if (FileNumber < 0) - return TokError("negative file number"); + if (FileNumber < 1) + return TokError("file number less than one"); } std::string Path = getTok().getString(); @@ -3356,15 +3356,11 @@ bool AsmParser::parseDirectiveFile(SMLoc DirectiveLoc) { memcpy(SourceBuf, SourceString.data(), SourceString.size()); Source = StringRef(SourceBuf, SourceString.size()); } - if (FileNumber == 0) - getStreamer().emitDwarfFile0Directive(Directory, Filename, CKMem, Source); - else { - Expected<unsigned> FileNumOrErr = getStreamer().tryEmitDwarfFileDirective( - FileNumber, Directory, Filename, CKMem, Source); - if (!FileNumOrErr) - return Error(DirectiveLoc, toString(FileNumOrErr.takeError())); - FileNumber = FileNumOrErr.get(); - } + Expected<unsigned> FileNumOrErr = getStreamer().tryEmitDwarfFileDirective( + FileNumber, Directory, Filename, CKMem, Source); + if (!FileNumOrErr) + return Error(DirectiveLoc, toString(FileNumOrErr.takeError())); + FileNumber = FileNumOrErr.get(); } return false; diff --git a/llvm/lib/MC/MCStreamer.cpp b/llvm/lib/MC/MCStreamer.cpp index 776569894a5..7d847c67605 100644 --- a/llvm/lib/MC/MCStreamer.cpp +++ b/llvm/lib/MC/MCStreamer.cpp @@ -199,15 +199,6 @@ MCStreamer::tryEmitDwarfFileDirective(unsigned FileNo, StringRef Directory, Source, CUID); } -void MCStreamer::emitDwarfFile0Directive(StringRef Directory, - StringRef Filename, - MD5::MD5Result *Checksum, - Optional<StringRef> Source, - unsigned CUID) { - getContext().setMCLineTableRootFile(CUID, Directory, Filename, Checksum, - Source); -} - void MCStreamer::EmitDwarfLocDirective(unsigned FileNo, unsigned Line, unsigned Column, unsigned Flags, unsigned Isa, diff --git a/llvm/test/CodeGen/Generic/dwarf-md5.ll b/llvm/test/CodeGen/Generic/dwarf-md5.ll index 09b901efaf7..b9977200de1 100644 --- a/llvm/test/CodeGen/Generic/dwarf-md5.ll +++ b/llvm/test/CodeGen/Generic/dwarf-md5.ll @@ -8,25 +8,28 @@ ; RUN: %llc_dwarf -dwarf-version 4 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM ; RUN: %llc_dwarf -dwarf-version 5 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM ; RUN: %llc_dwarf -dwarf-version 4 -filetype=obj -o %t4.o %s -; RUN: llvm-dwarfdump -debug-line %t4.o | FileCheck %s --check-prefix=OBJ +; RUN: llvm-dwarfdump -debug-line %t4.o | FileCheck %s --check-prefix=OBJ-4 ; RUN: %llc_dwarf -dwarf-version 5 -filetype=obj -o %t5.o %s -; RUN: llvm-dwarfdump -debug-line %t5.o | FileCheck %s --check-prefixes=OBJ,OBJ-5 +; RUN: llvm-dwarfdump -debug-line %t5.o | FileCheck %s --check-prefix=OBJ-5 -; ASM: .file 0 "[[COMPDIR:.*]]{{[/\\]}}t.c" md5 "00000000000000000000000000000000" -; ASM: .file 1 "[[COMPDIR]]{{[/\\]}}t1.h" md5 "11111111111111111111111111111111" -; ASM: .file 2 "[[COMPDIR]]{{[/\\]}}t2.h" md5 "22222222222222222222222222222222" +; FIXME: Need to convey the MD5 for the primary source file. +; ASM: .file 1 ".{{/|\\\\}}t1.h" md5 "11111111111111111111111111111111" +; ASM: .file 2 ".{{/|\\\\}}t2.h" md5 "22222222222222222222222222222222" + +; OBJ-4: file_names[ 1]: +; OBJ-4-NEXT: name: "t1.h" +; OBJ-4-NEXT: dir_index: 1 +; OBJ-4: file_names[ 2]: +; OBJ-4-NEXT: name: "t2.h" +; OBJ-4-NEXT: dir_index: 1 ; OBJ-5: file_names[ 0]: -; OBJ-5-NEXT: name: "t.c" -; OBJ-5-NEXT: dir_index: 0 -; OBJ-5-NEXT: md5_checksum: 00000000000000000000000000000000 -; OBJ: file_names[ 1]: -; OBJ-NEXT: name: "t1.h" -; OBJ-NEXT: dir_index: 0 +; OBJ-5-NEXT: name: "t1.h" +; OBJ-5-NEXT: dir_index: 1 ; OBJ-5-NEXT: md5_checksum: 11111111111111111111111111111111 -; OBJ: file_names[ 2]: -; OBJ-NEXT: name: "t2.h" -; OBJ-NEXT: dir_index: 0 +; OBJ-5: file_names[ 1]: +; OBJ-5-NEXT: name: "t2.h" +; OBJ-5-NEXT: dir_index: 1 ; OBJ-5-NEXT: md5_checksum: 22222222222222222222222222222222 ; ModuleID = 't.c' @@ -47,9 +50,9 @@ source_filename = "t.c" !5 = !{!0, !6} !6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression()) !7 = distinct !DIGlobalVariable(name: "t2", scope: !2, file: !8, line: 1, type: !9, isLocal: false, isDefinition: true) -!8 = !DIFile(filename: "t2.h", directory: "/home/probinson/projects/scratch", checksumkind: CSK_MD5, checksum: "22222222222222222222222222222222") +!8 = !DIFile(filename: "./t2.h", directory: "/home/probinson/projects/scratch", checksumkind: CSK_MD5, checksum: "22222222222222222222222222222222") !9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!10 = !DIFile(filename: "t1.h", directory: "/home/probinson/projects/scratch", checksumkind: CSK_MD5, checksum: "11111111111111111111111111111111") +!10 = !DIFile(filename: "./t1.h", directory: "/home/probinson/projects/scratch", checksumkind: CSK_MD5, checksum: "11111111111111111111111111111111") !11 = !{i32 2, !"Dwarf Version", i32 4} !12 = !{i32 2, !"Debug Info Version", i32 3} !13 = !{i32 1, !"wchar_size", i32 4} diff --git a/llvm/test/CodeGen/Generic/dwarf-source.ll b/llvm/test/CodeGen/Generic/dwarf-source.ll index e59193d0d8a..9c34fc5285b 100644 --- a/llvm/test/CodeGen/Generic/dwarf-source.ll +++ b/llvm/test/CodeGen/Generic/dwarf-source.ll @@ -8,27 +8,30 @@ ; RUN: %llc_dwarf -dwarf-version 4 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM ; RUN: %llc_dwarf -dwarf-version 5 -filetype=asm -o - %s | FileCheck %s --check-prefix=ASM ; RUN: %llc_dwarf -dwarf-version 4 -filetype=obj -o %t4.o %s -; RUN: llvm-dwarfdump -debug-line %t4.o | FileCheck %s --check-prefixes=OBJ,OBJ-4 +; RUN: llvm-dwarfdump -debug-line %t4.o | FileCheck %s --check-prefix=OBJ-4 ; RUN: %llc_dwarf -dwarf-version 5 -filetype=obj -o %t5.o %s -; RUN: llvm-dwarfdump -debug-line %t5.o | FileCheck %s --check-prefixes=OBJ,OBJ-5 +; RUN: llvm-dwarfdump -debug-line %t5.o | FileCheck %s --check-prefix=OBJ-5 -; ASM: .file 0 "[[COMPDIR:.*]]{{[/\\]}}t.c" source "00000000000000000000000000000000" -; ASM: .file 1 "[[COMPDIR]]{{[/\\]}}t1.h" source "11111111111111111111111111111111" -; ASM: .file 2 "[[COMPDIR]]{{[/\\]}}t2.h" source "22222222222222222222222222222222" +; FIXME: Need to convey the source for the primary source file. +; ASM: .file 1 ".{{/|\\\\}}t1.h" source "11111111111111111111111111111111" +; ASM: .file 2 ".{{/|\\\\}}t2.h" source "22222222222222222222222222222222" -; OBJ-5: file_names[ 0]: -; OBJ-5-NEXT: name: "t.c" -; OBJ-5-NEXT: dir_index: 0 -; OBJ-5-NEXT: source: "00000000000000000000000000000000" -; OBJ: file_names[ 1]: -; OBJ-NEXT: name: "t1.h" -; OBJ-NEXT: dir_index: 0 +; OBJ-4: file_names[ 1]: +; OBJ-4-NEXT: name: "t1.h" +; OBJ-4-NEXT: dir_index: 1 ; OBJ-4-NOT: 11111111111111111111111111111111 -; OBJ-5-NEXT: source: "11111111111111111111111111111111" -; OBJ: file_names[ 2]: -; OBJ-NEXT: name: "t2.h" -; OBJ-NEXT: dir_index: 0 +; OBJ-4: file_names[ 2]: +; OBJ-4-NEXT: name: "t2.h" +; OBJ-4-NEXT: dir_index: 1 ; OBJ-4-NOT: 22222222222222222222222222222222 + +; OBJ-5: file_names[ 0]: +; OBJ-5-NEXT: name: "t1.h" +; OBJ-5-NEXT: dir_index: 1 +; OBJ-5-NEXT: source: "11111111111111111111111111111111" +; OBJ-5: file_names[ 1]: +; OBJ-5-NEXT: name: "t2.h" +; OBJ-5-NEXT: dir_index: 1 ; OBJ-5-NEXT: source: "22222222222222222222222222222222" ; ModuleID = 't.c' @@ -49,9 +52,9 @@ source_filename = "t.c" !5 = !{!0, !6} !6 = !DIGlobalVariableExpression(var: !7, expr: !DIExpression()) !7 = distinct !DIGlobalVariable(name: "t2", scope: !2, file: !8, line: 1, type: !9, isLocal: false, isDefinition: true) -!8 = !DIFile(filename: "t2.h", directory: "/test", source: "22222222222222222222222222222222") +!8 = !DIFile(filename: "./t2.h", directory: "/test", source: "22222222222222222222222222222222") !9 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed) -!10 = !DIFile(filename: "t1.h", directory: "/test", source: "11111111111111111111111111111111") +!10 = !DIFile(filename: "./t1.h", directory: "/test", source: "11111111111111111111111111111111") !11 = !{i32 2, !"Dwarf Version", i32 4} !12 = !{i32 2, !"Debug Info Version", i32 3} !13 = !{i32 1, !"wchar_size", i32 4} diff --git a/llvm/test/DebugInfo/X86/dbg-file-name.ll b/llvm/test/DebugInfo/X86/dbg-file-name.ll index 633b9c069c5..251952df191 100644 --- a/llvm/test/DebugInfo/X86/dbg-file-name.ll +++ b/llvm/test/DebugInfo/X86/dbg-file-name.ll @@ -2,7 +2,7 @@ ; Verify that the file name is relative to the directory. ; rdar://problem/8884898 -; CHECK: file 1 "/Users/manav/one/two" "simple.c" +; CHECK: file 1 "simple.c" declare i32 @printf(i8*, ...) nounwind diff --git a/llvm/test/DebugInfo/X86/inline-asm-locs.ll b/llvm/test/DebugInfo/X86/inline-asm-locs.ll index 5412c7f4133..632aa0be623 100644 --- a/llvm/test/DebugInfo/X86/inline-asm-locs.ll +++ b/llvm/test/DebugInfo/X86/inline-asm-locs.ll @@ -22,7 +22,7 @@ ; CHECK: .file 2 "B.asm" ; CHECK: .loc 1 111 ; CHECK: .loc 2 222 -; CHECK: .file 3 "{{.*[/\\]}}test.c" +; CHECK: .file 3 "test.c" ; CHECK: .loc 3 14 0 target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" diff --git a/llvm/test/MC/ARM/dwarf-asm-multiple-sections.s b/llvm/test/MC/ARM/dwarf-asm-multiple-sections.s index cff8f000731..4c099acccd5 100644 --- a/llvm/test/MC/ARM/dwarf-asm-multiple-sections.s +++ b/llvm/test/MC/ARM/dwarf-asm-multiple-sections.s @@ -54,9 +54,9 @@ b: // DWARF-DL: .debug_line contents: // DWARF-DL: version: [[DWVER]] // DWARF-DL-5: address_size: 4 -// DWARF-DL-5: include_directories[ 0] = "/tmp" +// DWARF-DL-5: include_directories[ 0] = "" // DWARF-DL: file_names[ [[DWFILE]]]: -// DWARF-DL: name: "{{(<stdin>|-)}}" +// DWARF-DL: name: "<stdin>" // 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 diff --git a/llvm/test/MC/ELF/debug-file-options.s b/llvm/test/MC/ELF/debug-file-options.s index 5c77a48ab72..3bcd131cc38 100644 --- a/llvm/test/MC/ELF/debug-file-options.s +++ b/llvm/test/MC/ELF/debug-file-options.s @@ -11,32 +11,25 @@ # CHECK: debug_line[0x00000000] # CHECK: version: 5 -# CHECK: include_directories[ 0] = .debug_line_str[0x[[DIR0:[0-9a-f]+]]] = "{{.+}}" +# CHECK: include_directories[ 0] = .debug_line_str[0x[[DIR0:[0-9a-f]+]]] = "" # CHECK: include_directories[ 1] = .debug_line_str[0x[[DIR1:[0-9a-f]+]]] = "dir1" # CHECK: include_directories[ 2] = .debug_line_str[0x[[DIR2:[0-9a-f]+]]] = "dir2" # CHECK-NOT: include_directories # CHECK: file_names[ 0]: -# CHECK-NEXT: name: .debug_line_str[0x[[FILE0:[0-9a-f]+]]] = "{{.+}}" -# CHECK-NEXT: dir_index: 0 -# CHECK-NEXT: md5_checksum: -# CHECK-NEXT: source: .debug_line_str[0x[[FILE0SRC:[0-9a-f]+]]] = "" -# CHECK: file_names[ 1]: # CHECK-NEXT: name: .debug_line_str[0x[[FILE1:[0-9a-f]+]]] = "foo" # CHECK-NEXT: dir_index: 1 # CHECK-NEXT: md5_checksum: ee87e05688663173cd6043a3a15bba6e # CHECK-NEXT: source: .debug_line_str[0x[[FILE1SRC:[0-9a-f]+]]] = "void foo() {}" -# CHECK: file_names[ 2]: +# CHECK: file_names[ 1]: # CHECK-NEXT: name: .debug_line_str[0x[[FILE2:[0-9a-f]+]]] = "bar" # CHECK-NEXT: dir_index: 2 # CHECK-NEXT: md5_checksum: 816225a0c90ca8948b70eb58be4d522f # CHECK-NEXT: source: .debug_line_str[0x[[FILE2SRC:[0-9a-f]+]]] = "void bar() {}" # CHECK: .debug_line_str contents: -# CHECK-NEXT: 0x[[DIR0]]: "{{.+}}" +# CHECK-NEXT: 0x[[DIR0]]: "" # CHECK-NEXT: 0x[[DIR1]]: "dir1" # CHECK-NEXT: 0x[[DIR2]]: "dir2" -# CHECK-NEXT: 0x[[FILE0]]: "{{.+}}" -# CHECK-NEXT: 0x[[FILE0SRC]]: "" # CHECK-NEXT: 0x[[FILE1]]: "foo" # CHECK-NEXT: 0x[[FILE1SRC]]: "void foo() {}" # CHECK-NEXT: 0x[[FILE2]]: "bar" diff --git a/llvm/test/MC/ELF/debug-md5.s b/llvm/test/MC/ELF/debug-md5.s index 658e02e5917..f8f3bc1a362 100644 --- a/llvm/test/MC/ELF/debug-md5.s +++ b/llvm/test/MC/ELF/debug-md5.s @@ -1,4 +1,4 @@ -// RUN: llvm-mc -triple x86_64-unknown-unknown -dwarf-version 5 -fdebug-compilation-dir=/tmp -filetype=obj %s -o - | llvm-dwarfdump --debug-line --debug-line-str -v - | FileCheck %s +// RUN: llvm-mc -triple x86_64-unknown-unknown -dwarf-version 5 -filetype=obj %s -o - | llvm-dwarfdump --debug-line --debug-line-str -v - | FileCheck %s .file 1 "dir1/foo" md5 "00112233445566778899aabbccddeeff" .file 2 "dir2" "bar" md5 "ffeeddccbbaa99887766554433221100" @@ -9,26 +9,22 @@ # CHECK: debug_line[0x00000000] # CHECK: version: 5 -# CHECK: include_directories[ 0] = .debug_line_str[0x[[DIR0:[0-9a-f]+]]] = "/tmp" +# CHECK: include_directories[ 0] = .debug_line_str[0x[[DIR0:[0-9a-f]+]]] = "" # CHECK: include_directories[ 1] = .debug_line_str[0x[[DIR1:[0-9a-f]+]]] = "dir1" # CHECK: include_directories[ 2] = .debug_line_str[0x[[DIR2:[0-9a-f]+]]] = "dir2" # CHECK-NOT: include_directories # CHECK: file_names[ 0]: -# CHECK-NEXT: name: .debug_line_str[0x[[FILE0:[0-9a-f]+]]] = "{{.+}}" -# CHECK-NEXT: dir_index: 0 -# CHECK: file_names[ 1]: # CHECK-NEXT: name: .debug_line_str[0x[[FILE1:[0-9a-f]+]]] = "foo" # CHECK-NEXT: dir_index: 1 # CHECK-NEXT: md5_checksum: 00112233445566778899aabbccddeeff -# CHECK: file_names[ 2]: +# CHECK: file_names[ 1]: # CHECK-NEXT: name: .debug_line_str[0x[[FILE2:[0-9a-f]+]]] = "bar" # CHECK-NEXT: dir_index: 2 # CHECK-NEXT: md5_checksum: ffeeddccbbaa99887766554433221100 # CHECK: .debug_line_str contents: -# CHECK-NEXT: 0x[[DIR0]]: "/tmp" +# CHECK-NEXT: 0x[[DIR0]]: "" # CHECK-NEXT: 0x[[DIR1]]: "dir1" # CHECK-NEXT: 0x[[DIR2]]: "dir2" -# CHECK-NEXT: 0x[[FILE0]]: "{{.+}}" # CHECK-NEXT: 0x[[FILE1]]: "foo" # CHECK-NEXT: 0x[[FILE2]]: "bar" diff --git a/llvm/test/MC/ELF/debug-source.s b/llvm/test/MC/ELF/debug-source.s index 1cf39c7a9d2..0b919e15ddb 100644 --- a/llvm/test/MC/ELF/debug-source.s +++ b/llvm/test/MC/ELF/debug-source.s @@ -9,29 +9,23 @@ # CHECK: debug_line[0x00000000] # CHECK: version: 5 -# CHECK: include_directories[ 0] = .debug_line_str[0x[[DIR0:[0-9a-f]+]]] = "{{.+}}" +# CHECK: include_directories[ 0] = .debug_line_str[0x[[DIR0:[0-9a-f]+]]] = "" # CHECK: include_directories[ 1] = .debug_line_str[0x[[DIR1:[0-9a-f]+]]] = "dir1" # CHECK: include_directories[ 2] = .debug_line_str[0x[[DIR2:[0-9a-f]+]]] = "dir2" # CHECK-NOT: include_directories # CHECK: file_names[ 0]: -# CHECK-NEXT: name: .debug_line_str[0x[[FILE0:[0-9a-f]+]]] = "{{.+}}" -# CHECK-NEXT: dir_index: 0 -# CHECK-NEXT: source: .debug_line_str[0x[[FILE0SRC:[0-9a-f]+]]] = "" -# CHECK: file_names[ 1]: # CHECK-NEXT: name: .debug_line_str[0x[[FILE1:[0-9a-f]+]]] = "foo" # CHECK-NEXT: dir_index: 1 # CHECK-NEXT: source: .debug_line_str[0x[[FILE1SRC:[0-9a-f]+]]] = "void foo() {}" -# CHECK: file_names[ 2]: +# CHECK: file_names[ 1]: # CHECK-NEXT: name: .debug_line_str[0x[[FILE2:[0-9a-f]+]]] = "bar" # CHECK-NEXT: dir_index: 2 # CHECK-NEXT: source: .debug_line_str[0x[[FILE2SRC:[0-9a-f]+]]] = "void bar()\n{\n}" # CHECK: .debug_line_str contents: -# CHECK-NEXT: 0x[[DIR0]]: "{{.+}}" +# CHECK-NEXT: 0x[[DIR0]]: "" # CHECK-NEXT: 0x[[DIR1]]: "dir1" # CHECK-NEXT: 0x[[DIR2]]: "dir2" -# CHECK-NEXT: 0x[[FILE0]]: "{{.+}}" -# CHECK-NEXT: 0x[[FILE0SRC]]: "" # CHECK-NEXT: 0x[[FILE1]]: "foo" # CHECK-NEXT: 0x[[FILE1SRC]]: "void foo() {}" # CHECK-NEXT: 0x[[FILE2]]: "bar" diff --git a/llvm/test/MC/ELF/dwarf-file0.s b/llvm/test/MC/ELF/dwarf-file0.s deleted file mode 100644 index ae87df2a3f0..00000000000 --- a/llvm/test/MC/ELF/dwarf-file0.s +++ /dev/null @@ -1,19 +0,0 @@ -# RUN: llvm-mc -dwarf-version 4 %s -filetype=obj -o - | llvm-dwarfdump -debug-line - | FileCheck %s --check-prefixes=CHECK,CHECK-4 -# RUN: llvm-mc -dwarf-version 5 %s -filetype=obj -o - | llvm-dwarfdump -debug-line - | FileCheck %s --check-prefixes=CHECK,CHECK-5 -# Darwin is stuck on DWARF v2. -# XFAIL: darwin - .file 0 "root.cpp" - .file 1 "header.h" - .file 2 "root.cpp" -# CHECK-5: include_directories[ 0] = "" -# CHECK-4-NOT: include_directories -# CHECK-4-NOT: file_names[ 0] -# CHECK-5: file_names[ 0]: -# CHECK-5-NEXT: name: "root.cpp" -# CHECK-5-NEXT: dir_index: 0 -# CHECK: file_names[ 1]: -# CHECK-NEXT: name: "header.h" -# CHECK-NEXT: dir_index: 0 -# CHECK: file_names[ 2]: -# CHECK-NEXT: name: "root.cpp" -# CHECK-NEXT: dir_index: 0 diff --git a/llvm/tools/llvm-mc/llvm-mc.cpp b/llvm/tools/llvm-mc/llvm-mc.cpp index 5d9c060dc21..933aecce696 100644 --- a/llvm/tools/llvm-mc/llvm-mc.cpp +++ b/llvm/tools/llvm-mc/llvm-mc.cpp @@ -390,18 +390,6 @@ int main(int argc, char **argv) { } if (!MainFileName.empty()) Ctx.setMainFileName(MainFileName); - if (DwarfVersion >= 5) { - // DWARF v5 needs the root file as well as the compilation directory. - // If we find a '.file 0' directive that will supersede these values. - MD5 Hash; - MD5::MD5Result *Cksum = - (MD5::MD5Result *)Ctx.allocate(sizeof(MD5::MD5Result), 1); - Hash.update(Buffer->getBuffer()); - Hash.final(*Cksum); - Ctx.setMCLineTableRootFile( - /*CUID=*/0, Ctx.getCompilationDir(), - !MainFileName.empty() ? MainFileName : InputFilename, Cksum, None); - } // Package up features to be passed to target/subtarget std::string FeaturesStr; |