dynup/kpatch — pull request #245 by jpoimboe (2014-06-16 15:53:01+00:00)
Title: RFC: another interface refactoring

This is a proposal for how we can refactor the interfaces. It doesn't
compile, so it's probably best not to merge it ;-)

The recent module patching code has exposed some problems with our data
structures. We currently patch the funcs and dynrelas individually,
which is kind of scary now that different objects can be patched at
different times. Instead I think it would be much cleaner to group them
by patched object. Here's a proposal for new interfaces which would
make it a lot easier to do so.

- Completely separate the create-diff-object <-> patch module interface
from the patch module <-> core module interface. create-diff-object
will include "kpatch-patch.h" but not "kpatch.h". Thus,
create-diff-object has no knowledge about the core module's
interfaces, and the core module has no knowledge about the patch
module's special sections.

- kpatch-patch.h defines the format of the patch module special
sections. It's used by create-diff-object to create the special
sections and used by the patch module to read them.

- kpatch.h still defines the core module interfaces. Each kpatch_module
has a list of kpatch_objects for each module object to be patched.
Each kpatch_object has a list of kpatch_funcs and a list of
kpatch_dynrelas. The patch module creates these lists when populating
kpatch_module. This way of structuring the data allows us to patch
funcs and dynrelas on a per patched object basis.