[clang] [flang] [flang][Driver] Support -gsplit-dwarf. (PR #160540)
Tom Eccles via cfe-commits
cfe-commits at lists.llvm.org
Wed Sep 24 14:47:37 PDT 2025
================
@@ -131,20 +135,57 @@ void Flang::addOtherOptions(const ArgList &Args, ArgStringList &CmdArgs) const {
options::OPT_finstrument_functions});
llvm::codegenoptions::DebugInfoKind DebugInfoKind;
+ bool hasDwarfNArg = getDwarfNArg(Args) != nullptr;
if (Args.hasArg(options::OPT_gN_Group)) {
Arg *gNArg = Args.getLastArg(options::OPT_gN_Group);
DebugInfoKind = debugLevelToInfoKind(*gNArg);
- } else if (Args.hasArg(options::OPT_g_Group)) {
+ } else if (Args.hasArg(options::OPT_g_Flag) || hasDwarfNArg) {
DebugInfoKind = llvm::codegenoptions::FullDebugInfo;
} else {
DebugInfoKind = llvm::codegenoptions::NoDebugInfo;
}
addDebugInfoKind(CmdArgs, DebugInfoKind);
- if (getDwarfNArg(Args)) {
+ if (hasDwarfNArg) {
const unsigned DwarfVersion = getDwarfVersion(getToolChain(), Args);
CmdArgs.push_back(
Args.MakeArgString("-dwarf-version=" + Twine(DwarfVersion)));
}
+ if (Args.hasArg(options::OPT_gsplit_dwarf) ||
+ Args.hasArg(options::OPT_gsplit_dwarf_EQ)) {
+ // FIXME: -gsplit-dwarf on AIX is currently unimplemented.
+ if (TC.getTriple().isOSAIX()) {
+ D.Diag(diag::err_drv_unsupported_opt_for_target)
+ << Args.getLastArg(options::OPT_gsplit_dwarf)->getSpelling()
+ << TC.getTriple().str();
+ return;
+ }
+ if (DebugInfoKind == llvm::codegenoptions::NoDebugInfo)
+ return;
+
+ Arg *SplitDWARFArg;
+ DwarfFissionKind DwarfFission = getDebugFissionKind(D, Args, SplitDWARFArg);
+
+ if (DwarfFission == DwarfFissionKind::None ||
+ !checkDebugInfoOption(SplitDWARFArg, Args, D, TC))
+ return;
+
+ if (!TC.getTriple().isOSBinFormatELF() &&
+ !TC.getTriple().isOSBinFormatWasm() &&
+ !TC.getTriple().isOSBinFormatCOFF())
+ return;
----------------
tblah wrote:
Do you think we should warn in cases where split dwarf cannot be done instead of silently ignoring?
https://github.com/llvm/llvm-project/pull/160540
More information about the cfe-commits
mailing list