|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 9/9] create-diff-object: account for special section changes
When deciding whether there's content to generate a payload also take into
account whether special sections have changed. Initially account for changes
to alternative related section to cause the generation of a livepatch.
Note that accounting for hook sections is already done by
kpatch_include_hook_elements() when deciding whether there's changed content in
the object file. .bugframe sections are also not accounted for since any
section in a bugframe section will be accompanied by a change in the function
the bugframe references (the placement of the BUG_INSTR will change in the
caller function).
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
create-diff-object.c | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/create-diff-object.c b/create-diff-object.c
index 8bfb6bf92a1b..957631097b8a 100644
--- a/create-diff-object.c
+++ b/create-diff-object.c
@@ -1663,6 +1663,28 @@ static int kpatch_include_hook_elements(struct
kpatch_elf *kelf)
return num_new_functions;
}
+static unsigned int include_special_sections(const struct kpatch_elf *kelf)
+{
+ const struct section *sec;
+ unsigned int nr = 0;
+
+ /*
+ * Only account for changes in alternatives and exception table related
+ * sections. Hooks are already taken care of separately, and changes
+ * in bug_frame sections always go along with changes in the caller
+ * functions.
+ */
+ list_for_each_entry(sec, &kelf->sections, list)
+ if (sec->status != SAME &&
+ (!strcmp(sec->name, ".altinstructions") ||
+ !strcmp(sec->name, ".altinstr_replacement") ||
+ !strcmp(sec->name, ".ex_table") ||
+ !strcmp(sec->name, ".fixup")))
+ nr++;
+
+ return nr;
+}
+
static int kpatch_include_new_globals(struct kpatch_elf *kelf)
{
struct symbol *sym;
@@ -2469,6 +2491,8 @@ int main(int argc, char *argv[])
kpatch_include_debug_sections(kelf_patched);
log_debug("Include hook elements\n");
num_changed += kpatch_include_hook_elements(kelf_patched);
+ log_debug("Include special sections\n");
+ num_changed += include_special_sections(kelf_patched);
log_debug("num_changed = %d\n", num_changed);
log_debug("Include new globals\n");
new_globals_exist = kpatch_include_new_globals(kelf_patched);
--
2.44.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |