diff --git a/clang/lib/Driver/ToolChains/CommonArgs.cpp b/clang/lib/Driver/ToolChains/CommonArgs.cpp --- a/clang/lib/Driver/ToolChains/CommonArgs.cpp +++ b/clang/lib/Driver/ToolChains/CommonArgs.cpp @@ -584,9 +584,24 @@ else if (A->getOption().matches(options::OPT_gdbx)) CmdArgs.push_back( Args.MakeArgString(Twine(PluginOptPrefix) + "-debugger-tune=dbx")); - else + else if (A->getOption().matches(options::OPT_ggdb) || + Args.getLastArg(options::OPT_ggdbN_Group)) CmdArgs.push_back( Args.MakeArgString(Twine(PluginOptPrefix) + "-debugger-tune=gdb")); + else + llvm_unreachable("Unknown debugger-tune option"); + } + + if (IsOSAIX) { + // On AIX, strict-dwarf is assumed to be true if any debug option is + // specified, unless clang 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 = diff --git a/clang/test/Driver/lto-aix.c b/clang/test/Driver/lto-aix.c --- 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"