diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2016-05-18 20:19:05 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2016-05-19 11:06:55 +0200 |
commit | c8f65e95fdc2bfddeb071816915dcbe462068b2b (patch) | |
tree | 61da6cfe47bce9c5c85d327cb0eb3213259a78ff | |
parent | 6d91c14b0030b63e1d5adc0a31837eff8b26537d (diff) | |
download | NetworkManager-c8f65e95fdc2bfddeb071816915dcbe462068b2b.tar.gz |
build: garbage collect unused symbols by defaultlr/ld-gc
GCC can place each symbols into separate sections making it possible for
ld to discard unneeded sections (and thus symbols afterwards). This achieves
almost the same size benefits as LTO without the huge performance
penalty (and the undefined behavior with -g).
The cost of more section headers in .o files seems to be negligible.
Before:
359.73user 71.94system 1:29.67elapsed 481%CPU (0avgtext+0avgdata 137948maxresident)k
text data bss dec hex filename
2772228 74848 9272 2856348 2b959c src/NetworkManager
With LTO:
740.37user 94.89system 4:13.83elapsed 329%CPU (0avgtext+0avgdata 118316maxresident)k
text data bss dec hex filename
2435437 74224 8704 2518365 266d5d src/NetworkManager
With --gc-sections:
365.63user 72.34system 1:30.12elapsed 485%CPU (0avgtext+0avgdata 138016maxresident)k
text data bss dec hex filename
2498498 74040 8408 2580946 2761d2 src/NetworkManager
-rw-r--r-- | configure.ac | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac index be271c1159..50384f320e 100644 --- a/configure.ac +++ b/configure.ac @@ -935,6 +935,16 @@ else enable_lto='no' fi +AC_ARG_ENABLE(ld-gc, AS_HELP_STRING([--enable-ld-gc], [Enable garbage collection of unused symbols on linking (default: auto)])) +if (test "${enable_ld_gc}" != "no"); then + NM_COMPILER_FLAG([-fdata-sections -ffunction-sections -Wl,--gc-sections], [enable_ld_gc='yes'], [ + if (test "${enable_ld_gc}" = "yes"); then + AC_MSG_ERROR([Unused symbol eviction requested but not supported.]) + else + enable_ld_gc='no' + fi + ]) +fi dnl ------------------------- dnl Vala bindings @@ -1194,5 +1204,6 @@ echo " more-asserts: $more_asserts" echo " valgrind: $with_valgrind $with_valgrind_suppressions" echo " code coverage: $enable_code_coverage" echo " LTO: $enable_lto" +echo " linker garbage collection: $enable_ld_gc" echo " JSON validation: $enable_json_validation" echo |