diff --git a/lld/ELF/MarkLive.cpp b/lld/ELF/MarkLive.cpp index 90327133e06e..6cd5ef7c91c9 100644 --- a/lld/ELF/MarkLive.cpp +++ b/lld/ELF/MarkLive.cpp @@ -77,25 +77,20 @@ static ResolvedReloc resolveReloc(InputSectionBase &Sec, return {D->Section->Repl, Offset}; } -template -static void run(ELFFile &Obj, InputSectionBase &Sec, - Elf_Shdr *RelSec, std::function)> Fn) { - if (RelSec->sh_type == SHT_RELA) { - for (const typename ELFT::Rela &RI : Obj.relas(RelSec)) - Fn(resolveReloc(Sec, RI)); - } else { - for (const typename ELFT::Rel &RI : Obj.rels(RelSec)) - Fn(resolveReloc(Sec, RI)); - } -} - // Calls Fn for each section that Sec refers to via relocations. template static void forEachSuccessor(InputSection &Sec, std::function)> Fn) { ELFFile &Obj = Sec.getFile()->getObj(); - for (const typename ELFT::Shdr *RelSec : Sec.RelocSections) - run(Obj, Sec, RelSec, Fn); + for (const typename ELFT::Shdr *RelSec : Sec.RelocSections) { + if (RelSec->sh_type == SHT_RELA) { + for (const typename ELFT::Rela &Rel : Obj.relas(RelSec)) + Fn(resolveReloc(Sec, Rel)); + } else { + for (const typename ELFT::Rel &Rel : Obj.rels(RelSec)) + Fn(resolveReloc(Sec, Rel)); + } + } } // The .eh_frame section is an unfortunate special case.