aboutsummaryrefslogtreecommitdiff
path: root/reference_bytes_mixer.h
diff options
context:
space:
mode:
authorSamuel Huang <huangs@chromium.org>2019-01-11 20:00:13 +0000
committerCopybara-Service <copybara-worker@google.com>2021-07-25 20:43:21 -0700
commit65b242dcf03e2f24e7983fd1f47e84e4eb822cc5 (patch)
tree1846f894076eec58f93d37560903254320ae0690 /reference_bytes_mixer.h
parent2dedd30edf813df98bad26ea436e737c9ac356f2 (diff)
downloadzucchini-65b242dcf03e2f24e7983fd1f47e84e4eb822cc5.tar.gz
[Zucchini] ARM Support: Add arm_utils.* with tests.
This CL adds new files for ARM support. The code is not yet integrated into Zucchini, but are only used by the added tests. The high-level goal is to support rel32 reference read / write via: (data bytes) <-> |code| <-> |disp| <-> |target_rva|, where |code| is ARM machine code value (read-write), and |disp| is a PC-relative displacement. Details: * Add template class ArmAddrTraits as API to process rel32 references. It is specialized for each rel32 address type, and aggregates selected low-level static functions from an ARM *Translator class. * Add class Arm32Rel32Translator for 32-bit ARM (ARM32) * ArmAddrTraits is specialized to {A24} encoding for ARM mode, and {T8, T11, T21, T24} encodings for THUMB2 mode. * Complication: |code| can affect |disp| <-> |target_rva|, since the the BLX instruction dictates whether |target_rva| should be 2-byte or 4-byte aligned! * The BLX special case makes |disp| <-> |target_rva| unsuitable for ArmAddrTraits. This led to the API to be defined as: * Fetch() for (data bytes) -> |code|. * Store() for |code| -> (data bytes). * Decode() for |code| -> |disp| & alignment spec (ArmAlign). * Encode() for |disp| -> |code|: Modifies existing |code|. * Read() for |code| -> |target_rva|: Needs |instr_rva|. * Write() for |target_rva| -> |code|. * Needs |instr_rva|; modifies existing |code|. * Add class AArch64Rel32Translator for 64-bit ARM (AArch64). * ArmAddrTraits is specialized to {Immd14, Immd19, Immd26} encodings. Bug: 918867 Change-Id: Ie20935e391ed0ac85c408aa9c8959305dc8bba42 Reviewed-on: https://chromium-review.googlesource.com/c/1394397 Reviewed-by: Samuel Huang <huangs@chromium.org> Reviewed-by: Etienne Pierre-Doray <etiennep@chromium.org> Commit-Queue: Samuel Huang <huangs@chromium.org> Cr-Commit-Position: refs/heads/master@{#622115} NOKEYCHECK=True GitOrigin-RevId: 398b188eab96c3b198b6a4eb8788bba77202aef8
Diffstat (limited to 'reference_bytes_mixer.h')
-rw-r--r--reference_bytes_mixer.h8
1 files changed, 4 insertions, 4 deletions
diff --git a/reference_bytes_mixer.h b/reference_bytes_mixer.h
index 9bc8f2d..f8e351e 100644
--- a/reference_bytes_mixer.h
+++ b/reference_bytes_mixer.h
@@ -72,14 +72,14 @@ class ReferenceBytesMixer {
virtual int NumBytes(uint8_t type) const;
// Computes mixed reference bytes by combining (a) "payload bits" from an
- // "old" reference of |type| at |old_base[old_offset]| with (b) "operation
- // bits" from a "new" reference of |type| at |new_base[new_offset]|. Returns
+ // "old" reference of |type| at |old_view[old_offset]| with (b) "operation
+ // bits" from a "new" reference of |type| at |new_view[new_offset]|. Returns
// the result as ConstBufferView, which is valid only until the next call to
// Mix().
virtual ConstBufferView Mix(uint8_t type,
- ConstBufferView::const_iterator old_base,
+ ConstBufferView old_view,
offset_t old_offset,
- ConstBufferView::const_iterator new_base,
+ ConstBufferView new_view,
offset_t new_offset);
private: