Proxy Information
Original URL
gemini://gemini.kaction.cc/log/2021-01-17.1.gmi
Status Code
Success (20)
Meta
text/gemini # Better link-time garbage collection Today I learned that by default, when linking static library, linker includes whole object that contains symbol required. In other word, linker do not eliminate unused symbols, only unused objects. Also I learned that there are GCC-specific compilation flags "-ffunction-sections -fdata-sections" and "-Wl,--gc-sections" link flags that together enable per-symbol granularity. I was very enthusiastic about this discovery, but when enabled these flags globally in "pkgs/stdenv/adapters.nix", I got error when building busybox: ``` GEN include/applet_tables.h include/NUM_APPLETS.h HOSTCC applets/usage_pod CC applets/applets.o LD applets/built-in.o /nix/store/f7b0y2q80kgnqjkjmh7cng048wsy6mw9-x86_64-unknown-linux-musl-binutils-2.31.1/bin/x86_64-unknown-linux-musl-ld: gc-sections requires either an entry or an undefined symbol collect2: error: ld returned 1 exit status make[1]: *** [scripts/Makefile.build:264: applets/built-in.o] Error 1 make: *** [Makefile:372: applets_dir] Error 2 ``` Documentation for --gc-sections mentions that in case of partial linking, garbage collection root must be provided with either --entry or --undefined. According to same manual, partial linking is process when output of linker is passed to another invocation of linker. Why would anyone want it?
Capsule Response Time
408.026756 milliseconds
Gemini-to-HTML Time
0.008834 milliseconds

This content has been proxied by September (ba2dc).