diff options
| author | Josh Poimboeuf <jpoimboe@kernel.org> | 2025-09-17 09:03:37 -0700 |
|---|---|---|
| committer | Josh Poimboeuf <jpoimboe@kernel.org> | 2025-10-14 14:46:46 -0700 |
| commit | 4ea029389bf0cc44da6d3a24a520200e060ce6bf (patch) | |
| tree | 47a9416e9dac0bb466127f30cf8e1c9d2ff1cf43 /tools/objtool/elf.c | |
| parent | 25eac74b6bdbf6d15911b582e747e8ad12fcbf8f (diff) | |
| download | linux-next-4ea029389bf0cc44da6d3a24a520200e060ce6bf.tar.gz linux-next-4ea029389bf0cc44da6d3a24a520200e060ce6bf.zip | |
objtool: Mark .cold subfunctions
Introduce a flag to identify .cold subfunctions so they can be detected
easier and faster.
Acked-by: Petr Mladek <pmladek@suse.com>
Tested-by: Joe Lawrence <joe.lawrence@redhat.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Diffstat (limited to 'tools/objtool/elf.c')
| -rw-r--r-- | tools/objtool/elf.c | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/tools/objtool/elf.c b/tools/objtool/elf.c index d36c0d42fd7b..59568381486c 100644 --- a/tools/objtool/elf.c +++ b/tools/objtool/elf.c @@ -441,6 +441,10 @@ static void elf_add_symbol(struct elf *elf, struct symbol *sym) list_add(&sym->list, entry); elf_hash_add(symbol, &sym->hash, sym->idx); elf_hash_add(symbol_name, &sym->name_hash, str_hash(sym->name)); + + if (is_func_sym(sym) && strstr(sym->name, ".cold")) + sym->cold = 1; + sym->pfunc = sym->cfunc = sym; } static int read_symbols(struct elf *elf) @@ -527,18 +531,15 @@ static int read_symbols(struct elf *elf) sec_for_each_sym(sec, sym) { char *pname; size_t pnamelen; - if (!is_func_sym(sym)) - continue; - if (sym->pfunc == NULL) - sym->pfunc = sym; - - if (sym->cfunc == NULL) - sym->cfunc = sym; + if (!sym->cold) + continue; coldstr = strstr(sym->name, ".cold"); - if (!coldstr) - continue; + if (!coldstr) { + ERROR("%s(): cold subfunction without \".cold\"?", sym->name); + return -1; + } pnamelen = coldstr - sym->name; pname = strndup(sym->name, pnamelen); |
