diff options
author | Samuel Huang <huangs@chromium.org> | 2018-11-08 21:53:27 +0000 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2021-07-25 20:41:11 -0700 |
commit | fb345573ac09d9e282569d01fceadda5bb570bc4 (patch) | |
tree | 61f801918b5b63808db11af5a9cb3d2702129bd9 /disassembler_elf.cc | |
parent | d60fe380fbf410ad935b1a7c0005e76823095b6e (diff) | |
download | zucchini-fb345573ac09d9e282569d01fceadda5bb570bc4.tar.gz |
[Zucchini] Cleanup before adding ARM support.
Update includes and comments, and remove some unused code.
In particular, remove TODO comments for figuring out whether ARM
abs32 references can be 4 bytes long: Turns out ARM absolute
references are 8 bytes long. It's rel32 refereneces that can be
4 bytes long.
Change-Id: I02dc905885f6cb5ff929efe0fb1f9a6593ee05a8
Reviewed-on: https://chromium-review.googlesource.com/c/1327559
Reviewed-by: Etienne Pierre-Doray <etiennep@chromium.org>
Reviewed-by: Samuel Huang <huangs@chromium.org>
Commit-Queue: Samuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#606612}
NOKEYCHECK=True
GitOrigin-RevId: 9076fc4939ced233b85e5f8942ba947b6143aba3
Diffstat (limited to 'disassembler_elf.cc')
-rw-r--r-- | disassembler_elf.cc | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/disassembler_elf.cc b/disassembler_elf.cc index be01c4c..ef050a4 100644 --- a/disassembler_elf.cc +++ b/disassembler_elf.cc @@ -43,13 +43,13 @@ bool IsExecSection(const typename Traits::Elf_Shdr& section) { } // namespace -/******** ELF32Traits ********/ +/******** Elf32Traits ********/ // static constexpr Bitness Elf32Traits::kBitness; constexpr elf::FileClass Elf32Traits::kIdentificationClass; -/******** ELF32IntelTraits ********/ +/******** Elf32IntelTraits ********/ // static constexpr ExecutableType Elf32IntelTraits::kExeType; @@ -57,13 +57,13 @@ const char Elf32IntelTraits::kExeTypeString[] = "ELF x86"; constexpr elf::MachineArchitecture Elf32IntelTraits::kMachineValue; constexpr uint32_t Elf32IntelTraits::kRelType; -/******** ELF64Traits ********/ +/******** Elf64Traits ********/ // static constexpr Bitness Elf64Traits::kBitness; constexpr elf::FileClass Elf64Traits::kIdentificationClass; -/******** ELF64IntelTraits ********/ +/******** Elf64IntelTraits ********/ // static constexpr ExecutableType Elf64IntelTraits::kExeType; @@ -291,7 +291,7 @@ void DisassemblerElf<Traits>::GetAbs32FromRelocSections() { constexpr int kAbs32Width = Traits::kVAWidth; DCHECK(abs32_locations_.empty()); - // Read reloc targets as preliminary abs32 locations. + // Read reloc targets to get preliminary abs32 locations. std::unique_ptr<ReferenceReader> relocs = MakeReadRelocs(0, offset_t(size())); for (auto ref = relocs->GetNext(); ref.has_value(); ref = relocs->GetNext()) abs32_locations_.push_back(ref->target); @@ -300,9 +300,6 @@ void DisassemblerElf<Traits>::GetAbs32FromRelocSections() { // Abs32 references must have targets translatable to offsets. Remove those // that are unable to do so. - // TODO(huangs): Investigate whether passing |Traits::kBitness| is correct: - // Some architectures using ELF might have 4-byte long abs32 body regardless - // of bitness. size_t num_untranslatable = RemoveUntranslatableAbs32(image_, {Traits::kBitness, kElfImageBase}, translator_, &abs32_locations_); @@ -352,6 +349,7 @@ std::vector<ReferenceGroup> DisassemblerElfIntel<Traits>::MakeReferenceGroups() {ReferenceTypeTraits{Traits::kVAWidth, TypeTag(kAbs32), PoolTag(kAbs32)}, &DisassemblerElfIntel<Traits>::MakeReadAbs32, &DisassemblerElfIntel<Traits>::MakeWriteAbs32}, + // N.B.: Rel32 |width| is 4 bytes, even for x64. {ReferenceTypeTraits{4, TypeTag(kRel32), PoolTag(kRel32)}, &DisassemblerElfIntel<Traits>::MakeReadRel32, &DisassemblerElfIntel<Traits>::MakeWriteRel32}}; @@ -405,8 +403,7 @@ std::unique_ptr<ReferenceReader> DisassemblerElfIntel<Traits>::MakeReadAbs32( offset_t lo, offset_t hi) { // TODO(huangs): Don't use Abs32RvaExtractorWin32 here; use new class that - // caters to different ELF architectures (e.g., abs32 in AArch64 are 4 bytes - // long, not 8 bytes long). + // caters to different ELF architectures. Abs32RvaExtractorWin32 abs_rva_extractor( this->image_, AbsoluteAddress(Traits::kBitness, kElfImageBase), this->abs32_locations_, lo, hi); @@ -417,7 +414,6 @@ std::unique_ptr<ReferenceReader> DisassemblerElfIntel<Traits>::MakeReadAbs32( template <class Traits> std::unique_ptr<ReferenceWriter> DisassemblerElfIntel<Traits>::MakeWriteAbs32( MutableBufferView image) { - // TODO(huangs): For AArch64, see if |Traits::kBitness| should be used here? return std::make_unique<Abs32WriterWin32>( image, AbsoluteAddress(Traits::kBitness, kElfImageBase), this->translator_); |