On 10 Nov 2022, Luis Chamberlain uttered the following: > On Wed, Nov 09, 2022 at 01:41:26PM +0000, Nick Alcock wrote: >> I am not wedded to the approach used to construct this file, but I don't >> see any other way to do it despite spending a week or so trying to tie >> it into Kbuild without using a separate Makefile.modbuiltin: unlike the >> names of builtin modules (which are also recorded in the source files >> themseves via MODULE_*() macros) the mapping from object file name to >> built-in module name is not recorded anywhere but in the makefiles >> themselves, so we have to at least reparse them with something to >> indicate the builtin-ness of each module (i.e., tristate.conf) if we are >> to figure out which modules are built-in and which are not. > > Please try this patch, unless I am not understanding perhaps we may be > able to replace the first two patches with this one? It also seems > to capture a bit more data than the modules_thick.builtin file. Oh thank you! At first sight this looks really good. I had trouble believing it could be that much simpler :) ... But... it's not quite doing the same thing, so perhaps it can't be that much simpler. Picking the first item that appears in my test build of this but not in modules_thick.builtin: +arch/x86/crypto/libblake2s-x86_64.o: arch/x86/crypto/blake2s-core.o arch/x86/crypto/blake2s-glue.o But... obj-$(CONFIG_CRYPTO_BLAKE2S_X86) += libblake2s-x86_64.o libblake2s-x86_64-y := blake2s-core.o blake2s-glue.o config CRYPTO_BLAKE2S_X86 bool "Hash functions: BLAKE2s (SSSE3/AVX-512)" This cannot be built as a module. The point of modules_thick.builtin was not to capture things that can be built into the kernel or left unconfigured entirely (though that is *also* a nice thing to capture, and should probably be captured regardless) but to capture *those things that can possibly be built as modules*, i.e. those things which are tristates in Kbuild and might possibly get built into .ko's. That was the whole reason we needed the tristate stuff in the first place, and I'm still not sure how to do it without that. (The reason: if your tracer or whatever has a distinct notation used by users for things in named modules, then you'd usually like to keep that notation the same if you choose to build something into the kernel that might otherwise be a module. Things that cannot be built as modules could just use the in-the-core-kernel notation unconditionally, because there's no way they can ever be found anywhere else: and users are likely to expect that. At least, when I broke it in DTrace years ago, I got complaints!) -- NULL && (void)