[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
dblaikie added inline comments. Comment at: clang/include/clang/Basic/CodeGenOptions.def:35 CODEGENOPT(AsmVerbose, 1, 0) ///< -dA, -fverbose-asm. +CODEGENOPT(Dwarf64 , 1, 0) ///< -gdwarf64. CODEGENOPT(PreserveAsmComments, 1, 1) ///< -dA, -fno-preserve-as-comments. ayermolo wrote: > ikudrin wrote: > > dblaikie wrote: > > > Is there any precedent to draw from for this flag name? (Does GCC support > > > DWARF64? Does it support it under this flag name or some other? > > > (similarly with other gcc-like compilers (Intel's? Whoever else... ))) > > It looks like we are pioneering in that area. To me, the proposed name > > looks consonant with other debug-related switches. > I didn't see any dwarf64 flags in gcc: > https://gcc.gnu.org/onlinedocs/gcc/Option-Summary.html > > I tried to follow clang convention for other dwarf flags. Huh - tried making really big binaries or anything (or checking the GCC source) to see if it does it implicitly under some conditions? Hmm - looks like this maybe came up at the Linux Plumbers Conference & the suggested flag was -fdwarf64/32: https://linuxplumbersconf.org/event/7/contributions/746/attachments/578/1018/DWARF5-64.pdf (this avoids the "does g imply debug info" and avoids the subtle distinction between "-gdwarf64 and -gdwarf-N" the presence of the '-' changing the meaning of the number quite significantly). Though hardly authoritative https://linuxplumbersconf.org/event/7/sessions/90/attachments/583/1201/dwarf-bof-notes-aug24-lpc-2020.txt - seems some other options were (are?) under consideration too. Might be worth touching base with the folks involved in those discussions to see where they're at with regard to naming/support? (they also touch on the "all units must agree" issue - so not sure if the same folks involved in those discussions have also been included in the discussions around debug info 32/64 sorting as another approach that may avoid the "all units must agree" constraint (I assume that's the reason they had that constraint)) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
ayermolo updated this revision to Diff 306482. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 Files: clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/debug-options.c Index: clang/test/Driver/debug-options.c === --- clang/test/Driver/debug-options.c +++ clang/test/Driver/debug-options.c @@ -375,3 +375,16 @@ // 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" +// +// RUN: %clang -### -gdwarf-5 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-3 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-2 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_OFF %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu -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 'DWARFv3 or greater' +// GDWARF64_32ARCH: error: invalid argument '-gdwarf64' only allowed with '64 bit architecture' Index: clang/lib/Frontend/CompilerInvocation.cpp === --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -1005,6 +1005,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); Index: clang/lib/Driver/ToolChains/Clang.cpp === --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4015,6 +4015,22 @@ 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 = TC.getTriple(); +if (DWARFVersion < 3) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "DWARFv3 or greater"; +else if (!RawTriple.isArch64Bit()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "64 bit architecture"; +else if (!RawTriple.isOSBinFormatELF()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "elf output format"; +else + CmdArgs.push_back("-gdwarf64"); + } + RenderDebugInfoCompressionArgs(Args, CmdArgs, D, TC); } Index: clang/lib/CodeGen/BackendUtil.cpp === --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -563,6 +563,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 : HSOpts.UserEntries) Index: clang/include/clang/Driver/Options.td === --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2142,6 +2142,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<"Enables DWARF64 format for ELF binaries, if debug information emission is enabled.">; def gcodeview : Flag<["-"], "gcodeview">, HelpText<"Generate CodeView debug information">, Index: clang/include/clang/Basic/CodeGenOptions.def
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
dblaikie added inline comments. Comment at: clang/lib/Driver/ToolChains/Clang.cpp:4023 + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "DWARVv3 or greater"; +else if (!RawTriple.isArch64Bit()) Comment at: clang/test/Driver/debug-options.c:389 +// GDWARF64_ON: "-gdwarf64" +// GDWARF64_OFF: error: invalid argument '-gdwarf64' only allowed with 'DWARVv3 or greater' +// GDWARF64_32ARCH: error: invalid argument '-gdwarf64' only allowed with '64 bit architecture' Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
ayermolo updated this revision to Diff 306477. ayermolo marked 3 inline comments as done. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 Files: clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/debug-options.c Index: clang/test/Driver/debug-options.c === --- clang/test/Driver/debug-options.c +++ clang/test/Driver/debug-options.c @@ -375,3 +375,16 @@ // 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" +// +// RUN: %clang -### -gdwarf-5 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-3 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-2 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_OFF %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu -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 'DWARVv3 or greater' +// GDWARF64_32ARCH: error: invalid argument '-gdwarf64' only allowed with '64 bit architecture' Index: clang/lib/Frontend/CompilerInvocation.cpp === --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -1005,6 +1005,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); Index: clang/lib/Driver/ToolChains/Clang.cpp === --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4015,6 +4015,22 @@ 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 = TC.getTriple(); +if (DWARFVersion < 3) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "DWARVv3 or greater"; +else if (!RawTriple.isArch64Bit()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "64 bit architecture"; +else if (!RawTriple.isOSBinFormatELF()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "elf output format"; +else + CmdArgs.push_back("-gdwarf64"); + } + RenderDebugInfoCompressionArgs(Args, CmdArgs, D, TC); } Index: clang/lib/CodeGen/BackendUtil.cpp === --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -563,6 +563,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 : HSOpts.UserEntries) Index: clang/include/clang/Driver/Options.td === --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2142,6 +2142,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<"Enables DWARF64 format for ELF binaries, if debug information emission is enabled.">; def gcodeview : Flag<["-"], "gcodeview">, HelpText<"Generate CodeView debug information">, Index: clang/include/clang/Basic/CodeGenOptions.def
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
ikudrin added inline comments. Comment at: clang/include/clang/Driver/Options.td:2145-2146 HelpText<"Generate source-level debug information with dwarf version 5">; +def gdwarf64 : Flag<["-"], "gdwarf64">, Group, Flags<[CC1Option]>, + HelpText<"Generate DWARF64 debug information.">; ayermolo wrote: > dblaikie wrote: > > ayermolo wrote: > > > dblaikie wrote: > > > > Does this actually enable debug info emission (the -gdwarf-N versions > > > > do cause debug info to be emitted, and set the dwarf version - but, say > > > > -ggnu-pubnames does not cause debug info to be emitted if it isn't > > > > otherwise requested). Experience has shown it's probably better to have > > > > flags like this not enable debug info emission - so they can be used > > > > orthogonally (eg: if a project is large, it can add -gdwarf64 to its > > > > flags permanently, even though maybe only some build modes, etc, enable > > > > debug info (with -g)) > > > > > > > > If this doesn't enable debug info emission, the phrasing of the help > > > > text might be worth changing somewhat (I wonder how we document > > > > -ggnu-pubnames, for instance/comparison/inspiration) > > > This enables DWARF64 if emission is enabled. > > > > > > From DebugInfo it seems like it's only Elf Format: > > > > > > bool Dwarf64 = Asm->TM.Options.MCOptions.Dwarf64 && > > > DwarfVersion >= 3 && // DWARF64 was introduced in > > > DWARFv3. > > > TT.isArch64Bit() &&// DWARF64 requires 64-bit > > > relocations. > > > TT.isOSBinFormatELF(); // Support only ELF for now. > > > This enables DWARF64 if emission is enabled. > > > > Then perhaps the Help Text phrasing should distinguish this behavior from > > the behavior of -gdwarf-N which not only sets the version, but enables > > emission. (perhaps the phrasing of flags that don't enable emission, like > > "-ggnu-pubnames" could provide inspiration for phrasing the help text for > > this new flag) > > > > > From DebugInfo it seems like it's only Elf Format: > > > > I'm curious as to why it's ELF only, though - could you explain what the > > motivation is there? > > > > (random aside: I still worry about this precedent for -g* flags that > > sometimes enable debug info and set a feature, and sometimes they only set > > the feature and don't enable debug info - it's a bit of a confusing mess > > and I personally rather the -fdebug* flags set a feature but don't enable > > emission and -g* flags enable emission, but there's a lack of clear > > agreement and there's examples on both sides, so not sure there's much to > > be done about that here) > > This enables DWARF64 if emission is enabled. > > > > > > > From DebugInfo it seems like it's only Elf Format: > > I'm curious as to why it's ELF only, though - could you explain what the > motivation is there? > Our customers need DWARF64 for ELF and I do not have much experience with other platforms, so I cannot provide adequate support there. Some platform-specific tools, like `dsymutil`, have to be fixed to work with DWARF64, but I am personally a bit reluctant to do that because I cannot check the result in practice. If there will be developers who are willing to support DWARF64 on these platforms, they will be able to unlock it and use all the experience we collect with ELF, but for now, I prefer to focus on one particular platform with practical applications. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
ayermolo updated this revision to Diff 306263. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 Files: clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/debug-options.c Index: clang/test/Driver/debug-options.c === --- clang/test/Driver/debug-options.c +++ clang/test/Driver/debug-options.c @@ -375,3 +375,16 @@ // 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" +// +// RUN: %clang -### -gdwarf-5 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-3 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-2 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_OFF %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu -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 architecture' Index: clang/lib/Frontend/CompilerInvocation.cpp === --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -1005,6 +1005,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); Index: clang/lib/Driver/ToolChains/Clang.cpp === --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4015,6 +4015,22 @@ 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 = TC.getTriple(); +if (DWARFVersion < 3) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "DWARVv3 or greater."; +else if (!RawTriple.isArch64Bit()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "64 bit architecutre"; +else if (!RawTriple.isOSBinFormatELF()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "elf output format."; +else + CmdArgs.push_back("-gdwarf64"); + } + RenderDebugInfoCompressionArgs(Args, CmdArgs, D, TC); } Index: clang/lib/CodeGen/BackendUtil.cpp === --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -563,6 +563,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 : HSOpts.UserEntries) Index: clang/include/clang/Driver/Options.td === --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2142,6 +2142,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<"Enables DWARF64 format for ELF binaries, if debug information emission is enabled.">; def gcodeview : Flag<["-"], "gcodeview">, HelpText<"Generate CodeView debug information">, Index: clang/include/clang/Basic/CodeGenOptions.def
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
dblaikie added inline comments. Comment at: clang/include/clang/Driver/Options.td:2145-2146 HelpText<"Generate source-level debug information with dwarf version 5">; +def gdwarf64 : Flag<["-"], "gdwarf64">, Group, Flags<[CC1Option]>, + HelpText<"Generate DWARF64 debug information.">; ayermolo wrote: > dblaikie wrote: > > Does this actually enable debug info emission (the -gdwarf-N versions do > > cause debug info to be emitted, and set the dwarf version - but, say > > -ggnu-pubnames does not cause debug info to be emitted if it isn't > > otherwise requested). Experience has shown it's probably better to have > > flags like this not enable debug info emission - so they can be used > > orthogonally (eg: if a project is large, it can add -gdwarf64 to its flags > > permanently, even though maybe only some build modes, etc, enable debug > > info (with -g)) > > > > If this doesn't enable debug info emission, the phrasing of the help text > > might be worth changing somewhat (I wonder how we document -ggnu-pubnames, > > for instance/comparison/inspiration) > This enables DWARF64 if emission is enabled. > > From DebugInfo it seems like it's only Elf Format: > > bool Dwarf64 = Asm->TM.Options.MCOptions.Dwarf64 && > DwarfVersion >= 3 && // DWARF64 was introduced in DWARFv3. > TT.isArch64Bit() &&// DWARF64 requires 64-bit > relocations. > TT.isOSBinFormatELF(); // Support only ELF for now. > This enables DWARF64 if emission is enabled. Then perhaps the Help Text phrasing should distinguish this behavior from the behavior of -gdwarf-N which not only sets the version, but enables emission. (perhaps the phrasing of flags that don't enable emission, like "-ggnu-pubnames" could provide inspiration for phrasing the help text for this new flag) > From DebugInfo it seems like it's only Elf Format: I'm curious as to why it's ELF only, though - could you explain what the motivation is there? (random aside: I still worry about this precedent for -g* flags that sometimes enable debug info and set a feature, and sometimes they only set the feature and don't enable debug info - it's a bit of a confusing mess and I personally rather the -fdebug* flags set a feature but don't enable emission and -g* flags enable emission, but there's a lack of clear agreement and there's examples on both sides, so not sure there's much to be done about that here) Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
ayermolo added inline comments. Comment at: clang/include/clang/Driver/Options.td:2145-2146 HelpText<"Generate source-level debug information with dwarf version 5">; +def gdwarf64 : Flag<["-"], "gdwarf64">, Group, Flags<[CC1Option]>, + HelpText<"Generate DWARF64 debug information.">; ayermolo wrote: > dblaikie wrote: > > Does this actually enable debug info emission (the -gdwarf-N versions do > > cause debug info to be emitted, and set the dwarf version - but, say > > -ggnu-pubnames does not cause debug info to be emitted if it isn't > > otherwise requested). Experience has shown it's probably better to have > > flags like this not enable debug info emission - so they can be used > > orthogonally (eg: if a project is large, it can add -gdwarf64 to its flags > > permanently, even though maybe only some build modes, etc, enable debug > > info (with -g)) > > > > If this doesn't enable debug info emission, the phrasing of the help text > > might be worth changing somewhat (I wonder how we document -ggnu-pubnames, > > for instance/comparison/inspiration) > This enables DWARF64 if emission is enabled. > > From DebugInfo it seems like it's only Elf Format: > > bool Dwarf64 = Asm->TM.Options.MCOptions.Dwarf64 && > DwarfVersion >= 3 && // DWARF64 was introduced in DWARFv3. > TT.isArch64Bit() &&// DWARF64 requires 64-bit > relocations. > TT.isOSBinFormatELF(); // Support only ELF for now. > This enables DWARF64 if emission is enabled. > Comment at: clang/lib/Driver/ToolChains/Clang.cpp:4025 + << A->getAsString(Args) << "64 bit architecutre"; +else + CmdArgs.push_back("-gdwarf64"); dblaikie wrote: > ikudrin wrote: > > We also should check that the output format is ELF. > Is DWARF64 not supported on MachO, for instance? (I'd have DWARF64 would be > pretty usable on any platform that supported DWARF in general - certainly > some system tools that are DWARF aware (including actual debuggers) might not > be up to the task of using it - but if we can correctly generate it in the > object files, it seems OK to accept the request (useful for folks testing > out/implementing DWARF64 consumers on those platforms)) From DebugInfo it seems like it's only Elf Format: ``` bool Dwarf64 = Asm->TM.Options.MCOptions.Dwarf64 && DwarfVersion >= 3 && // DWARF64 was introduced in DWARFv3. TT.isArch64Bit() &&// DWARF64 requires 64-bit relocations. TT.isOSBinFormatELF(); // Support only ELF for now. ``` Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
ayermolo added inline comments. Comment at: clang/include/clang/Driver/Options.td:2145-2146 HelpText<"Generate source-level debug information with dwarf version 5">; +def gdwarf64 : Flag<["-"], "gdwarf64">, Group, Flags<[CC1Option]>, + HelpText<"Generate DWARF64 debug information.">; dblaikie wrote: > Does this actually enable debug info emission (the -gdwarf-N versions do > cause debug info to be emitted, and set the dwarf version - but, say > -ggnu-pubnames does not cause debug info to be emitted if it isn't otherwise > requested). Experience has shown it's probably better to have flags like this > not enable debug info emission - so they can be used orthogonally (eg: if a > project is large, it can add -gdwarf64 to its flags permanently, even though > maybe only some build modes, etc, enable debug info (with -g)) > > If this doesn't enable debug info emission, the phrasing of the help text > might be worth changing somewhat (I wonder how we document -ggnu-pubnames, > for instance/comparison/inspiration) This enables DWARF64 if emission is enabled. From DebugInfo it seems like it's only Elf Format: bool Dwarf64 = Asm->TM.Options.MCOptions.Dwarf64 && DwarfVersion >= 3 && // DWARF64 was introduced in DWARFv3. TT.isArch64Bit() &&// DWARF64 requires 64-bit relocations. TT.isOSBinFormatELF(); // Support only ELF for now. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
dblaikie added inline comments. Comment at: clang/include/clang/Driver/Options.td:2145-2146 HelpText<"Generate source-level debug information with dwarf version 5">; +def gdwarf64 : Flag<["-"], "gdwarf64">, Group, Flags<[CC1Option]>, + HelpText<"Generate DWARF64 debug information.">; Does this actually enable debug info emission (the -gdwarf-N versions do cause debug info to be emitted, and set the dwarf version - but, say -ggnu-pubnames does not cause debug info to be emitted if it isn't otherwise requested). Experience has shown it's probably better to have flags like this not enable debug info emission - so they can be used orthogonally (eg: if a project is large, it can add -gdwarf64 to its flags permanently, even though maybe only some build modes, etc, enable debug info (with -g)) If this doesn't enable debug info emission, the phrasing of the help text might be worth changing somewhat (I wonder how we document -ggnu-pubnames, for instance/comparison/inspiration) Comment at: clang/lib/Driver/ToolChains/Clang.cpp:4022-4023 +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()) perhaps we could phrase this more generally (so it's true even when DWARFv6 comes along - and doesn't get unwieldy listing all the DWARF versions). "DWARFv3 or later" ? Comment at: clang/lib/Driver/ToolChains/Clang.cpp:4025 + << A->getAsString(Args) << "64 bit architecutre"; +else + CmdArgs.push_back("-gdwarf64"); ikudrin wrote: > We also should check that the output format is ELF. Is DWARF64 not supported on MachO, for instance? (I'd have DWARF64 would be pretty usable on any platform that supported DWARF in general - certainly some system tools that are DWARF aware (including actual debuggers) might not be up to the task of using it - but if we can correctly generate it in the object files, it seems OK to accept the request (useful for folks testing out/implementing DWARF64 consumers on those platforms)) Comment at: clang/test/Driver/debug-options.c:390 +// 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' Typo in "architecture" Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
ayermolo added inline comments. Comment at: clang/lib/Driver/ToolChains/Clang.cpp:4020 +const Arg *A = Args.getLastArg(options::OPT_gdwarf64); +const llvm::Triple = TC.getTriple(); +if (DWARFVersion < 3) MaskRay wrote: > The variable is only used once. Inline it Both A, and RawTriple are used more than once. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D90507: Adding DWARF64 clang flag: -gdwarf64
ayermolo updated this revision to Diff 306223. ayermolo retitled this revision from "Adding DWARF64 clang flag" to "Adding DWARF64 clang flag: -gdwarf64". Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D90507/new/ https://reviews.llvm.org/D90507 Files: clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/debug-options.c Index: clang/test/Driver/debug-options.c === --- clang/test/Driver/debug-options.c +++ clang/test/Driver/debug-options.c @@ -375,3 +375,16 @@ // 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" +// +// RUN: %clang -### -gdwarf-5 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-3 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_ON %s +// RUN: %clang -### -gdwarf-2 -gdwarf64 -target x86_64-linux-gnu %s 2>&1 | FileCheck -check-prefix=GDWARF64_OFF %s +// RUN: %clang -### -gdwarf-4 -gdwarf64 -target x86_64-linux-gnu -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' Index: clang/lib/Frontend/CompilerInvocation.cpp === --- clang/lib/Frontend/CompilerInvocation.cpp +++ clang/lib/Frontend/CompilerInvocation.cpp @@ -1005,6 +1005,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); Index: clang/lib/Driver/ToolChains/Clang.cpp === --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -4015,6 +4015,22 @@ 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 = TC.getTriple(); +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()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "64 bit architecutre"; +else if (!RawTriple.isOSBinFormatELF()) + D.Diag(diag::err_drv_argument_only_allowed_with) + << A->getAsString(Args) << "elf output format."; +else + CmdArgs.push_back("-gdwarf64"); + } + RenderDebugInfoCompressionArgs(Args, CmdArgs, D, TC); } Index: clang/lib/CodeGen/BackendUtil.cpp === --- clang/lib/CodeGen/BackendUtil.cpp +++ clang/lib/CodeGen/BackendUtil.cpp @@ -563,6 +563,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 : HSOpts.UserEntries) Index: clang/include/clang/Driver/Options.td === --- clang/include/clang/Driver/Options.td +++ clang/include/clang/Driver/Options.td @@ -2142,6 +2142,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">, Index: