mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
objtool: Shrink reloc->sym_reloc_entry
Convert it to a singly-linked list. With allyesconfig + CONFIG_DEBUG_INFO: - Before: peak heap memory consumption: 38.64G - After: peak heap memory consumption: 36.89G Link: https://lore.kernel.org/r/a51f0a6f9bbf2494d5a3a449807307e78a940988.1685464332.git.jpoimboe@kernel.org Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
This commit is contained in:
parent
be2f0b1e12
commit
890f10a433
@ -356,7 +356,6 @@ static void elf_add_symbol(struct elf *elf, struct symbol *sym)
|
||||
struct rb_node *pnode;
|
||||
struct symbol *iter;
|
||||
|
||||
INIT_LIST_HEAD(&sym->reloc_list);
|
||||
INIT_LIST_HEAD(&sym->pv_target);
|
||||
sym->alias = sym;
|
||||
|
||||
@ -540,7 +539,7 @@ static int elf_update_sym_relocs(struct elf *elf, struct symbol *sym)
|
||||
{
|
||||
struct reloc *reloc;
|
||||
|
||||
list_for_each_entry(reloc, &sym->reloc_list, sym_reloc_entry) {
|
||||
for (reloc = sym->relocs; reloc; reloc = reloc->sym_next_reloc) {
|
||||
reloc->rel.r_info = GELF_R_INFO(reloc->sym->idx, reloc_type(reloc));
|
||||
if (elf_write_reloc(elf, reloc))
|
||||
return -1;
|
||||
@ -841,8 +840,9 @@ static struct reloc *elf_init_reloc(struct elf *elf, struct section *rsec,
|
||||
if (elf_write_reloc(elf, reloc))
|
||||
return NULL;
|
||||
|
||||
list_add_tail(&reloc->sym_reloc_entry, &sym->reloc_list);
|
||||
elf_hash_add(reloc, &reloc->hash, reloc_hash(reloc));
|
||||
reloc->sym_next_reloc = sym->relocs;
|
||||
sym->relocs = reloc;
|
||||
|
||||
return reloc;
|
||||
}
|
||||
@ -960,8 +960,9 @@ static int read_relocs(struct elf *elf)
|
||||
return -1;
|
||||
}
|
||||
|
||||
list_add_tail(&reloc->sym_reloc_entry, &sym->reloc_list);
|
||||
elf_hash_add(reloc, &reloc->hash, reloc_hash(reloc));
|
||||
reloc->sym_next_reloc = sym->relocs;
|
||||
sym->relocs = reloc;
|
||||
|
||||
nr_reloc++;
|
||||
}
|
||||
|
@ -63,7 +63,7 @@ struct symbol {
|
||||
u8 profiling_func : 1;
|
||||
u8 warned : 1;
|
||||
struct list_head pv_target;
|
||||
struct list_head reloc_list;
|
||||
struct reloc *relocs;
|
||||
};
|
||||
|
||||
struct reloc {
|
||||
@ -74,7 +74,7 @@ struct reloc {
|
||||
};
|
||||
struct section *sec;
|
||||
struct symbol *sym;
|
||||
struct list_head sym_reloc_entry;
|
||||
struct reloc *sym_next_reloc;
|
||||
};
|
||||
|
||||
struct elf {
|
||||
|
Loading…
Reference in New Issue
Block a user