[PATCH] Clang: Enable -ffunction-sections and -fdata-sections for CloudABI by default

Eric Christopher echristo at gmail.com
Thu Mar 26 08:54:34 PDT 2015


Want to add the gc-sections to the linker as part of this?

On Thu, Mar 26, 2015, 8:38 AM Ed Schouten <ed at nuxi.nl> 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/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20150326/7c161a10/attachment.html>


More information about the cfe-commits mailing list