diff --git a/kpatch-build/lookup.c b/kpatch-build/lookup.c index 347064f..5c9cb91 100644 --- a/kpatch-build/lookup.c +++ b/kpatch-build/lookup.c @@ -209,8 +209,18 @@ static void symtab_read(struct lookup_table *table, char *path) ERROR("fopen"); while (fgets(line, 256, file)) { - matched = sscanf(line, "%*s %lx %s %s %s %*s %s %s\n", - &value, size, type, bind, ndx, name); + if (strstr(line, "[: 8]")) { + /* + * 23: 0000000000000008 96 FUNC LOCAL DEFAULT [: 8] 4 cmdline_proc_show + * On Power, local func syms Ndx is preceded with "[: 8]" + * denoting local entry point offset of the function. + */ + matched = sscanf(line, "%*s %lx %s %s %s %*s [: 8] %s %s\n", + &value, size, type, bind, ndx, name); + } else { + matched = sscanf(line, "%*s %lx %s %s %s %*s %s %s\n", + &value, size, type, bind, ndx, name); + } if (matched == 5) { name[0] = '\0'; @@ -233,8 +243,13 @@ static void symtab_read(struct lookup_table *table, char *path) rewind(file); while (fgets(line, 256, file)) { - matched = sscanf(line, "%*s %lx %s %s %s %*s %s %s\n", - &value, size, type, bind, ndx, name); + if (strstr(line, "[: 8]")) { + matched = sscanf(line, "%*s %lx %s %s %s %*s [: 8] %s %s\n", + &value, size, type, bind, ndx, name); + } else { + matched = sscanf(line, "%*s %lx %s %s %s %*s %s %s\n", + &value, size, type, bind, ndx, name); + } if (matched == 5) { name[0] = '\0';