mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
objtool: Consolidate file decoding into decode_file()
decode_sections() relies on CFI and cfi_hash initialization done separately in check(), making it unusable outside of check(). Consolidate the initialization into decode_sections() and rename it to decode_file(), and make it global along with free_insns() and insn_reloc() for use by other objtool components -- namely, the checksum code which will be moving to another file. Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Acked-by: Song Liu <song@kernel.org> Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
This commit is contained in:
parent
30cae58cdc
commit
a5b6612332
|
|
@ -1346,7 +1346,7 @@ __weak bool arch_is_embedded_insn(struct symbol *sym)
|
|||
return false;
|
||||
}
|
||||
|
||||
static struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn)
|
||||
struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn)
|
||||
{
|
||||
struct reloc *reloc;
|
||||
|
||||
|
|
@ -2633,8 +2633,21 @@ static bool alts_needed(void)
|
|||
opts.checksum;
|
||||
}
|
||||
|
||||
static int decode_sections(struct objtool_file *file)
|
||||
int decode_file(struct objtool_file *file)
|
||||
{
|
||||
arch_initial_func_cfi_state(&initial_func_cfi);
|
||||
init_cfi_state(&init_cfi);
|
||||
init_cfi_state(&func_cfi);
|
||||
set_func_state(&func_cfi);
|
||||
init_cfi_state(&force_undefined_cfi);
|
||||
force_undefined_cfi.force_undefined = true;
|
||||
|
||||
if (!cfi_hash_alloc(1UL << (file->elf->symbol_bits - 3)))
|
||||
return -1;
|
||||
|
||||
cfi_hash_add(&init_cfi);
|
||||
cfi_hash_add(&func_cfi);
|
||||
|
||||
file->klp = is_livepatch_module(file);
|
||||
|
||||
mark_rodata(file);
|
||||
|
|
@ -4998,7 +5011,7 @@ struct insn_chunk {
|
|||
* which can trigger more allocations for .debug_* sections whose data hasn't
|
||||
* been read yet.
|
||||
*/
|
||||
static void free_insns(struct objtool_file *file)
|
||||
void free_insns(struct objtool_file *file)
|
||||
{
|
||||
struct instruction *insn;
|
||||
struct insn_chunk *chunks = NULL, *chunk;
|
||||
|
|
@ -5045,22 +5058,7 @@ int check(struct objtool_file *file)
|
|||
objtool_disas_ctx = disas_ctx;
|
||||
}
|
||||
|
||||
arch_initial_func_cfi_state(&initial_func_cfi);
|
||||
init_cfi_state(&init_cfi);
|
||||
init_cfi_state(&func_cfi);
|
||||
set_func_state(&func_cfi);
|
||||
init_cfi_state(&force_undefined_cfi);
|
||||
force_undefined_cfi.force_undefined = true;
|
||||
|
||||
if (!cfi_hash_alloc(1UL << (file->elf->symbol_bits - 3))) {
|
||||
ret = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
cfi_hash_add(&init_cfi);
|
||||
cfi_hash_add(&func_cfi);
|
||||
|
||||
ret = decode_sections(file);
|
||||
ret = decode_file(file);
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
|
|
|
|||
|
|
@ -155,6 +155,11 @@ struct instruction *next_insn_same_sec(struct objtool_file *file, struct instruc
|
|||
insn && insn->offset < sym->offset + sym->len; \
|
||||
insn = next_insn_same_sec(file, insn))
|
||||
|
||||
struct reloc *insn_reloc(struct objtool_file *file, struct instruction *insn);
|
||||
|
||||
int decode_file(struct objtool_file *file);
|
||||
void free_insns(struct objtool_file *file);
|
||||
|
||||
const char *objtool_disas_insn(struct instruction *insn);
|
||||
|
||||
extern size_t sym_name_max_len;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user