bfd/elf: Don't read non-existing secondary relocs
Without this we unconditionally try to slurp in secondary relocs for each input section, leading to quadratic behaviour even for strip(1). On write-out we already used a flag to avoid this. So track existence of secondary relocs on read-in as well and only slurp in when needed. This still doesn't implement a proper list of secondary reloc sections, and still would exhibit quadratic behaviour if most input sections have a secondary reloc section. But at least on normal input this avoids any slowdown from trying to handle secondary relocation sections. bfd/ * elf.c (bfd_section_from_shdr): Set has_secondary_relocs flag. (_bfd_elf_slurp_secondary_reloc_section): Use it for early-out.
This commit is contained in:
parent
c3cfd9eb5b
commit
956ea65cd7
@ -2467,6 +2467,8 @@ bfd_section_from_shdr (bfd *abfd, unsigned int shindex)
|
||||
"for section %pA found - ignoring"),
|
||||
abfd, name, target_sect);
|
||||
}
|
||||
else
|
||||
esdt->has_secondary_relocs = true;
|
||||
goto success;
|
||||
}
|
||||
|
||||
@ -12739,6 +12741,9 @@ _bfd_elf_slurp_secondary_reloc_section (bfd * abfd,
|
||||
#endif
|
||||
r_sym = elf32_r_sym;
|
||||
|
||||
if (!elf_section_data (sec)->has_secondary_relocs)
|
||||
return true;
|
||||
|
||||
/* Discover if there are any secondary reloc sections
|
||||
associated with SEC. */
|
||||
for (relsec = abfd->sections; relsec != NULL; relsec = relsec->next)
|
||||
|
Loading…
x
Reference in New Issue
Block a user