From fc6b9c5b1b3eb5d59186fe35cc90d3c06b07c537 Mon Sep 17 00:00:00 2001 From: Zhipeng Xie Date: Fri, 2 Nov 2018 17:24:36 +0000 Subject: [PATCH 1004/1015] create-diff-object: new static var should be included Before this patch, only global variables(no referenced) will be included by kpatch-build. But some macros put some static varibles in the object file, and no function references it, so they won't be included by kpatch-build. Because they are changed, the kpatch will report an error. This patch includes all new static variables, and this method won't cause a problem even the new static variables are in unbundled section. Signed-off-by: Zhou Chengming Signed-off-by: Zhipeng Xie --- kpatch-build/create-diff-object.c | 15 +++++++++++++++ 1 files changed, 15 insertions(+), 0 deletions(-) diff --git a/kpatch-build/create-diff-object.c b/kpatch-build/create-diff-object.c index d242d01..6e23295 100644 --- a/kpatch-build/create-diff-object.c +++ b/kpatch-build/create-diff-object.c @@ -1536,6 +1536,20 @@ static void kpatch_include_force_elements(struct kpatch_elf *kelf) sym->include = 0; } +int kpatch_include_new_static_var(struct kpatch_elf *kelf) +{ + struct symbol *sym; + + list_for_each_entry(sym, &kelf->symbols, list) { + if (sym->status == NEW && + sym->type == STT_OBJECT && + sym->bind == STB_LOCAL) + kpatch_include_symbol(sym); + } + + return 0; +} + static int kpatch_include_new_globals(struct kpatch_elf *kelf) { struct symbol *sym; @@ -3211,6 +3225,7 @@ int main(int argc, char *argv[]) callbacks_exist = kpatch_include_callback_elements(kelf_patched); kpatch_include_force_elements(kelf_patched); new_globals_exist = kpatch_include_new_globals(kelf_patched); + kpatch_include_new_static_var(kelf_patched); kpatch_print_changes(kelf_patched); kpatch_dump_kelf(kelf_patched); -- 1.7.5.4