forked from Minki/linux
objtool: Shrink struct instruction
Any one instruction can only ever call a single function, therefore insn->mcount_loc_node is superfluous and can use insn->call_node. This shrinks struct instruction, which is by far the most numerous structure objtool creates. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Borislav Petkov <bp@suse.de> Acked-by: Josh Poimboeuf <jpoimboe@redhat.com> Tested-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/r/20211026120309.785456706@infradead.org
This commit is contained in:
parent
dd003edeff
commit
c509331b41
@ -701,7 +701,7 @@ static int create_mcount_loc_sections(struct objtool_file *file)
|
||||
return 0;
|
||||
|
||||
idx = 0;
|
||||
list_for_each_entry(insn, &file->mcount_loc_list, mcount_loc_node)
|
||||
list_for_each_entry(insn, &file->mcount_loc_list, call_node)
|
||||
idx++;
|
||||
|
||||
sec = elf_create_section(file->elf, "__mcount_loc", 0, sizeof(unsigned long), idx);
|
||||
@ -709,7 +709,7 @@ static int create_mcount_loc_sections(struct objtool_file *file)
|
||||
return -1;
|
||||
|
||||
idx = 0;
|
||||
list_for_each_entry(insn, &file->mcount_loc_list, mcount_loc_node) {
|
||||
list_for_each_entry(insn, &file->mcount_loc_list, call_node) {
|
||||
|
||||
loc = (unsigned long *)sec->data->d_buf + idx;
|
||||
memset(loc, 0, sizeof(unsigned long));
|
||||
@ -1051,7 +1051,7 @@ static void annotate_call_site(struct objtool_file *file,
|
||||
|
||||
insn->type = INSN_NOP;
|
||||
|
||||
list_add_tail(&insn->mcount_loc_node, &file->mcount_loc_list);
|
||||
list_add_tail(&insn->call_node, &file->mcount_loc_list);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -40,7 +40,6 @@ struct instruction {
|
||||
struct list_head list;
|
||||
struct hlist_node hash;
|
||||
struct list_head call_node;
|
||||
struct list_head mcount_loc_node;
|
||||
struct section *sec;
|
||||
unsigned long offset;
|
||||
unsigned int len;
|
||||
|
Loading…
Reference in New Issue
Block a user