On Fri, 2021-03-12 at 10:55 +0100, Johannes Berg wrote: > From: Johannes Berg <johannes.berg@xxxxxxxxx> > > At least in ARCH=um with CONFIG_GCOV (which writes all the > coverage data directly out from the userspace binary rather > than presenting it in debugfs) it's necessary to run all > the atexit handlers (dtors/fini_array) so that gcov actually > does write out the data. > > Add a new config option CONFIG_MODULE_DESTRUCTORS that can > be selected via CONFIG_WANT_MODULE_DESTRUCTORS that the arch > selects (this indirection exists so the architecture doesn't > have to worry about whether or not CONFIG_MODULES is on). > Additionally, the architecture must then (when it exits and > no more module code can run) call run_all_module_destructors > to run the code for all modules that are still loaded. When > modules are unloaded, the handlers are called as well. Oops, I forgot to add this bit to the patch: --- a/scripts/module.lds.S +++ b/scripts/module.lds.S @@ -16,6 +16,8 @@ SECTIONS { .init_array 0 : ALIGN(8) { *(SORT(.init_array.*)) *(.init_array) } + .fini_array 0 : ALIGN(8) { *(SORT(.fini_array.*)) *(.fini_array) } + __jump_table 0 : ALIGN(8) { KEEP(*(__jump_table)) } __patchable_function_entries : { *(__patchable_function_entries) } Should that be under the ifdef? .init_array isn't, even though it's only relevant for CONFIG_CONSTRUCTORS. johannes