Chromium Code Reviews| Index: courgette/instruction_utils.h |
| diff --git a/courgette/instruction_utils.h b/courgette/instruction_utils.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..d7dfe97e46625d24e61cb6fffbd44c68adbea9f2 |
| --- /dev/null |
| +++ b/courgette/instruction_utils.h |
| @@ -0,0 +1,66 @@ |
| +// Copyright 2016 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef COURGETTE_INSTRUCTION_UTILS_H_ |
| +#define COURGETTE_INSTRUCTION_UTILS_H_ |
| + |
| +#include <stdint.h> |
| + |
| +#include "base/callback.h" |
| +#include "base/macros.h" |
| +#include "courgette/image_utils.h" |
| +#include "courgette/memory_allocator.h" |
| + |
| +namespace courgette { |
| + |
| +// An interface to receive emitted instructions parsed from an executable. |
|
huangs
2017/03/23 18:51:23
InstructionReceptor identical to the code deleted
|
| +class InstructionReceptor { |
| + public: |
| + InstructionReceptor() = default; |
| + virtual ~InstructionReceptor() = default; |
| + |
| + // Generates an entire base relocation table. |
| + virtual CheckBool EmitPeRelocs() = 0; |
| + |
| + // Generates an ELF style relocation table for X86. |
| + virtual CheckBool EmitElfRelocation() = 0; |
| + |
| + // Generates an ELF style relocation table for ARM. |
| + virtual CheckBool EmitElfARMRelocation() = 0; |
| + |
| + // Following instruction will be assembled at address 'rva'. |
| + virtual CheckBool EmitOrigin(RVA rva) = 0; |
| + |
| + // Generates a single byte of data or machine instruction. |
| + virtual CheckBool EmitSingleByte(uint8_t byte) = 0; |
| + |
| + // Generates multiple bytes of data or machine instructions. |
| + virtual CheckBool EmitMultipleBytes(const uint8_t* bytes, size_t len) = 0; |
| + |
| + // Generates a 4-byte relative reference to address of 'label'. |
| + virtual CheckBool EmitRel32(Label* label) = 0; |
| + |
| + // Generates a 4-byte relative reference to address of 'label' for ARM. |
| + virtual CheckBool EmitRel32ARM(uint16_t op, |
| + Label* label, |
| + const uint8_t* arm_op, |
| + uint16_t op_size) = 0; |
| + |
| + // Generates a 4-byte absolute reference to address of 'label'. |
| + virtual CheckBool EmitAbs32(Label* label) = 0; |
| + |
| + // Generates an 8-byte absolute reference to address of 'label'. |
| + virtual CheckBool EmitAbs64(Label* label) = 0; |
| + |
| + private: |
| + DISALLOW_COPY_AND_ASSIGN(InstructionReceptor); |
| +}; |
| + |
| +// A rerunable callback that emit instructions to a provided receptor. Returns |
| +// true on success, and false otherwise. |
| +using InstructionGenerator = base::Callback<CheckBool(InstructionReceptor*)>; |
|
huangs
2017/03/23 18:51:23
Compared to old code in assembly_program.h, remove
|
| + |
| +} // namespace courgette |
| + |
| +#endif // COURGETTE_INSTRUCTION_UTILS_H_ |