diff --git a/clang/include/clang/Basic/CodeGenOptions.def b/clang/include/clang/Basic/CodeGenOptions.def --- a/clang/include/clang/Basic/CodeGenOptions.def +++ b/clang/include/clang/Basic/CodeGenOptions.def @@ -32,6 +32,7 @@ llvm::DebugCompressionType::None) CODEGENOPT(RelaxELFRelocations, 1, 0) ///< -Wa,--mrelax-relocations CODEGENOPT(AsmVerbose , 1, 0) ///< -dA, -fverbose-asm. +CODEGENOPT(Dwarf64 , 1, 0) ///< -gdwarf64. CODEGENOPT(PreserveAsmComments, 1, 1) ///< -dA, -fno-preserve-as-comments. CODEGENOPT(AssumeSaneOperatorNew , 1, 1) ///< implicit __attribute__((malloc)) operator new CODEGENOPT(Autolink , 1, 1) ///< -fno-autolink diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2096,6 +2096,8 @@ HelpText<"Generate source-level debug information with dwarf version 4">; def gdwarf_5 : Flag<["-"], "gdwarf-5">, Group, HelpText<"Generate source-level debug information with dwarf version 5">; +def gdwarf64 : Flag<["-"], "gdwarf64">, Group, Flags<[CC1Option]>, + HelpText<"Generate DWARF64 debug information.">; def gcodeview : Flag<["-"], "gcodeview">, HelpText<"Generate CodeView debug information">, diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -562,6 +562,7 @@ Options.MCOptions.MCFatalWarnings = CodeGenOpts.FatalWarnings; Options.MCOptions.MCNoWarn = CodeGenOpts.NoWarn; Options.MCOptions.AsmVerbose = CodeGenOpts.AsmVerbose; + Options.MCOptions.Dwarf64 = CodeGenOpts.Dwarf64; Options.MCOptions.PreserveAsmComments = CodeGenOpts.PreserveAsmComments; Options.MCOptions.ABIName = TargetOpts.ABI; for (const auto &Entry : HSOpts.UserEntries) diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -4012,6 +4012,20 @@ if (DebuggerTuning == llvm::DebuggerKind::SCE) CmdArgs.push_back("-dwarf-explicit-import"); + if (Args.hasArg(options::OPT_gdwarf64)) { + const Arg *A = Args.getLastArg(options::OPT_gdwarf64); + const llvm::Triple &RawTriple = TC.getTriple(); + const llvm::Triple &Triple = TC.getEffectiveTriple(); + if (DWARFVersion < 3) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "-gdwarf-5, -gdwarf-4, -gdwarf-3"; + else if (!RawTriple.isArch64Bit() || !Triple.isArch64Bit()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "64 bit architecutre"; + else + CmdArgs.push_back("-gdwarf64"); + } + RenderDebugInfoCompressionArgs(Args, CmdArgs, D, TC); } diff --git a/clang/lib/Frontend/CompilerInvocation.cpp b/clang/lib/Frontend/CompilerInvocation.cpp --- a/clang/lib/Frontend/CompilerInvocation.cpp +++ b/clang/lib/Frontend/CompilerInvocation.cpp @@ -905,6 +905,7 @@ Args.hasFlag(OPT_fcoverage_mapping, OPT_fno_coverage_mapping, false); Opts.DumpCoverageMapping = Args.hasArg(OPT_dump_coverage_mapping); Opts.AsmVerbose = !Args.hasArg(OPT_fno_verbose_asm); + Opts.Dwarf64 = Args.hasArg(OPT_gdwarf64); Opts.PreserveAsmComments = !Args.hasArg(OPT_fno_preserve_as_comments); Opts.AssumeSaneOperatorNew = !Args.hasArg(OPT_fno_assume_sane_operator_new); Opts.ObjCAutoRefCountExceptions = Args.hasArg(OPT_fobjc_arc_exceptions); diff --git a/clang/test/Driver/debug-options.c b/clang/test/Driver/debug-options.c --- a/clang/test/Driver/debug-options.c +++ b/clang/test/Driver/debug-options.c @@ -374,4 +374,17 @@ // RUN: %clang -### -fno-eliminate-unused-debug-types -g1 -c %s 2>&1 \ // RUN: | FileCheck -check-prefix=NO_DEBUG_UNUSED_TYPES %s // NO_DEBUG_UNUSED_TYPES: "-debug-info-kind={{limited|line-tables-only|standalone}}" -// NO_DEBUG_UNUSED_TYPES-NOT: "-debug-info-kind=unused-types" +// NO_DEBUG_U∏NUSED_TYPES-NOT: "-debug-info-kind=unused-types" +// +// RUN: %clang -### -gdwarf-5 -gdwarf64 %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-3 -gdwarf64 %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-2 -gdwarf64 %s 2>&1 | FileCheck -check-prefix=GDWARF64_OFF %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 \ +// RUN: | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target i386-linux-gnu %s 2>&1 \ +// RUN: | FileCheck -check-prefix=GDWARF64_32ARCH %s +// +// GDWARF64_ON: "-gdwarf64" +// GDWARF64_OFF: error: invalid argument '-gdwarf64' only allowed with '-gdwarf-5, -gdwarf-4, -gdwarf-3' +// GDWARF64_32ARCH: error: invalid argument '-gdwarf64' only allowed with '64 bit architecutre' diff --git a/lld/test/COFF/lto-new-pass-manager.ll.obj b/lld/test/COFF/lto-new-pass-manager.ll.obj new file mode 100644 index 0000000000000000000000000000000000000000..0000000000000000000000000000000000000000 GIT binary patch literal 0 Hc$@