diff options
author | huangs <huangs@chromium.org> | 2016-03-14 09:35:39 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-03-14 16:37:34 +0000 |
commit | dda11d069213d53aef9bf3bc018b02f3aef7177b (patch) | |
tree | b2149ca828f3231ffc0f647f5903a641c08793bc /courgette/disassembler_elf_32_x86.h | |
parent | be97fce59267730f7e657c9321381fa9e11e000c (diff) | |
download | chromium_src-dda11d069213d53aef9bf3bc018b02f3aef7177b.zip chromium_src-dda11d069213d53aef9bf3bc018b02f3aef7177b.tar.gz chromium_src-dda11d069213d53aef9bf3bc018b02f3aef7177b.tar.bz2 |
[Courgette] Clean up Disassembler; fix ELF Memory leaks.
Cleaning up code surrounding Disassembler:
- Extract AddressTranslator interface to be used across subclasses.
- Use FileOffset = size_t by context.
- Detailed comments & TODOs in DisassemblerElf32ARM.
- Fix DisassemblerElf32ARM memory leaks.
- Lots of superficial stylistic changes.
Except for AddressTranslator routines and unit tests, shying away
from control flow and logic changes.
BUG=579206
Committed: https://crrev.com/58b822d441f5c982e879e536fa3c1cbac8fd339a
Cr-Commit-Position: refs/heads/master@{#380881}
Review URL: https://codereview.chromium.org/1676683002
Cr-Commit-Position: refs/heads/master@{#380987}
Diffstat (limited to 'courgette/disassembler_elf_32_x86.h')
-rw-r--r-- | courgette/disassembler_elf_32_x86.h | 46 |
1 files changed, 21 insertions, 25 deletions
diff --git a/courgette/disassembler_elf_32_x86.h b/courgette/disassembler_elf_32_x86.h index 5c87d4c..63be755 100644 --- a/courgette/disassembler_elf_32_x86.h +++ b/courgette/disassembler_elf_32_x86.h @@ -8,9 +8,10 @@ #include <stddef.h> #include <stdint.h> +#include <map> + #include "base/macros.h" #include "courgette/disassembler_elf_32.h" -#include "courgette/memory_allocator.h" #include "courgette/types_elf.h" namespace courgette { @@ -21,38 +22,33 @@ class DisassemblerElf32X86 : public DisassemblerElf32 { public: class TypedRVAX86 : public TypedRVA { public: - explicit TypedRVAX86(RVA rva) : TypedRVA(rva) { - } - - CheckBool ComputeRelativeTarget(const uint8_t* op_pointer) override { - set_relative_target(Read32LittleEndian(op_pointer) + 4); - return true; - } + explicit TypedRVAX86(RVA rva) : TypedRVA(rva) { } + ~TypedRVAX86() override { } + // TypedRVA interfaces. + CheckBool ComputeRelativeTarget(const uint8_t* op_pointer) override; CheckBool EmitInstruction(AssemblyProgram* program, - RVA target_rva) override { - return program->EmitRel32(program->FindOrMakeRel32Label(target_rva)); - } - - uint16_t op_size() const override { return 4; } + RVA target_rva) override; + uint16_t op_size() const override; }; - explicit DisassemblerElf32X86(const void* start, size_t length); + DisassemblerElf32X86(const void* start, size_t length); - virtual ExecutableType kind() { return EXE_ELF_32_X86; } + ~DisassemblerElf32X86() override { } - virtual e_machine_values ElfEM() { return EM_386; } + // DisassemblerElf32 interfaces. + ExecutableType kind() const override { return EXE_ELF_32_X86; } + e_machine_values ElfEM() const override { return EM_386; } protected: - virtual CheckBool RelToRVA(Elf32_Rel rel, RVA* result) - const WARN_UNUSED_RESULT; - - virtual CheckBool ParseRelocationSection( - const Elf32_Shdr *section_header, - AssemblyProgram* program) WARN_UNUSED_RESULT; - - virtual CheckBool ParseRel32RelocsFromSection( - const Elf32_Shdr* section) WARN_UNUSED_RESULT; + // DisassemblerElf32 interfaces. + CheckBool RelToRVA(Elf32_Rel rel, + RVA* result) const override WARN_UNUSED_RESULT; + CheckBool ParseRelocationSection(const Elf32_Shdr* section_header, + AssemblyProgram* program) + override WARN_UNUSED_RESULT; + CheckBool ParseRel32RelocsFromSection(const Elf32_Shdr* section) + override WARN_UNUSED_RESULT; #if COURGETTE_HISTOGRAM_TARGETS std::map<RVA, int> rel32_target_rvas_; |