<div dir="ltr"><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Feb 11, 2014 at 5:44 AM, Oliver Stannard <span dir="ltr"><<a href="mailto:oliver.stannard@arm.com" target="_blank">oliver.stannard@arm.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi echristo,<br>
<br>
Add -gdwarf-N options to cc1as, and pass them through from the driver.<br>
<br>
<a href="http://llvm-reviews.chandlerc.com/D2737" target="_blank">http://llvm-reviews.chandlerc.com/D2737</a><br>
<br>
Files:<br>
  include/clang/Driver/CC1AsOptions.td<br>
  lib/Driver/Tools.cpp<br>
  test/Driver/integrated-as.s<br>
  tools/driver/cc1as_main.cpp<br>
<br>
Index: include/clang/Driver/CC1AsOptions.td<br>
===================================================================<br>
--- include/clang/Driver/CC1AsOptions.td<br>
+++ include/clang/Driver/CC1AsOptions.td<br>
@@ -85,6 +85,13 @@<br>
<br>
 def g : Flag<["-"], "g">, HelpText<"Generate source level debug information">;<br>
<br>
+def gdwarf_2 : Flag<["-"], "gdwarf-2">,<br>
+  HelpText<"Generate source level debug information with dwarf version 2">;<br>
+def gdwarf_3 : Flag<["-"], "gdwarf-3">,<br>
+  HelpText<"Generate source level debug information with dwarf version 3">;<br>
+def gdwarf_4 : Flag<["-"], "gdwarf-4">,<br>
+  HelpText<"Generate source level debug information with dwarf version 4">;<br>
+<br>
 def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">,<br>
   HelpText<"The compilation directory to embed in the debug info.">;<br>
<br>
Index: lib/Driver/Tools.cpp<br>
===================================================================<br>
--- lib/Driver/Tools.cpp<br>
+++ lib/Driver/Tools.cpp<br>
@@ -4068,6 +4068,13 @@<br>
       if (!A->getOption().matches(options::OPT_g0))<br>
         CmdArgs.push_back("-g");<br>
<br>
+    if (Args.hasArg(options::OPT_gdwarf_2))<br>
+      CmdArgs.push_back("-gdwarf-2");<br>
+    if (Args.hasArg(options::OPT_gdwarf_3))<br>
+      CmdArgs.push_back("-gdwarf-3");<br>
+    if (Args.hasArg(options::OPT_gdwarf_4))<br>
+      CmdArgs.push_back("-gdwarf-4");<br>
+<br>
     // Add the -fdebug-compilation-dir flag if needed.<br>
     addDebugCompDirArg(Args, CmdArgs);<br>
<br>
Index: test/Driver/integrated-as.s<br>
===================================================================<br>
--- test/Driver/integrated-as.s<br>
+++ test/Driver/integrated-as.s<br>
@@ -38,3 +38,12 @@<br>
 // COMPRESS_DEBUG_QUIET-NOT: warning: DWARF compression is not implemented<br>
 // COMPRESS_DEBUG_QUIET-NOT: warning: argument unused during compilation<br>
 // COMPRESS_DEBUG_QUIET: -cc1as<br>
+<br>
+// RUN: %clang -### -c -integrated-as %s -gdwarf-2 2>&1 | FileCheck --check-prefix=DWARF2 %s<br>
+// DWARF2: "-g" "-gdwarf-2"<br>
+<br>
+// RUN: %clang -### -c -integrated-as %s -gdwarf-3 2>&1 | FileCheck --check-prefix=DWARF3 %s<br>
+// DWARF3: "-g" "-gdwarf-3"<br>
+<br>
+// RUN: %clang -### -c -integrated-as %s -gdwarf-4 2>&1 | FileCheck --check-prefix=DWARF4 %s<br>
+// DWARF4: "-g" "-gdwarf-4"<br>
Index: tools/driver/cc1as_main.cpp<br>
===================================================================<br>
--- tools/driver/cc1as_main.cpp<br>
+++ tools/driver/cc1as_main.cpp<br>
@@ -85,6 +85,7 @@<br>
   unsigned NoInitialTextSection : 1;<br>
   unsigned SaveTemporaryLabels : 1;<br>
   unsigned GenDwarfForAssembly : 1;<br>
+  unsigned DwarfVersion;<br>
   std::string DwarfDebugFlags;<br>
   std::string DwarfDebugProducer;<br>
   std::string DebugCompilationDir;<br>
@@ -135,6 +136,7 @@<br>
     ShowEncoding = 0;<br>
     RelaxAll = 0;<br>
     NoExecStack = 0;<br>
+    DwarfVersion = 3;<br>
   }<br>
<br>
   static bool CreateFromArgs(AssemblerInvocation &Res, const char **ArgBegin,<br>
@@ -186,6 +188,13 @@<br>
   Opts.NoInitialTextSection = Args->hasArg(OPT_n);<br>
   Opts.SaveTemporaryLabels = Args->hasArg(OPT_msave_temp_labels);<br>
   Opts.GenDwarfForAssembly = Args->hasArg(OPT_g);<br>
+  if (Args->hasArg(OPT_gdwarf_2))<br>
+    Opts.DwarfVersion = 2;<br>
+  if (Args->hasArg(OPT_gdwarf_3))<br>
+    Opts.DwarfVersion = 3;<br>
+  if (Args->hasArg(OPT_gdwarf_4))<br>
+    Opts.DwarfVersion = 4;<br></blockquote><div><br></div><div>This code appears to be untested - is that the case? Can we test it in some way? (it might necessarily be an IR level test, but just testing that the version in the generated DWARF is what was requested - I think that'd be OK... but open to debate/discussion on the matter)</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+<br>
   Opts.DwarfDebugFlags = Args->getLastArgValue(OPT_dwarf_debug_flags);<br>
   Opts.DwarfDebugProducer = Args->getLastArgValue(OPT_dwarf_debug_producer);<br>
   Opts.DebugCompilationDir = Args->getLastArgValue(OPT_fdebug_compilation_dir);<br>
@@ -318,6 +327,7 @@<br>
     Ctx.setCompilationDir(Opts.DebugCompilationDir);<br>
   if (!Opts.MainFileName.empty())<br>
     Ctx.setMainFileName(StringRef(Opts.MainFileName));<br>
+  Ctx.setDwarfVersion(Opts.DwarfVersion);<br>
<br>
   // Build up the feature string from the target feature list.<br>
   std::string FS;<br>
<br>_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>