[PATCH] D20002: Fix Bug 11740: Turn off -g when there are directive file debug info

Zhizhou Yang via llvm-commits llvm-commits at lists.llvm.org
Thu May 5 16:28:47 PDT 2016


zhizhouy created this revision.
zhizhouy added a reviewer: echristo.
zhizhouy added a subscriber: llvm-commits.
Herald added a subscriber: joker.eph.

For the bug 11740:
[[ https://llvm.org/bugs/show_bug.cgi?id=11740 | bug 11740 ]]

If there is already debug info in the assembly file, and user hope to use -g option for 
compiling, we think we should not directly report an error.

According to what GNU assembler did, it just reused the debug info in the assembly file,
and turned off the DEBUG_TYPE option so that there will be no new debug info emitted
by assembler. This fix is just as what GNU assembler did.

The concern is the situation that there are two .text sections in the assembly file, one with 
debug info and the other one without. Currently with this fix, the assembler will no longer 
generate any debug info for the second .text section. And this is what GNU assembler 
exactly did for this situation. So I think this still make some sense.

http://reviews.llvm.org/D20002

Files:
  lib/MC/MCParser/AsmParser.cpp
  test/MC/AsmParser/directive_file-2.s
  test/MC/AsmParser/directive_file-errors.s

Index: test/MC/AsmParser/directive_file-errors.s
===================================================================
--- test/MC/AsmParser/directive_file-errors.s
+++ test/MC/AsmParser/directive_file-errors.s
@@ -1,9 +0,0 @@
-// RUN: not llvm-mc -g -triple i386-unknown-unknown %s 2> %t.err | FileCheck %s
-// RUN: FileCheck --check-prefix=CHECK-ERRORS %s < %t.err
-// Test for Bug 11740
-
-        .file "hello"
-        .file 1 "world"
-
-// CHECK: .file "hello"
-// CHECK-ERRORS:6:9: error: input can't have .file dwarf directives when -g is used to generate dwarf debug info for assembly code
Index: test/MC/AsmParser/directive_file-2.s
===================================================================
--- test/MC/AsmParser/directive_file-2.s
+++ test/MC/AsmParser/directive_file-2.s
@@ -0,0 +1,9 @@
+# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
+# RUN: llvm-mc -triple i386-unknown-unknown %s -filetype=null
+// Test for Bug 11740
+
+        .file "hello"
+        .file 1 "world"
+
+// CHECK: .file "hello"
+// CHECK: .file 1 "world"
Index: lib/MC/MCParser/AsmParser.cpp
===================================================================
--- lib/MC/MCParser/AsmParser.cpp
+++ lib/MC/MCParser/AsmParser.cpp
@@ -3001,12 +3001,11 @@
   if (FileNumber == -1)
     getStreamer().EmitFileDirective(Filename);
   else {
+    // If there is -g option as well as debug info from directive file,
+    // we turn off -g option, directly use the existing debug info instead.
     if (getContext().getGenDwarfForAssembly())
-      Error(DirectiveLoc,
-            "input can't have .file dwarf directives when -g is "
-            "used to generate dwarf debug info for assembly code");
-
-    if (getStreamer().EmitDwarfFileDirective(FileNumber, Directory, Filename) ==
+      getContext().setGenDwarfForAssembly(false);
+    else if (getStreamer().EmitDwarfFileDirective(FileNumber, Directory, Filename) ==
         0)
       Error(FileNumberLoc, "file number already allocated");
   }


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D20002.56369.patch
Type: text/x-patch
Size: 2002 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160505/3b0de167/attachment.bin>


More information about the llvm-commits mailing list