diff options
author | Etienne Pierre-doray <etiennep@chromium.org> | 2021-09-03 20:52:11 +0000 |
---|---|---|
committer | Copybara-Service <copybara-worker@google.com> | 2021-09-03 14:00:09 -0700 |
commit | 737d35c6383995ae4d474cd975aebf92aaf73393 (patch) | |
tree | 4094cc30a4a06288249ab04493c1e9c7b2b199bd /disassembler_elf.h | |
parent | 26518ffbdf042c4c35617be2446dac49590a89c2 (diff) | |
download | zucchini-737d35c6383995ae4d474cd975aebf92aaf73393.tar.gz |
[zucchini]: Simplify DisassemblerElfArm read/write functions.
Use template read/write functions instead of repeated versions.
Change-Id: Ie87d307ebd7b297fe802216fe07aa820d7b1fa4d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3082253
Reviewed-by: Samuel Huang <huangs@chromium.org>
Commit-Queue: Etienne Pierre-Doray <etiennep@chromium.org>
Cr-Commit-Position: refs/heads/main@{#918237}
NOKEYCHECK=True
GitOrigin-RevId: d64aec31e8bb5e1acb9a2da1e6e92fbd5e59d5f6
Diffstat (limited to 'disassembler_elf.h')
-rw-r--r-- | disassembler_elf.h | 44 |
1 files changed, 7 insertions, 37 deletions
diff --git a/disassembler_elf.h b/disassembler_elf.h index 0bd11a6..b29e89f 100644 --- a/disassembler_elf.h +++ b/disassembler_elf.h @@ -296,6 +296,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 +329,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 +346,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 |