diff options
author | Kelvin Zhang <zhangkelvin@google.com> | 2021-11-02 21:56:43 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-11-02 21:56:43 +0000 |
commit | 8be98142ecdba40b2ea9be10b11a23f4e6b67b05 (patch) | |
tree | 0a310ca653ef73c547d80da63c87fcb2c0636bcb /disassembler_elf.h | |
parent | b77318bc7ecfba25e4966b56b9e9ab593925ad9d (diff) | |
parent | 7be427590935bc88198d32004449ccfcf60b60d4 (diff) | |
download | zucchini-8be98142ecdba40b2ea9be10b11a23f4e6b67b05.tar.gz |
Merge remote-tracking branch 'aosp/upstream-main' into dev am: a90c04389f am: ddc43dc959 am: d9eed84a58 am: 58b4d19a6b am: 7be4275909
Original change: https://android-review.googlesource.com/c/platform/external/zucchini/+/1877854
Change-Id: Ifdb1f7882cc237258a3395d28158d50bb4b43136
Diffstat (limited to 'disassembler_elf.h')
-rw-r--r-- | disassembler_elf.h | 47 |
1 files changed, 10 insertions, 37 deletions
diff --git a/disassembler_elf.h b/disassembler_elf.h index 0bd11a6..353c444 100644 --- a/disassembler_elf.h +++ b/disassembler_elf.h @@ -63,6 +63,7 @@ struct AArch64ReferenceType { }; struct Elf32Traits { + static constexpr uint16_t kVersion = 1; static constexpr Bitness kBitness = kBit32; static constexpr elf::FileClass kIdentificationClass = elf::ELFCLASS32; using Elf_Shdr = elf::Elf32_Shdr; @@ -94,6 +95,7 @@ struct ElfAArch32Traits : public Elf32Traits { }; struct Elf64Traits { + static constexpr uint16_t kVersion = 1; static constexpr Bitness kBitness = kBit64; static constexpr elf::FileClass kIdentificationClass = elf::ELFCLASS64; using Elf_Shdr = elf::Elf64_Shdr; @@ -151,6 +153,7 @@ template <class TRAITS> class DisassemblerElf : public Disassembler { public: using Traits = TRAITS; + static constexpr uint16_t kVersion = Traits::kVersion; // Applies quick checks to determine whether |image| *may* point to the start // of an executable. Returns true iff the check passes. static bool QuickDetect(ConstBufferView image); @@ -296,6 +299,13 @@ class DisassemblerElfArm : public DisassemblerElf<TRAITS> { std::unique_ptr<ReferenceReader> MakeReadAbs32(offset_t lo, offset_t hi); std::unique_ptr<ReferenceWriter> MakeWriteAbs32(MutableBufferView image); + // Specialized Read/Write functions for different rel32 address types. + template <class ADDR_TRAITS> + std::unique_ptr<ReferenceReader> MakeReadRel32(offset_t lower, + offset_t upper); + template <class ADDR_TRAITS> + std::unique_ptr<ReferenceWriter> MakeWriteRel32(MutableBufferView image); + protected: // Sorted file offsets of rel32 locations for each rel32 address type. std::deque<offset_t> @@ -322,27 +332,6 @@ class DisassemblerElfAArch32 : public DisassemblerElfArm<ElfAArch32Traits> { // or THUMB2 mode, this function implements heuristics to distinguish between // the two. Returns true if section is THUMB2 mode; otherwise return false. bool IsExecSectionThumb2(const typename Traits::Elf_Shdr& section) const; - - // Specialized Read/Write functions for different rel32 address types. - std::unique_ptr<ReferenceReader> MakeReadRel32A24(offset_t lower, - offset_t upper); - std::unique_ptr<ReferenceWriter> MakeWriteRel32A24(MutableBufferView image); - - std::unique_ptr<ReferenceReader> MakeReadRel32T8(offset_t lower, - offset_t upper); - std::unique_ptr<ReferenceWriter> MakeWriteRel32T8(MutableBufferView image); - - std::unique_ptr<ReferenceReader> MakeReadRel32T11(offset_t lower, - offset_t upper); - std::unique_ptr<ReferenceWriter> MakeWriteRel32T11(MutableBufferView image); - - std::unique_ptr<ReferenceReader> MakeReadRel32T20(offset_t lower, - offset_t upper); - std::unique_ptr<ReferenceWriter> MakeWriteRel32T20(MutableBufferView image); - - std::unique_ptr<ReferenceReader> MakeReadRel32T24(offset_t lower, - offset_t upper); - std::unique_ptr<ReferenceWriter> MakeWriteRel32T24(MutableBufferView image); }; // Disassembler for ELF with AArch64 (AKA ARM64). @@ -360,22 +349,6 @@ class DisassemblerElfAArch64 : public DisassemblerElfArm<ElfAArch64Traits> { // DisassemblerElfArm: std::unique_ptr<typename Traits::Rel32FinderUse> MakeRel32Finder( const typename Traits::Elf_Shdr& section) override; - - // Specialized Read/Write functions for different rel32 address types. - std::unique_ptr<ReferenceReader> MakeReadRel32Immd14(offset_t lower, - offset_t upper); - std::unique_ptr<ReferenceWriter> MakeWriteRel32Immd14( - MutableBufferView image); - - std::unique_ptr<ReferenceReader> MakeReadRel32Immd19(offset_t lower, - offset_t upper); - std::unique_ptr<ReferenceWriter> MakeWriteRel32Immd19( - MutableBufferView image); - - std::unique_ptr<ReferenceReader> MakeReadRel32Immd26(offset_t lower, - offset_t upper); - std::unique_ptr<ReferenceWriter> MakeWriteRel32Immd26( - MutableBufferView image); }; } // namespace zucchini |