diff options
author | Etienne Pierre-doray <etiennep@chromium.org> | 2018-10-05 20:15:13 +0000 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2021-07-25 20:38:15 -0700 |
commit | e53806a25b988acd67fe57b42eaa611f2ba96a75 (patch) | |
tree | e5782ba2d6d7b9962d783b0740f97d4492865a28 /disassembler_elf.h | |
parent | 6b37e0db57c48727d81069bc6c0346f0ad688ec0 (diff) | |
download | zucchini-e53806a25b988acd67fe57b42eaa611f2ba96a75.tar.gz |
[Zucchini]: Fix discrepancy in reference width for Elf reloc and abs32.
Adds kVAWidth to Elf32Traits and use it in
DisassemblerElfIntel::MakeReferenceGroups as the width of
kReloc and kAbs32 reference types.
Bug: 892359
Change-Id: I28930b8978393c16ee29051c48496e4f696a3fcd
Reviewed-on: https://chromium-review.googlesource.com/c/1264816
Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org>
Reviewed-by: Samuel Huang <huangs@chromium.org>
Cr-Commit-Position: refs/heads/master@{#597264}
NOKEYCHECK=True
GitOrigin-RevId: af95efbfe9d3f3ca90c105f7d1c9c13e43fcde8c
Diffstat (limited to 'disassembler_elf.h')
-rw-r--r-- | disassembler_elf.h | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/disassembler_elf.h b/disassembler_elf.h index a5b0a72..d8012db 100644 --- a/disassembler_elf.h +++ b/disassembler_elf.h @@ -39,6 +39,7 @@ struct Elf32IntelTraits : public Elf32Traits { static const char kExeTypeString[]; static constexpr elf::MachineArchitecture kMachineValue = elf::EM_386; static constexpr uint32_t kRelType = elf::R_386_RELATIVE; + enum : uint32_t { kVAWidth = 4 }; using Rel32FinderUse = Rel32FinderX86; }; @@ -58,6 +59,7 @@ struct Elf64IntelTraits : public Elf64Traits { static const char kExeTypeString[]; static constexpr elf::MachineArchitecture kMachineValue = elf::EM_X86_64; static constexpr uint32_t kRelType = elf::R_X86_64_RELATIVE; + enum : uint32_t { kVAWidth = 8 }; using Rel32FinderUse = Rel32FinderX64; }; @@ -81,8 +83,6 @@ class DisassemblerElf : public Disassembler { // Find/Receive functions that are common among different architectures. std::unique_ptr<ReferenceReader> MakeReadRelocs(offset_t lo, offset_t hi); std::unique_ptr<ReferenceWriter> MakeWriteRelocs(MutableBufferView image); - std::unique_ptr<ReferenceReader> MakeReadAbs32(offset_t lo, offset_t hi); - std::unique_ptr<ReferenceWriter> MakeWriteAbs32(MutableBufferView image); const AddressTranslator& translator() const { return translator_; } @@ -171,6 +171,8 @@ class DisassemblerElfIntel : public DisassemblerElf<Traits> { void PostProcessRel32() override; // Specialized Find/Receive functions. + std::unique_ptr<ReferenceReader> MakeReadAbs32(offset_t lo, offset_t hi); + std::unique_ptr<ReferenceWriter> MakeWriteAbs32(MutableBufferView image); std::unique_ptr<ReferenceReader> MakeReadRel32(offset_t lo, offset_t hi); std::unique_ptr<ReferenceWriter> MakeWriteRel32(MutableBufferView image); |