https://gcc.gnu.org/bugzilla/show_bug.cgi?id=192
Fangrui Song <i at maskray dot me> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |i at maskray dot me --- Comment #19 from Fangrui Song <i at maskray dot me> --- (In reply to Jakub Jelinek from comment #14) > This doesn't really look like a good idea to me. Instead, perhaps ld's > --gc-sections or new special option should just remove unused string > literals from mergeable sections. > With your patch, I bet you lose e.g. all tail merging. Consider: > const char *used1 () { return "foo bar baz blah blah"; } > in one TU and > const char *used2 () { return "bar baz blah blah"; } > in another. The linker necessarily knows which strings (or other data) in > mergeable sections are used and which are unused. I second Jakub's idea that the linker should perform the constant merge (which is implemented in LLD): the cost of a section header (sizeof(Elf64_Shdr)=64) + a section name (".rodata.xxx.str1.1") is quite large. Created a GNU ld (and gold) feature request: https://sourceware.org/bugzilla/show_bug.cgi?id=26622