qiongsiwu1 created this revision.
qiongsiwu1 added reviewers: shchenz, lkail, w2yehia, daltenty, MaskRay.
qiongsiwu1 added a project: clang.
Herald added subscribers: ormris, StephenFan, steven_wu, hiraditya, inglorion.
Herald added a project: All.
qiongsiwu1 requested review of this revision.
Herald added a subscriber: cfe-commits.

Two debug options defaults on AIX are different from other platforms:

1. The default debugger is `dbx` instead of `gdb`.
2. `strict-dwarf` defaults to `true`.

This patch implements these two default behaviours for AIX.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D135908

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/lto-aix.c


Index: clang/test/Driver/lto-aix.c
===================================================================
--- clang/test/Driver/lto-aix.c
+++ clang/test/Driver/lto-aix.c
@@ -4,3 +4,28 @@
 //
 // 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-prefix=STRICT %s
+// RUN: %clang -target powerpc64-ibm-aix-xcoff -### %s -flto -g 2>&1 \
+// RUN:   | FileCheck -check-prefix=STRICT %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"
+// STRICT:       "-bplugin_opt:-strict-dwarf=true"
+// NOSTRICT-NOT: "-bplugin_opt:-strict-dwarf=true"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -584,9 +584,27 @@
     else if (A->getOption().matches(options::OPT_gdbx))
       CmdArgs.push_back(
           Args.MakeArgString(Twine(PluginOptPrefix) + "-debugger-tune=dbx"));
-    else
+    else {
+      // On platforms other than AIX, gdb is the default option.
+      // On AIX, dbx will be automatically pick up in the presense of the
+      // debugger tuning argument, so set gdb only if it is specified.
+      if (!IsOSAIX || A->getOption().matches(options::OPT_ggdb) ||
+          Args.getLastArg(options::OPT_ggdbN_Group))
+        CmdArgs.push_back(
+            Args.MakeArgString(Twine(PluginOptPrefix) + "-debugger-tune=gdb"));
+    }
+  }
+
+  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) + "-debugger-tune=gdb"));
+          Args.MakeArgString(Twine(PluginOptPrefix) + "-strict-dwarf=true"));
   }
 
   bool UseSeparateSections =


Index: clang/test/Driver/lto-aix.c
===================================================================
--- clang/test/Driver/lto-aix.c
+++ clang/test/Driver/lto-aix.c
@@ -4,3 +4,28 @@
 //
 // 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-prefix=STRICT %s
+// RUN: %clang -target powerpc64-ibm-aix-xcoff -### %s -flto -g 2>&1 \
+// RUN:   | FileCheck -check-prefix=STRICT %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"
+// STRICT:       "-bplugin_opt:-strict-dwarf=true"
+// NOSTRICT-NOT: "-bplugin_opt:-strict-dwarf=true"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===================================================================
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -584,9 +584,27 @@
     else if (A->getOption().matches(options::OPT_gdbx))
       CmdArgs.push_back(
           Args.MakeArgString(Twine(PluginOptPrefix) + "-debugger-tune=dbx"));
-    else
+    else {
+      // On platforms other than AIX, gdb is the default option.
+      // On AIX, dbx will be automatically pick up in the presense of the
+      // debugger tuning argument, so set gdb only if it is specified.
+      if (!IsOSAIX || A->getOption().matches(options::OPT_ggdb) ||
+          Args.getLastArg(options::OPT_ggdbN_Group))
+        CmdArgs.push_back(
+            Args.MakeArgString(Twine(PluginOptPrefix) + "-debugger-tune=gdb"));
+    }
+  }
+
+  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) + "-debugger-tune=gdb"));
+          Args.MakeArgString(Twine(PluginOptPrefix) + "-strict-dwarf=true"));
   }
 
   bool UseSeparateSections =
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to