Skip to content

Commit

Permalink
Merge pull request dynup#1346 from jpoimboe/locals-match-empty
Browse files Browse the repository at this point in the history
lookup: skip duplicate local symbol table check for files without locals
  • Loading branch information
jpoimboe authored Jul 20, 2023
2 parents f8d2534 + 75927e7 commit 8a00d03
Showing 1 changed file with 27 additions and 0 deletions.
27 changes: 27 additions & 0 deletions kpatch-build/lookup.c
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,25 @@ static bool locals_match(struct lookup_table *table, int idx,
return true;
}

static bool file_has_locals(struct symbol *file_sym, struct list_head *sym_list)
{
struct symbol *sym = file_sym;

list_for_each_entry_continue(sym, sym_list, list) {
if (sym->type == STT_FILE)
break;
if (sym->type != STB_LOCAL)
continue;
if (maybe_discarded_sym(sym->name))
continue;

if (sym->type == STT_FUNC || sym->type == STT_OBJECT)
return true;
}

return false;
}

static void find_local_syms(struct lookup_table *table, struct symbol *file_sym,
struct list_head *sym_list)
{
Expand All @@ -184,6 +203,14 @@ static void find_local_syms(struct lookup_table *table, struct symbol *file_sym,
file_sym->name, table->objname);

lookup_table_file_sym = sym;

if (!file_has_locals(file_sym, sym_list)) {
/*
* If the file doesn't have local symbols, any empty
* match will do. Skip the duplicate check.
*/
break;
}
}

if (!lookup_table_file_sym)
Expand Down

0 comments on commit 8a00d03

Please sign in to comment.