[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 1/7] create-diff-object: ignore .cold.* suffixes in is_bundleable()



From: Artem Savkov <asavkov@xxxxxxxxxx>

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 <asavkov@xxxxxxxxxx>
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
 common.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/common.c b/common.c
index 68a71f75ac7b..84ca14d3e397 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 &&
-- 
2.46.0




 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.