aboutsummaryrefslogtreecommitdiff
path: root/disassembler_elf.h
diff options
context:
space:
mode:
authorEtienne Pierre-doray <etiennep@chromium.org>2018-10-05 20:15:13 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 20:38:15 -0700
commite53806a25b988acd67fe57b42eaa611f2ba96a75 (patch)
treee5782ba2d6d7b9962d783b0740f97d4492865a28 /disassembler_elf.h
parent6b37e0db57c48727d81069bc6c0346f0ad688ec0 (diff)
downloadzucchini-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.h6
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);