forked from OSchip/llvm-project
Enable -ffunction-sections and -fdata-sections for CloudABI by default.
Unlike most of the other platforms supported by Clang, CloudABI only supports static linkage, for the reason that global filesystem access is prohibited. Functions provided by dlfcn.h are not present. As we know that applications will not try to do any symbol lookups at run-time, we can garbage collect unused code quite aggressively. Because of this, it makes sense to enable -ffunction-sections and -fdata-sections by default. Object files will be a bit larger than usual, but the resulting binary will not be affected, as the sections are merged again. However, when --gc-sections is used, the linker is able to remove unused code far more more aggressively. It also has the advantage that transitive library dependencies only need to be provided to the linker in case that functionality is actually used. Differential Revision: http://reviews.llvm.org/D8635 Reviewed by: echristo llvm-svn: 233299
This commit is contained in:
parent
ca05ae2bff
commit
6e57615ac8
|
@ -3318,13 +3318,16 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
|
|||
CmdArgs.push_back("-generate-type-units");
|
||||
}
|
||||
|
||||
// CloudABI uses -ffunction-sections and -fdata-sections by default.
|
||||
bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI;
|
||||
|
||||
if (Args.hasFlag(options::OPT_ffunction_sections,
|
||||
options::OPT_fno_function_sections, false)) {
|
||||
options::OPT_fno_function_sections, UseSeparateSections)) {
|
||||
CmdArgs.push_back("-ffunction-sections");
|
||||
}
|
||||
|
||||
if (Args.hasFlag(options::OPT_fdata_sections,
|
||||
options::OPT_fno_data_sections, false)) {
|
||||
options::OPT_fno_data_sections, UseSeparateSections)) {
|
||||
CmdArgs.push_back("-fdata-sections");
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
// RUN: %clang %s -### -target x86_64-unknown-cloudabi 2>&1 | FileCheck %s
|
||||
// CHECK: "-cc1" "-triple" "x86_64-unknown-cloudabi"
|
||||
// CHECK: "-cc1" "-triple" "x86_64-unknown-cloudabi" {{.*}} "-ffunction-sections" "-fdata-sections"
|
||||
// CHECK: "-Bstatic" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
// RUN: %clangxx %s -### -target x86_64-unknown-cloudabi 2>&1 | FileCheck %s
|
||||
// CHECK: "-cc1" "-triple" "x86_64-unknown-cloudabi"
|
||||
// CHECK: "-cc1" "-triple" "x86_64-unknown-cloudabi" {{.*}} "-ffunction-sections" "-fdata-sections"
|
||||
// CHECK: "-Bstatic" "--eh-frame-hdr" "--gc-sections" "-o" "a.out" "crt0.o" "crtbegin.o" "{{.*}}" "{{.*}}" "-lc++" "-lc++abi" "-lunwind" "-lc" "-lcompiler_rt" "crtend.o"
|
||||
|
|
Loading…
Reference in New Issue