summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2018-08-30 08:30:33 +0000
committerHans Wennborg <hans@hanshq.net>2018-08-30 08:30:33 +0000
commit3d019e215d92181275e1f2a07cecaec07ae204ca (patch)
tree41e1d7dff3c5664088e65176f28f7aa2bca103d5
parentd6e617b922ed4e06fdae773a6e889146ad3e63b9 (diff)
Merging r340839:
------------------------------------------------------------------------ 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
-rw-r--r--lib/MC/MCParser/AsmParser.cpp16
-rw-r--r--test/MC/AsmParser/directive_file-3.s24
2 files changed, 32 insertions, 8 deletions
diff --git a/lib/MC/MCParser/AsmParser.cpp b/lib/MC/MCParser/AsmParser.cpp
index 501a1cccf60..d88c6f76826 100644
--- a/lib/MC/MCParser/AsmParser.cpp
+++ b/lib/MC/MCParser/AsmParser.cpp
@@ -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
index 00000000000..c3bdaede270
--- /dev/null
+++ b/test/MC/AsmParser/directive_file-3.s
@@ -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: