Want to add the gc-sections to the linker as part of this? On Thu, Mar 26, 2015, 8:38 AM Ed Schouten <[email protected]> wrote:
> Hi echristo, > > 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. > > REPOSITORY > rL LLVM > > http://reviews.llvm.org/D8635 > > Files: > lib/Driver/Tools.cpp > test/Driver/cloudabi.c > test/Driver/cloudabi.cpp > > Index: lib/Driver/Tools.cpp > =================================================================== > --- lib/Driver/Tools.cpp > +++ lib/Driver/Tools.cpp > @@ -3318,13 +3318,18 @@ > CmdArgs.push_back("-generate-type-units"); > } > > + // CloudABI only supports static linkage. Simplify the library > + // dependency tree and reduce binary size by using -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"); > } > > Index: test/Driver/cloudabi.c > =================================================================== > --- test/Driver/cloudabi.c > +++ test/Driver/cloudabi.c > @@ -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" > Index: test/Driver/cloudabi.cpp > =================================================================== > --- test/Driver/cloudabi.cpp > +++ test/Driver/cloudabi.cpp > @@ -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" > > EMAIL PREFERENCES > http://reviews.llvm.org/settings/panel/emailpreferences/ >
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
