[llvm] 7d1143b - [llvm-objdump] Move printDynamicRelocations into ELFDump.cpp. NFC
Fangrui Song via llvm-commits
llvm-commits at lists.llvm.org
Fri Jul 14 13:01:16 PDT 2023
Author: Fangrui Song
Date: 2023-07-14T13:01:12-07:00
New Revision: 7d1143b7aec5e5af41a7c977649f67e8eb8560de
URL: https://github.com/llvm/llvm-project/commit/7d1143b7aec5e5af41a7c977649f67e8eb8560de
DIFF: https://github.com/llvm/llvm-project/commit/7d1143b7aec5e5af41a7c977649f67e8eb8560de.diff
LOG: [llvm-objdump] Move printDynamicRelocations into ELFDump.cpp. NFC
Added:
Modified:
llvm/tools/llvm-objdump/ELFDump.cpp
llvm/tools/llvm-objdump/llvm-objdump.cpp
llvm/tools/llvm-objdump/llvm-objdump.h
Removed:
################################################################################
diff --git a/llvm/tools/llvm-objdump/ELFDump.cpp b/llvm/tools/llvm-objdump/ELFDump.cpp
index 43ab30991115e9..5b08a4b128581e 100644
--- a/llvm/tools/llvm-objdump/ELFDump.cpp
+++ b/llvm/tools/llvm-objdump/ELFDump.cpp
@@ -29,6 +29,7 @@ template <typename ELFT> class ELFDumper : public Dumper {
public:
ELFDumper(const ELFObjectFile<ELFT> &O) : Dumper(O), Obj(O) {}
void printPrivateHeaders(bool MachOOnlyFirst) override;
+ void printDynamicRelocations() override;
private:
const ELFObjectFile<ELFT> &Obj;
@@ -311,6 +312,39 @@ template <class ELFT> void ELFDumper<ELFT>::printProgramHeaders() {
}
}
+template <typename ELFT> void ELFDumper<ELFT>::printDynamicRelocations() {
+ if (!any_of(Obj.sections(), [](const ELFSectionRef Sec) {
+ return Sec.getType() == ELF::SHT_DYNAMIC;
+ })) {
+ reportError(Obj.getFileName(), "not a dynamic object");
+ return;
+ }
+
+ std::vector<SectionRef> DynRelSec =
+ cast<ObjectFile>(Obj).dynamic_relocation_sections();
+ if (DynRelSec.empty())
+ return;
+
+ outs() << "\nDYNAMIC RELOCATION RECORDS\n";
+ const uint32_t OffsetPadding = (Obj.getBytesInAddress() > 4 ? 16 : 8);
+ const uint32_t TypePadding = 24;
+ outs() << left_justify("OFFSET", OffsetPadding) << ' '
+ << left_justify("TYPE", TypePadding) << " VALUE\n";
+
+ StringRef Fmt = Obj.getBytesInAddress() > 4 ? "%016" PRIx64 : "%08" PRIx64;
+ for (const SectionRef &Section : DynRelSec)
+ for (const RelocationRef &Reloc : Section.relocations()) {
+ uint64_t Address = Reloc.getOffset();
+ SmallString<32> RelocName;
+ SmallString<32> ValueStr;
+ Reloc.getTypeName(RelocName);
+ if (Error E = getELFRelocationValueString(&Obj, Reloc, ValueStr))
+ reportError(std::move(E), Obj.getFileName());
+ outs() << format(Fmt.data(), Address) << ' '
+ << left_justify(RelocName, TypePadding) << ' ' << ValueStr << '\n';
+ }
+}
+
template <class ELFT>
static void printSymbolVersionDependency(StringRef FileName,
const ELFFile<ELFT> &Obj,
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp
index 4d2e59d7ddfe0f..0ed614c8bf2aba 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.cpp
+++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp
@@ -2243,43 +2243,6 @@ void Dumper::printRelocations() {
}
}
-void objdump::printDynamicRelocations(const ObjectFile *Obj) {
- // For the moment, this option is for ELF only
- if (!Obj->isELF())
- return;
-
- const auto *Elf = dyn_cast<ELFObjectFileBase>(Obj);
- if (!Elf || !any_of(Elf->sections(), [](const ELFSectionRef Sec) {
- return Sec.getType() == ELF::SHT_DYNAMIC;
- })) {
- reportError(Obj->getFileName(), "not a dynamic object");
- return;
- }
-
- std::vector<SectionRef> DynRelSec = Obj->dynamic_relocation_sections();
- if (DynRelSec.empty())
- return;
-
- outs() << "\nDYNAMIC RELOCATION RECORDS\n";
- const uint32_t OffsetPadding = (Obj->getBytesInAddress() > 4 ? 16 : 8);
- const uint32_t TypePadding = 24;
- outs() << left_justify("OFFSET", OffsetPadding) << ' '
- << left_justify("TYPE", TypePadding) << " VALUE\n";
-
- StringRef Fmt = Obj->getBytesInAddress() > 4 ? "%016" PRIx64 : "%08" PRIx64;
- for (const SectionRef &Section : DynRelSec)
- for (const RelocationRef &Reloc : Section.relocations()) {
- uint64_t Address = Reloc.getOffset();
- SmallString<32> RelocName;
- SmallString<32> ValueStr;
- Reloc.getTypeName(RelocName);
- if (Error E = getRelocationValueString(Reloc, ValueStr))
- reportError(std::move(E), Obj->getFileName());
- outs() << format(Fmt.data(), Address) << ' '
- << left_justify(RelocName, TypePadding) << ' ' << ValueStr << '\n';
- }
-}
-
// Returns true if we need to show LMA column when dumping section headers. We
// show it only when the platform is ELF and either we have at least one section
// whose VMA and LMA are
diff erent and/or when --show-lma flag is used.
@@ -2866,7 +2829,7 @@ static void dumpObject(ObjectFile *O, const Archive *A = nullptr,
if (Relocations && !Disassemble)
D.printRelocations();
if (DynamicRelocations)
- printDynamicRelocations(O);
+ D.printDynamicRelocations();
if (SectionContents)
printSectionContents(O);
if (Disassemble)
diff --git a/llvm/tools/llvm-objdump/llvm-objdump.h b/llvm/tools/llvm-objdump/llvm-objdump.h
index fd75f552e50b4d..b3136f0374d2fd 100644
--- a/llvm/tools/llvm-objdump/llvm-objdump.h
+++ b/llvm/tools/llvm-objdump/llvm-objdump.h
@@ -84,6 +84,7 @@ class Dumper {
void reportUniqueWarning(const Twine &Msg);
virtual void printPrivateHeaders(bool MachOOnlyFirst);
+ virtual void printDynamicRelocations() {}
void printSymbolTable(StringRef ArchiveName,
StringRef ArchitectureName = StringRef(),
bool DumpDynamic = false);
@@ -112,7 +113,6 @@ object::SectionFilter ToolSectionFilter(const llvm::object::ObjectFile &O,
uint64_t *Idx = nullptr);
bool isRelocAddressLess(object::RelocationRef A, object::RelocationRef B);
-void printDynamicRelocations(const object::ObjectFile *O);
void printSectionHeaders(object::ObjectFile &O);
void printSectionContents(const object::ObjectFile *O);
[[noreturn]] void reportError(StringRef File, const Twine &Message);
More information about the llvm-commits
mailing list