Hello, Jessica, On Tue, Oct 30, 2018 at 02:19:10PM +0100, Jessica Yu wrote: > +++ Will Deacon [29/10/18 15:28 +0000]: > >On Fri, Oct 26, 2018 at 07:25:01PM +0200, Jessica Yu wrote: > >>diff --git a/arch/arm64/include/asm/module.h b/arch/arm64/include/asm/module.h > >>index fef773c94e9d..ac9b97f9ae5e 100644 > >>--- a/arch/arm64/include/asm/module.h > >>+++ b/arch/arm64/include/asm/module.h > >>@@ -25,6 +25,7 @@ struct mod_plt_sec { > >> struct elf64_shdr *plt; > >> int plt_num_entries; > >> int plt_max_entries; > >>+ int plt_shndx; > >>}; > > > >Does this mean we can drop the plt pointer from this struct altogether, and > >simply offset into the section headers when applying the relocations? > > Hmm, if everyone is OK with dropping the plt pointer from struct > mod_plt_sec, then I think we can simplify this patch even further. > > With the plt shndx saved, we can additionally pass a pointer to > sechdrs to module_emit_plt_entry(), and with that just offset into the > section headers as you suggest. Since livepatch *already* passes in > the correct copy of the section headers (mod->klp_info->sechdrs) to > apply_relocate_add(), we wouldn't even need to modify the arm64 > module_finalize() to change mod->arch.core.plt to point into > mod->klp_info->sechdrs anymore and we can drop all the changes to the > module loader too. > > Something like the following maybe? This looks pretty good, thanks! My only (minor) objection is that the renaming of plt_sec -> plt_info throughout makes the patch a lot more churny than it needs to be, for questionable gain. Anyway, it looks functionally correct and I've tested loading/unloading the "hello world" test module with both PLTs enabled and disabled. Acked-by: Will Deacon <will.deacon@xxxxxxx> Will