]> Gitweb @ Texas Instruments - Open Source Git Repositories - git.TI.com/gitweb - opencl/llvm.git/commitdiff
DebugInfo: Don't include the name of the CU file in the line table file list when...
authorDavid Blaikie <dblaikie@gmail.com>
Fri, 14 Feb 2014 19:51:35 +0000 (19:51 +0000)
committerDavid Blaikie <dblaikie@gmail.com>
Fri, 14 Feb 2014 19:51:35 +0000 (19:51 +0000)
Recommitting r201380 (reverted in r201389)
Recommitting r201351 and r201355 (reverted in r201351 and r201355)

We weren't emitting the an empty (header only) line table when the line
table was empty - this made the DWARF invalid (the compile unit would
point to the zero-size debug_lines section where there should've been an
empty line table but there was nothing at all). Fix that, and as a
consequence this works around/addresses PR18809.

Also, we emit a non-empty line table to workaround a darwin linker bug,
so XFAILing on darwin too.

Also, mark the test as 'REQUIRES: object-emission' because it does.

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

lib/CodeGen/AsmPrinter/DwarfDebug.cpp
lib/MC/MCObjectStreamer.cpp
test/DebugInfo/X86/generate-odr-hash.ll
test/DebugInfo/empty.ll [new file with mode: 0644]

index de2f4c6e02aa490b44417a53311a9568f4d54c37..4d0eb445d34b14c02109db93a96825d77156a185 100644 (file)
@@ -756,9 +756,6 @@ DwarfCompileUnit *DwarfDebug::constructDwarfCompileUnit(DICompileUnit DIUnit) {
   InfoHolder.addUnit(NewCU);
 
   FileIDCUMap[NewCU->getUniqueID()] = 0;
-  // Call this to emit a .file directive if it wasn't emitted for the source
-  // file this CU comes from yet.
-  getOrCreateSourceID(FN, CompilationDir, NewCU->getUniqueID());
 
   NewCU->addString(Die, dwarf::DW_AT_producer, DIUnit.getProducer());
   NewCU->addUInt(Die, dwarf::DW_AT_language, dwarf::DW_FORM_data2,
index f00231e3d316276ca4ac9ba87de4403aeca21e9c..bfa3c8cfa34d1ec53ab6e642f042b3d400f7f7e6 100644 (file)
@@ -379,7 +379,8 @@ void MCObjectStreamer::EmitZeros(uint64_t NumBytes) {
 void MCObjectStreamer::FinishImpl() {
   // Dump out the dwarf file & directory tables and line tables.
   const MCSymbol *LineSectionSymbol = NULL;
-  if (getContext().hasDwarfFiles())
+  if (!getContext().getMCLineTableSymbols().empty() ||
+      getContext().hasDwarfFiles())
     LineSectionSymbol = MCDwarfFileTable::Emit(this);
 
   // If we are generating dwarf for assembly source files dump out the sections.
index 6ddb54e5eef70618038d630684faa6d56be966f2..e7b62104dfbaef9bc39006830eb86c05278dc086 100644 (file)
 ; CHECK: DW_TAG_member
 ; CHECK-NEXT: DW_AT_name{{.*}}"a"
 
+; CHECK-LABEL: .debug_line contents:
+; CHECK: Line table prologue
+; CHECK-NOT: file_names[
+; CHECK: file_names{{.*}} bar.h
+; CHECK: file_names{{.*}} bar.cpp
+; CHECK-NOT: file_names[
+; CHECK-LABEL: .debug_str contents:
+
 ; Use the unit size as a rough hash/identifier for the unit we're dealing with
 ; it happens to be unambiguous at the moment, but it's hardly ideal.
 ; CHECK-LABEL: .debug_pubtypes contents:
diff --git a/test/DebugInfo/empty.ll b/test/DebugInfo/empty.ll
new file mode 100644 (file)
index 0000000..ad56089
--- /dev/null
@@ -0,0 +1,23 @@
+; REQUIRES: object-emission
+
+; RUN: llc %s -o %t -filetype=obj
+; RUN: llvm-dwarfdump -debug-dump=line %t | FileCheck %s
+
+; *-win32 doesn't emit Dwarf line table.
+; darwin has a workaround for a linker bug so it always emits one line table entry
+; XFAIL: win32, darwin
+
+; Expect no line table entry since there are no functions and file references in this compile unit
+; CHECK: .debug_line contents:
+; CHECK: Line table prologue:
+; CHECK: total_length: 0x00000019
+; CHECK-NOT: file_names[
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!5}
+
+!0 = metadata !{i32 720913, metadata !4, i32 12, metadata !"clang version 3.1 (trunk 143523)", i1 true, metadata !"", i32 0, metadata !2, metadata !2, metadata !2, metadata !2, null, metadata !""} ; [ DW_TAG_compile_unit ]
+!2 = metadata !{}
+!3 = metadata !{i32 786473, metadata !4} ; [ DW_TAG_file_type ]
+!4 = metadata !{metadata !"empty.c", metadata !"/home/nlewycky"}
+!5 = metadata !{i32 1, metadata !"Debug Info Version", i32 1}