[lld] 5d928ff - [ELF] Remove error-prone RelocationBaseSection::classof
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Sat Oct 19 21:02:08 PDT 2024
Author: Fangrui Song
Date: 2024-10-19T21:02:03-07:00
New Revision: 5d928ffce22d976b6594496f14351e00c2e4dd78
URL: https://github.com/llvm/llvm-project/commit/5d928ffce22d976b6594496f14351e00c2e4dd78
DIFF: https://github.com/llvm/llvm-project/commit/5d928ffce22d976b6594496f14351e00c2e4dd78.diff
LOG: [ELF] Remove error-prone RelocationBaseSection::classof
Added:
Modified:
lld/ELF/OutputSections.cpp
lld/ELF/SyntheticSections.h
lld/ELF/Writer.cpp
Removed:
################################################################################
diff --git a/lld/ELF/OutputSections.cpp b/lld/ELF/OutputSections.cpp
index 6f76c5d73a5388..6cae7cf8f8599d 100644
--- a/lld/ELF/OutputSections.cpp
+++ b/lld/ELF/OutputSections.cpp
@@ -882,7 +882,11 @@ void OutputSection::checkDynRelAddends(Ctx &ctx) {
// for input .rel[a].<sec> sections which we simply pass through to the
// output. We skip over those and only look at the synthetic relocation
// sections created during linking.
- const auto *sec = dyn_cast<RelocationBaseSection>(sections[i]);
+ if (!SyntheticSection::classof(sections[i]) ||
+ !is_contained({ELF::SHT_REL, ELF::SHT_RELA, ELF::SHT_RELR},
+ sections[i]->type))
+ return;
+ const auto *sec = cast<RelocationBaseSection>(sections[i]);
if (!sec)
return;
for (const DynamicReloc &rel : sec->relocs) {
diff --git a/lld/ELF/SyntheticSections.h b/lld/ELF/SyntheticSections.h
index d64c4aad8c552b..3573767671feb1 100644
--- a/lld/ELF/SyntheticSections.h
+++ b/lld/ELF/SyntheticSections.h
@@ -547,13 +547,7 @@ class RelocationBaseSection : public SyntheticSection {
void mergeRels();
void partitionRels();
void finalizeContents() override;
- static bool classof(const SectionBase *d) {
- return SyntheticSection::classof(d) &&
- (d->type == llvm::ELF::SHT_RELA || d->type == llvm::ELF::SHT_REL ||
- d->type == llvm::ELF::SHT_RELR ||
- (d->type == llvm::ELF::SHT_AARCH64_AUTH_RELR &&
- elf::ctx.arg.emachine == llvm::ELF::EM_AARCH64));
- }
+
int32_t dynamicTag, sizeDynamicTag;
SmallVector<DynamicReloc, 0> relocs;
diff --git a/lld/ELF/Writer.cpp b/lld/ELF/Writer.cpp
index 975954991caebe..ecd4f5e470833c 100644
--- a/lld/ELF/Writer.cpp
+++ b/lld/ELF/Writer.cpp
@@ -1690,10 +1690,9 @@ static void removeUnusedSyntheticSections(Ctx &ctx) {
// finalizeAddressDependentContent, making .rela.dyn no longer empty.
// Conservatively keep .rela.dyn. .relr.auth.dyn can be made empty, but
// we would fail to remove it here.
- if (ctx.arg.emachine == EM_AARCH64 && ctx.arg.relrPackDynRelocs)
- if (auto *relSec = dyn_cast<RelocationBaseSection>(sec))
- if (relSec == ctx.mainPart->relaDyn.get())
- return false;
+ if (ctx.arg.emachine == EM_AARCH64 && ctx.arg.relrPackDynRelocs &&
+ sec == ctx.mainPart->relaDyn.get())
+ return false;
unused.insert(sec);
return true;
});
More information about the llvm-commits
mailing list