OSDN Git Service

Merging r340839:
authorHans Wennborg <hans@hanshq.net>
Thu, 30 Aug 2018 08:30:33 +0000 (08:30 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 30 Aug 2018 08:30:33 +0000 (08:30 +0000)
------------------------------------------------------------------------
r340839 | bcain | 2018-08-28 18:23:39 +0200 (Tue, 28 Aug 2018) | 14 lines

[debuginfo] generate debug info with asm+.file

Summary:
For assembly input files, generate debug info even when the .file
directive is present, provided it does not include a file-number
argument.  Fixes PR38695.

Reviewers: probinson, sidneym

Subscribers: aprantl, hiraditya, JDevlieghere, llvm-commits

Differential Revision: https://reviews.llvm.org/D51315

------------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/llvm/branches/release_70@341036 91177308-0d34-0410-b5e6-96231b3b80d8

lib/MC/MCParser/AsmParser.cpp
test/MC/AsmParser/directive_file-3.s [new file with mode: 0644]

index 501a1cc..d88c6f7 100644 (file)
@@ -3348,17 +3348,17 @@ bool AsmParser::parseDirectiveFile(SMLoc DirectiveLoc) {
     }
   }
 
-  // In case there is a -g option as well as debug info from directive .file,
-  // we turn off the -g option, directly use the existing debug info instead.
-  // Also reset any implicit ".file 0" for the assembler source.
-  if (Ctx.getGenDwarfForAssembly()) {
-    Ctx.getMCDwarfLineTable(0).resetRootFile();
-    Ctx.setGenDwarfForAssembly(false);
-  }
-
   if (FileNumber == -1)
     getStreamer().EmitFileDirective(Filename);
   else {
+    // In case there is a -g option as well as debug info from directive .file,
+    // we turn off the -g option, directly use the existing debug info instead.
+    // Also reset any implicit ".file 0" for the assembler source.
+    if (Ctx.getGenDwarfForAssembly()) {
+      Ctx.getMCDwarfLineTable(0).resetRootFile();
+      Ctx.setGenDwarfForAssembly(false);
+    }
+
     MD5::MD5Result *CKMem = nullptr;
     if (HasMD5) {
       CKMem = (MD5::MD5Result *)Ctx.allocate(sizeof(MD5::MD5Result), 1);
diff --git a/test/MC/AsmParser/directive_file-3.s b/test/MC/AsmParser/directive_file-3.s
new file mode 100644 (file)
index 0000000..c3bdaed
--- /dev/null
@@ -0,0 +1,24 @@
+// RUN: llvm-mc -g -triple i386-unknown-unknown  %s | FileCheck -check-prefix=CHECK-DEFAULT %s
+// RUN: llvm-mc -g -triple i386-unknown-unknown %s -filetype=obj | obj2yaml | FileCheck -check-prefix=CHECK-DEBUG %s
+
+// Test for Bug 38695
+// This testcase has a single function and a .file directive
+// without the [file-num] argument.  When compiled with -g,
+// this testcase will not report error, and generate new
+// debug info.
+
+        .file "hello"
+.text
+
+f1:
+        nop
+.size f1, .-f1
+
+// CHECK-DEFAULT: .file "hello"
+
+// CHECK-DEBUG:  Sections:
+// CHECK-DEBUG:  - Name:            .text
+// CHECK-DEBUG:  - Name:            .debug_info
+// CHECK-DEBUG:  - Name:            .rel.debug_info
+// CHECK-DEBUG:    Info:            .debug_info
+// CHECK-DEBUG:  Symbols: