r284140 - Pass -ffunction-sections/-fdata-sections along to gold-plugin
Teresa Johnson via cfe-commits
cfe-commits at lists.llvm.org
Thu Oct 13 11:05:54 PDT 2016
Author: tejohnson
Date: Thu Oct 13 13:05:53 2016
New Revision: 284140
URL: http://llvm.org/viewvc/llvm-project?rev=284140&view=rev
Log:
Pass -ffunction-sections/-fdata-sections along to gold-plugin
Summary:
These options need to be passed to the plugin in order to have
an effect on LTO/ThinLTO compiles.
Reviewers: mehdi_amini, pcc
Subscribers: jfb, dschuff, mehdi_amini, cfe-commits
Differential Revision: https://reviews.llvm.org/D24644
Added:
cfe/trunk/test/Driver/gold-lto-sections.c
Modified:
cfe/trunk/lib/Driver/Tools.cpp
Modified: cfe/trunk/lib/Driver/Tools.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Tools.cpp?rev=284140&r1=284139&r2=284140&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Tools.cpp (original)
+++ cfe/trunk/lib/Driver/Tools.cpp Thu Oct 13 13:05:53 2016
@@ -2002,6 +2002,14 @@ static unsigned getLTOParallelism(const
return Parallelism;
}
+// CloudABI and WebAssembly use -ffunction-sections and -fdata-sections by
+// default.
+static bool isUseSeparateSections(const llvm::Triple &Triple) {
+ return Triple.getOS() == llvm::Triple::CloudABI ||
+ Triple.getArch() == llvm::Triple::wasm32 ||
+ Triple.getArch() == llvm::Triple::wasm64;
+}
+
static void AddGoldPlugin(const ToolChain &ToolChain, const ArgList &Args,
ArgStringList &CmdArgs, bool IsThinLTO,
const Driver &D) {
@@ -2051,6 +2059,19 @@ static void AddGoldPlugin(const ToolChai
else
CmdArgs.push_back("-plugin-opt=-debugger-tune=gdb");
}
+
+ bool UseSeparateSections =
+ isUseSeparateSections(ToolChain.getEffectiveTriple());
+
+ if (Args.hasFlag(options::OPT_ffunction_sections,
+ options::OPT_fno_function_sections, UseSeparateSections)) {
+ CmdArgs.push_back("-plugin-opt=-function-sections");
+ }
+
+ if (Args.hasFlag(options::OPT_fdata_sections, options::OPT_fno_data_sections,
+ UseSeparateSections)) {
+ CmdArgs.push_back("-plugin-opt=-data-sections");
+ }
}
/// This is a helper function for validating the optional refinement step
@@ -4763,11 +4784,7 @@ void Clang::ConstructJob(Compilation &C,
CmdArgs.push_back("-generate-type-units");
}
- // CloudABI and WebAssembly use -ffunction-sections and -fdata-sections by
- // default.
- bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI ||
- Triple.getArch() == llvm::Triple::wasm32 ||
- Triple.getArch() == llvm::Triple::wasm64;
+ bool UseSeparateSections = isUseSeparateSections(Triple);
if (Args.hasFlag(options::OPT_ffunction_sections,
options::OPT_fno_function_sections, UseSeparateSections)) {
Added: cfe/trunk/test/Driver/gold-lto-sections.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/gold-lto-sections.c?rev=284140&view=auto
==============================================================================
--- cfe/trunk/test/Driver/gold-lto-sections.c (added)
+++ cfe/trunk/test/Driver/gold-lto-sections.c Thu Oct 13 13:05:53 2016
@@ -0,0 +1,8 @@
+// RUN: touch %t.o
+//
+// RUN: %clang -target x86_64-unknown-linux -### %t.o -flto 2>&1 \
+// RUN: -Wl,-plugin-opt=foo -O3 \
+// RUN: -ffunction-sections -fdata-sections \
+// RUN: | FileCheck %s
+// CHECK: "-plugin-opt=-function-sections"
+// CHECK: "-plugin-opt=-data-sections"
More information about the cfe-commits
mailing list