diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp index ca8fc7b93972f..58e452418fa26 100644 --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -589,6 +589,18 @@ void tools::addLTOOptions(const ToolChain &ToolChain, const ArgList &Args, Args.MakeArgString(Twine(PluginOptPrefix) + "-debugger-tune=gdb")); } + if (IsOSAIX) { + // On AIX, clang assumes strict-dwarf is true if any debug option is + // specified, unless it is told explicitly not to assume so. + Arg *A = Args.getLastArg(options::OPT_g_Group); + bool EnableDebugInfo = A && !A->getOption().matches(options::OPT_g0) && + !A->getOption().matches(options::OPT_ggdb0); + if (EnableDebugInfo && Args.hasFlag(options::OPT_gstrict_dwarf, + options::OPT_gno_strict_dwarf, true)) + CmdArgs.push_back( + Args.MakeArgString(Twine(PluginOptPrefix) + "-strict-dwarf=true")); + } + bool UseSeparateSections = isUseSeparateSections(ToolChain.getEffectiveTriple()); diff --git a/clang/test/Driver/lto-aix.c b/clang/test/Driver/lto-aix.c index 89b5d5aeb8ef5..1689c2638410f 100644 --- a/clang/test/Driver/lto-aix.c +++ b/clang/test/Driver/lto-aix.c @@ -4,3 +4,30 @@ // // LTOPATH: "-bplugin:{{.*}}libLTO.{{so|dll|dylib}}" // MCPUOPTLEVEL: "-bplugin_opt:-mcpu={{.*}}" "-bplugin_opt:-O3" +// +// Test debugging options +// RUN: %clang --target=powerpc-ibm-aix-xcoff -### %s -flto -g 2>&1 \ +// RUN: | FileCheck -check-prefixes=STRICT,NODEBUGGER-TUNE %s +// RUN: %clang --target=powerpc64-ibm-aix-xcoff -### %s -flto -g 2>&1 \ +// RUN: | FileCheck -check-prefixes=STRICT,NODEBUGGER-TUNE %s +// RUN: %clang --target=powerpc-ibm-aix-xcoff -### %s -flto -g -gdbx 2>&1 \ +// RUN: | FileCheck -check-prefix=DBX -check-prefix=STRICT %s +// RUN: %clang --target=powerpc-ibm-aix-xcoff -### %s -flto -g -ggdb 2>&1 \ +// RUN: | FileCheck -check-prefix=GDB -check-prefix=STRICT %s +// RUN: %clang --target=powerpc-ibm-aix-xcoff -### %s -flto -g -ggdb0 2>&1 \ +// RUN: | FileCheck -check-prefix=GDB -check-prefix=NOSTRICT %s +// RUN: %clang --target=powerpc-ibm-aix-xcoff -### %s -flto -g -ggdb1 2>&1 \ +// RUN: | FileCheck -check-prefix=GDB -check-prefix=STRICT %s +// RUN: %clang --target=powerpc-ibm-aix-xcoff -### %s -flto -g -g0 2>&1 \ +// RUN: | FileCheck -check-prefix=NOSTRICT %s +// RUN: %clang --target=powerpc-ibm-aix-xcoff -### %s -flto -g -gno-strict-dwarf 2>&1 \ +// RUN: | FileCheck -check-prefix=NOSTRICT %s +// RUN: %clang --target=powerpc-ibm-aix-xcoff -### %s -flto -gstrict-dwarf 2>&1 \ +// RUN: | FileCheck -check-prefix=NOSTRICT %s +// +// DBX: "-bplugin_opt:-debugger-tune=dbx" +// GDB: "-bplugin_opt:-debugger-tune=gdb" +// NODEBUGGER-TUNE-NOT: "-bplugin_opt:-debugger-tune=" +// +// STRICT: "-bplugin_opt:-strict-dwarf=true" +// NOSTRICT-NOT: "-bplugin_opt:-strict-dwarf=true"