Messages in this thread | | | Subject | Re: [PATCH 4/7] module: avoid code duplication in include/linux/export.h | From | Rasmus Villemoes <> | Date | Tue, 29 Oct 2019 22:11:45 +0100 |
| |
On 29/10/2019 20.19, Jessica Yu wrote: > +++ Rasmus Villemoes [27/09/19 13:07 +0200]: >> On 27/09/2019 11.36, Masahiro Yamada wrote: >>> >>> A typical kernel configuration has 10K exported symbols, so it >>> increases 10KB in rough estimation. >>> >>> I did not come up with a good idea to refactor it without increasing >>> the code size. >> >> Can't we put the "aMS" flags on the __ksymtab_strings section? That >> would make the empty strings free, and would also deduplicate the >> USB_STORAGE string. And while almost per definition we don't have exact >> duplicates among the names of exported symbols, we might have both a foo >> and __foo, so that could save even more. >> >> I don't know if we have it already, but we'd need each arch to tell us >> what symbol to use for @ in @progbits (e.g. % for arm). It seems most >> are fine with @, so maybe a generic version could be >> >> #ifndef ARCH_SECTION_TYPE_CHAR >> #define ARCH_SECTION_TYPE_CHAR "@" >> #endif >> >> and then it would be >> section("__ksymtab_strings,\"aMS\","ARCH_SECTION_TYPE_CHAR"progbits,1") > > FWIW, I've just tinkered with this, and unfortunately the strings > don't get deduplicated for kernel modules :-( > > Apparently ld does not do the deduplication for SHF_MERGE|SHF_STRINGS > sections for relocatable files (ld -r), which kernel modules are. See: > > https://sourceware.org/ml/binutils/2009-07/msg00291.html
I know <https://patches-gcc.linaro.org/patch/5858/> :)
> But, the strings do get deduplicated for vmlinux. Not sure if we can > find a workaround for modules or if the benefit is significant enough > if it only for vmlinux.
I think it's definitely worth if, even if it "only" benefits vmlinux for now. And I still hope to revisit the --force-section-merge some day, but it's very far down my priority list.
Rasmus
| |