mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 17:47:41 +02:00
objtool/klp: Fix --debug-checksum for duplicate symbol names
find_symbol_by_name() only returns the first match, so --debug-checksum=<func> silently ignores any subsequent duplicately named functions after the first. Fix that, along with a new for_each_sym_by_name() helper. Acked-by: Song Liu <song@kernel.org> Reviewed-by: Miroslav Benes <mbenes@suse.cz> Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
This commit is contained in:
parent
0333b73995
commit
def5b60dcd
|
|
@ -3677,18 +3677,23 @@ static int checksum_debug_init(struct objtool_file *file)
|
|||
|
||||
s = dup;
|
||||
while (*s) {
|
||||
struct symbol *func;
|
||||
bool found = false;
|
||||
struct symbol *sym;
|
||||
char *comma;
|
||||
|
||||
comma = strchr(s, ',');
|
||||
if (comma)
|
||||
*comma = '\0';
|
||||
|
||||
func = find_symbol_by_name(file->elf, s);
|
||||
if (!func || !is_func_sym(func))
|
||||
for_each_sym_by_name(file->elf, s, sym) {
|
||||
if (!is_func_sym(sym))
|
||||
continue;
|
||||
sym->debug_checksum = 1;
|
||||
found = true;
|
||||
}
|
||||
|
||||
if (!found)
|
||||
WARN("--debug-checksum: can't find '%s'", s);
|
||||
else
|
||||
func->debug_checksum = 1;
|
||||
|
||||
if (!comma)
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -489,6 +489,11 @@ static inline void set_sym_next_reloc(struct reloc *reloc, struct reloc *next)
|
|||
#define for_each_sym_continue(elf, sym) \
|
||||
list_for_each_entry_continue(sym, &elf->symbols, global_list)
|
||||
|
||||
#define for_each_sym_by_name(elf, _name, sym) \
|
||||
elf_hash_for_each_possible(elf, symbol_name, sym, name_hash, \
|
||||
str_hash_demangled(_name)) \
|
||||
if (strcmp(sym->name, _name)) {} else
|
||||
|
||||
#define for_each_sym_by_demangled_name(elf, name, sym) \
|
||||
elf_hash_for_each_possible(elf, symbol_name, sym, name_hash, \
|
||||
str_hash(name)) \
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user