From d12a0016d3206533baeb500f0ad2fc8abcc086d2 Mon Sep 17 00:00:00 2001 From: Adrian Prantl Date: Mon, 17 Oct 2016 19:36:18 +0000 Subject: [PATCH] Driver/Darwin: Set the DWARF version based on the deployment target. System utilities such as atos only support DWARF 4 on OS X 10.11+ and iOS 9+. We thus want to enable DWARF 4 only if the deployment target has a recent enough operating system version and use DWARF 2 for older systems. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@284416 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Driver/ToolChains.cpp | 8 +++++++ lib/Driver/ToolChains.h | 2 +- test/Driver/clang-g-opts.c | 4 ++-- test/Driver/debug-options.c | 47 +++++++++++++++++++++++-------------- 4 files changed, 40 insertions(+), 21 deletions(-) diff --git a/lib/Driver/ToolChains.cpp b/lib/Driver/ToolChains.cpp index a9fd7ee719..1afe6e4525 100644 --- a/lib/Driver/ToolChains.cpp +++ b/lib/Driver/ToolChains.cpp @@ -289,6 +289,14 @@ void DarwinClang::AddLinkARCArgs(const ArgList &Args, CmdArgs.push_back(Args.MakeArgString(P)); } +unsigned DarwinClang::GetDefaultDwarfVersion() const { + // Default to use DWARF 2 on OS X 10.10 / iOS 8 and lower. + if ((isTargetMacOS() && isMacosxVersionLT(10, 11)) || + (isTargetIOSBased() && isIPhoneOSVersionLT(9))) + return 2; + return 4; +} + void MachO::AddLinkRuntimeLib(const ArgList &Args, ArgStringList &CmdArgs, StringRef DarwinLibName, bool AlwaysLink, bool IsEmbedded, bool AddRPath) const { diff --git a/lib/Driver/ToolChains.h b/lib/Driver/ToolChains.h index 0838208e3b..c4c054dead 100644 --- a/lib/Driver/ToolChains.h +++ b/lib/Driver/ToolChains.h @@ -585,7 +585,7 @@ public: void AddLinkARCArgs(const llvm::opt::ArgList &Args, llvm::opt::ArgStringList &CmdArgs) const override; - unsigned GetDefaultDwarfVersion() const override { return 4; } + unsigned GetDefaultDwarfVersion() const override; // Until dtrace (via CTF) and LLDB can deal with distributed debug info, // Darwin defaults to standalone/full debug info. bool GetDefaultStandaloneDebug() const override { return true; } diff --git a/test/Driver/clang-g-opts.c b/test/Driver/clang-g-opts.c index 21b5cf645d..a26fb29652 100644 --- a/test/Driver/clang-g-opts.c +++ b/test/Driver/clang-g-opts.c @@ -4,7 +4,7 @@ // Assert that the toolchains which should default to a lower Dwarf version do so. // RUN: %clang -### -S %s -g -target x86_64-apple-darwin 2>&1 \ -// RUN: | FileCheck --check-prefix=CHECK-WITH-G-STANDALONE %s +// RUN: | FileCheck --check-prefix=CHECK-WITH-G-DWARF2 %s // RUN: %clang -### -S %s -g -target i686-pc-openbsd 2>&1 \ // RUN: | FileCheck --check-prefix=CHECK-WITH-G-DWARF2 %s // RUN: %clang -### -S %s -g -target x86_64-pc-freebsd10.0 2>&1 \ @@ -36,4 +36,4 @@ // CHECK-WITH-G-DWARF2: "-dwarf-version=2" // CHECK-WITH-G-STANDALONE: "-debug-info-kind=standalone" -// CHECK-WITH-G-STANDALONE: "-dwarf-version=4" +// CHECK-WITH-G-STANDALONE: "-dwarf-version=2" diff --git a/test/Driver/debug-options.c b/test/Driver/debug-options.c index 0702811ae8..ec21bfe3da 100644 --- a/test/Driver/debug-options.c +++ b/test/Driver/debug-options.c @@ -19,17 +19,31 @@ // RUN: | FileCheck -check-prefix=G -check-prefix=G_SCE %s // RUN: %clang -### -c -g %s -target x86_64-apple-darwin 2>&1 \ -// RUN: | FileCheck -check-prefix=G_DARWIN -check-prefix=G_LLDB %s -// RUN: %clang -### -c -g2 %s -target x86_64-apple-darwin 2>&1 \ -// RUN: | FileCheck -check-prefix=G_DARWIN %s -// RUN: %clang -### -c -g3 %s -target x86_64-apple-darwin 2>&1 \ -// RUN: | FileCheck -check-prefix=G_DARWIN %s -// RUN: %clang -### -c -ggdb %s -target x86_64-apple-darwin 2>&1 \ -// RUN: | FileCheck -check-prefix=G_DARWIN -check-prefix=G_GDB %s -// RUN: %clang -### -c -ggdb1 %s -target x86_64-apple-darwin 2>&1 \ +// RUN: | FileCheck -check-prefix=G_ONLY_DWARF2 -check-prefix=G_LLDB %s +// RUN: %clang -### -c -g %s -target x86_64-apple-darwin16 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 -check-prefix=G_LLDB %s +// RUN: %clang -### -c -g2 %s -target x86_64-apple-darwin16 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 %s +// RUN: %clang -### -c -g3 %s -target x86_64-apple-darwin16 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 %s +// RUN: %clang -### -c -ggdb %s -target x86_64-apple-darwin16 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 -check-prefix=G_GDB %s +// RUN: %clang -### -c -ggdb1 %s -target x86_64-apple-darwin16 2>&1 \ // RUN: | FileCheck -check-prefix=GLTO_ONLY %s -// RUN: %clang -### -c -ggdb3 %s -target x86_64-apple-darwin 2>&1 \ -// RUN: | FileCheck -check-prefix=G_DARWIN %s +// RUN: %clang -### -c -ggdb3 %s -target x86_64-apple-darwin16 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 %s +// RUN: %clang -### -c -g %s -target x86_64-apple-macosx10.11 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 %s +// RUN: %clang -### -c -g %s -target x86_64-apple-macosx10.10 2>&1 \ +// RUN: | FileCheck -check-prefix=G_ONLY_DWARF2 %s +// RUN: %clang -### -c -g %s -target armv7-apple-ios9.0 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 %s +// RUN: %clang -### -c -g %s -target armv7-apple-ios8.0 2>&1 \ +// RUN: | FileCheck -check-prefix=G_ONLY_DWARF2 %s +// RUN: %clang -### -c -g %s -target armv7k-apple-watchos 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 %s +// RUN: %clang -### -c -g %s -target arm64-apple-tvos9.0 2>&1 \ +// RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 %s // RUN: %clang -### -c -g %s -target x86_64-pc-freebsd10.0 2>&1 \ // RUN: | FileCheck -check-prefix=G_GDB %s @@ -75,7 +89,7 @@ // RUN: | FileCheck -check-prefix=GLTO_ONLY_DWARF2 %s // RUN: %clang -### -c -gline-tables-only -g %s -target x86_64-linux-gnu 2>&1 \ // RUN: | FileCheck -check-prefix=G_ONLY %s -// RUN: %clang -### -c -gline-tables-only -g %s -target x86_64-apple-darwin 2>&1 \ +// RUN: %clang -### -c -gline-tables-only -g %s -target x86_64-apple-darwin16 2>&1 \ // RUN: | FileCheck -check-prefix=G_STANDALONE_DWARF4 %s // RUN: %clang -### -c -gline-tables-only -g %s -target i686-pc-openbsd 2>&1 \ // RUN: | FileCheck -check-prefix=G_ONLY_DWARF2 %s @@ -121,9 +135,6 @@ // G: "-cc1" // G: "-debug-info-kind=limited" // -// G_DARWIN: "-cc1" -// G_DARWIN: "-dwarf-version=4" -// // NOG_PS4: "-cc1" // NOG_PS4-NOT "-dwarf-version= // NOG_PS4: "-generate-arange-section" @@ -151,10 +162,6 @@ // G_ONLY: "-cc1" // G_ONLY: "-debug-info-kind=limited" // -// G_GDB: "-debugger-tuning=gdb" -// G_LLDB: "-debugger-tuning=lldb" -// G_SCE: "-debugger-tuning=sce" -// // These tests assert that "-gline-tables-only" "-g" uses the latter, // but otherwise not caring about the DebugInfoKind. // G_ONLY_DWARF2: "-cc1" @@ -165,6 +172,10 @@ // G_STANDALONE_DWARF4: "-debug-info-kind=standalone" // G_STANDALONE_DWARF4: "-dwarf-version=4" // +// G_GDB: "-debugger-tuning=gdb" +// G_LLDB: "-debugger-tuning=lldb" +// G_SCE: "-debugger-tuning=sce" +// // This tests asserts that "-gline-tables-only" "-g0" disables debug info. // GLTO_NO: "-cc1" // GLTO_NO-NOT: -debug-info-kind= -- 2.40.0