forked from OSchip/llvm-project
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 llvm-svn: 284140
This commit is contained in:
parent
d9ca3589de
commit
9c6e5566dd
|
@ -2002,6 +2002,14 @@ static unsigned getLTOParallelism(const ArgList &Args, const Driver &D) {
|
|||
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 ToolChain &ToolChain, const ArgList &Args,
|
|||
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, const JobAction &JA,
|
|||
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)) {
|
||||
|
|
|
@ -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"
|
Loading…
Reference in New Issue