From: Artem Savkov Date: Tue, 29 May 2018 09:51:10 +0000 (+0200) Subject: create-diff-object: ignore .cold.* suffixes in is_bundleable() X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=3540f1a391ccdda258786565ddbbac95f645ac6f;p=livepatch-build-tools.git create-diff-object: ignore .cold.* suffixes in is_bundleable() While building a gcc-consprop patch from integration tests gcc8 would place a __timekeeping_inject_sleeptime.constprop.18.cold.27 symbol into .text.unlikely.__timekeeping_inject_sleeptime.constprop.18 section. Because section name doesn't have the '.cold.27' suffix this symbol fails is_bundleable() check while still being bundleable and later exits early in kpatch_rename_mangled_functions() without renaming the corresponding patched function. All of this results in a create-diff-object errror: ERROR: timekeeping.o: symbol changed sections: __timekeeping_inject_sleeptime.constprop.18.cold.27 /home/asavkov/dev/kpatch/kpatch-build/create-diff-object: unreconcilable difference Fix by ignoring .cold.* name suffix in is_bundleable() for.text.unlikely sections. Signed-off-by: Artem Savkov Signed-off-by: Roger Pau Monné Reviewed-by: Ross Lagerwall --- diff --git a/common.c b/common.c index 68a71f7..84ca14d 100644 --- a/common.c +++ b/common.c @@ -126,7 +126,9 @@ static int is_bundleable(struct symbol *sym) if (sym->type == STT_FUNC && !strncmp(sym->sec->name, ".text.unlikely.",15) && - !strcmp(sym->sec->name + 15, sym->name)) + (!strcmp(sym->sec->name + 15, sym->name) || + (strstr(sym->name, ".cold.") && + !strncmp(sym->sec->name + 15, sym->name, strlen(sym->sec->name) - 15)))) return 1; if (sym->type == STT_OBJECT &&