[PATCH] Pass -gdwarf-N options to integrated assembler

David Blaikie dblaikie at gmail.com
Tue Feb 11 09:15:38 PST 2014


On Tue, Feb 11, 2014 at 5:44 AM, Oliver Stannard <oliver.stannard at arm.com>wrote:

> Hi echristo,
>
> Add -gdwarf-N options to cc1as, and pass them through from the driver.
>
> http://llvm-reviews.chandlerc.com/D2737
>
> Files:
>   include/clang/Driver/CC1AsOptions.td
>   lib/Driver/Tools.cpp
>   test/Driver/integrated-as.s
>   tools/driver/cc1as_main.cpp
>
> Index: include/clang/Driver/CC1AsOptions.td
> ===================================================================
> --- include/clang/Driver/CC1AsOptions.td
> +++ include/clang/Driver/CC1AsOptions.td
> @@ -85,6 +85,13 @@
>
>  def g : Flag<["-"], "g">, HelpText<"Generate source level debug
> information">;
>
> +def gdwarf_2 : Flag<["-"], "gdwarf-2">,
> +  HelpText<"Generate source level debug information with dwarf version
> 2">;
> +def gdwarf_3 : Flag<["-"], "gdwarf-3">,
> +  HelpText<"Generate source level debug information with dwarf version
> 3">;
> +def gdwarf_4 : Flag<["-"], "gdwarf-4">,
> +  HelpText<"Generate source level debug information with dwarf version
> 4">;
> +
>  def fdebug_compilation_dir : Separate<["-"], "fdebug-compilation-dir">,
>    HelpText<"The compilation directory to embed in the debug info.">;
>
> Index: lib/Driver/Tools.cpp
> ===================================================================
> --- lib/Driver/Tools.cpp
> +++ lib/Driver/Tools.cpp
> @@ -4068,6 +4068,13 @@
>        if (!A->getOption().matches(options::OPT_g0))
>          CmdArgs.push_back("-g");
>
> +    if (Args.hasArg(options::OPT_gdwarf_2))
> +      CmdArgs.push_back("-gdwarf-2");
> +    if (Args.hasArg(options::OPT_gdwarf_3))
> +      CmdArgs.push_back("-gdwarf-3");
> +    if (Args.hasArg(options::OPT_gdwarf_4))
> +      CmdArgs.push_back("-gdwarf-4");
> +
>      // Add the -fdebug-compilation-dir flag if needed.
>      addDebugCompDirArg(Args, CmdArgs);
>
> Index: test/Driver/integrated-as.s
> ===================================================================
> --- test/Driver/integrated-as.s
> +++ test/Driver/integrated-as.s
> @@ -38,3 +38,12 @@
>  // COMPRESS_DEBUG_QUIET-NOT: warning: DWARF compression is not implemented
>  // COMPRESS_DEBUG_QUIET-NOT: warning: argument unused during compilation
>  // COMPRESS_DEBUG_QUIET: -cc1as
> +
> +// RUN: %clang -### -c -integrated-as %s -gdwarf-2 2>&1 | FileCheck
> --check-prefix=DWARF2 %s
> +// DWARF2: "-g" "-gdwarf-2"
> +
> +// RUN: %clang -### -c -integrated-as %s -gdwarf-3 2>&1 | FileCheck
> --check-prefix=DWARF3 %s
> +// DWARF3: "-g" "-gdwarf-3"
> +
> +// RUN: %clang -### -c -integrated-as %s -gdwarf-4 2>&1 | FileCheck
> --check-prefix=DWARF4 %s
> +// DWARF4: "-g" "-gdwarf-4"
> Index: tools/driver/cc1as_main.cpp
> ===================================================================
> --- tools/driver/cc1as_main.cpp
> +++ tools/driver/cc1as_main.cpp
> @@ -85,6 +85,7 @@
>    unsigned NoInitialTextSection : 1;
>    unsigned SaveTemporaryLabels : 1;
>    unsigned GenDwarfForAssembly : 1;
> +  unsigned DwarfVersion;
>    std::string DwarfDebugFlags;
>    std::string DwarfDebugProducer;
>    std::string DebugCompilationDir;
> @@ -135,6 +136,7 @@
>      ShowEncoding = 0;
>      RelaxAll = 0;
>      NoExecStack = 0;
> +    DwarfVersion = 3;
>    }
>
>    static bool CreateFromArgs(AssemblerInvocation &Res, const char
> **ArgBegin,
> @@ -186,6 +188,13 @@
>    Opts.NoInitialTextSection = Args->hasArg(OPT_n);
>    Opts.SaveTemporaryLabels = Args->hasArg(OPT_msave_temp_labels);
>    Opts.GenDwarfForAssembly = Args->hasArg(OPT_g);
> +  if (Args->hasArg(OPT_gdwarf_2))
> +    Opts.DwarfVersion = 2;
> +  if (Args->hasArg(OPT_gdwarf_3))
> +    Opts.DwarfVersion = 3;
> +  if (Args->hasArg(OPT_gdwarf_4))
> +    Opts.DwarfVersion = 4;
>

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)


> +
>    Opts.DwarfDebugFlags = Args->getLastArgValue(OPT_dwarf_debug_flags);
>    Opts.DwarfDebugProducer =
> Args->getLastArgValue(OPT_dwarf_debug_producer);
>    Opts.DebugCompilationDir =
> Args->getLastArgValue(OPT_fdebug_compilation_dir);
> @@ -318,6 +327,7 @@
>      Ctx.setCompilationDir(Opts.DebugCompilationDir);
>    if (!Opts.MainFileName.empty())
>      Ctx.setMainFileName(StringRef(Opts.MainFileName));
> +  Ctx.setDwarfVersion(Opts.DwarfVersion);
>
>    // Build up the feature string from the target feature list.
>    std::string FS;
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20140211/f7c58c02/attachment.html>


More information about the cfe-commits mailing list