From fb345573ac09d9e282569d01fceadda5bb570bc4 Mon Sep 17 00:00:00 2001 From: Samuel Huang Date: Thu, 8 Nov 2018 21:53:27 +0000 Subject: [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 Reviewed-by: Samuel Huang Commit-Queue: Samuel Huang Cr-Commit-Position: refs/heads/master@{#606612} NOKEYCHECK=True GitOrigin-RevId: 9076fc4939ced233b85e5f8942ba947b6143aba3 --- disassembler_elf.cc | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) (limited to 'disassembler_elf.cc') 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::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 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::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 DisassemblerElfIntel::MakeReferenceGroups() {ReferenceTypeTraits{Traits::kVAWidth, TypeTag(kAbs32), PoolTag(kAbs32)}, &DisassemblerElfIntel::MakeReadAbs32, &DisassemblerElfIntel::MakeWriteAbs32}, + // N.B.: Rel32 |width| is 4 bytes, even for x64. {ReferenceTypeTraits{4, TypeTag(kRel32), PoolTag(kRel32)}, &DisassemblerElfIntel::MakeReadRel32, &DisassemblerElfIntel::MakeWriteRel32}}; @@ -405,8 +403,7 @@ std::unique_ptr DisassemblerElfIntel::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 DisassemblerElfIntel::MakeReadAbs32( template std::unique_ptr DisassemblerElfIntel::MakeWriteAbs32( MutableBufferView image) { - // TODO(huangs): For AArch64, see if |Traits::kBitness| should be used here? return std::make_unique( image, AbsoluteAddress(Traits::kBitness, kElfImageBase), this->translator_); -- cgit v1.2.3