Index: courgette/disassembler_elf_32.h |
diff --git a/courgette/disassembler_elf_32.h b/courgette/disassembler_elf_32.h |
index fbd8a59ccc642b8d5c5e212bcf1bc070340ba089..a75773d78b0579f7dc64b58f1ed05c34fab17126 100644 |
--- a/courgette/disassembler_elf_32.h |
+++ b/courgette/disassembler_elf_32.h |
@@ -15,13 +15,13 @@ |
#include "base/macros.h" |
#include "courgette/disassembler.h" |
#include "courgette/image_utils.h" |
+#include "courgette/instruction_utils.h" |
#include "courgette/memory_allocator.h" |
#include "courgette/types_elf.h" |
namespace courgette { |
class AssemblyProgram; |
-class InstructionReceptor; |
// A Courgette disassembler for 32-bit ELF files. This is only a partial |
// implementation that admits subclasses for the architecture-specific parts of |
@@ -106,7 +106,6 @@ class DisassemblerElf32 : public Disassembler { |
ExecutableType kind() const override = 0; |
uint64_t image_base() const override { return 0; } |
bool ParseHeader() override; |
- bool Disassemble(AssemblyProgram* program) override; |
virtual e_machine_values ElfEM() const = 0; |
@@ -170,7 +169,7 @@ class DisassemblerElf32 : public Disassembler { |
CheckBool RVAsToFileOffsets( |
std::vector<std::unique_ptr<TypedRVA>>* typed_rvas) const; |
- // Parsing code for Disassemble(). |
+ // Helpers for ParseFile(). |
virtual CheckBool ParseRelocationSection(const Elf32_Shdr* section_header, |
InstructionReceptor* receptor) const |
@@ -185,9 +184,13 @@ class DisassemblerElf32 : public Disassembler { |
CheckBool ParseRel32RelocsFromSections() WARN_UNUSED_RESULT; |
// Disassembler interfaces. |
+ bool ExtractAbs32Locations() override; |
+ bool ExtractRel32Locations() override; |
RvaVisitor* CreateAbs32TargetRvaVisitor() override; |
RvaVisitor* CreateRel32TargetRvaVisitor() override; |
void RemoveUnusedRel32Locations(AssemblyProgram* program) override; |
+ InstructionGenerator GetInstructionGenerator( |
+ AssemblyProgram* program) override; |
CheckBool ParseFile(AssemblyProgram* target, |
InstructionReceptor* receptor) const WARN_UNUSED_RESULT; |
@@ -225,9 +228,10 @@ class DisassemblerElf32 : public Disassembler { |
const char* default_string_section_; |
size_t default_string_section_size_; |
- // Sorted abs32 and reel32 RVAs. These are mutable because ParseFile() needs |
- // to sort these by file offsets. |
- mutable std::vector<RVA> abs32_locations_; |
+ // Sorted abs32 RVAs. |
+ std::vector<RVA> abs32_locations_; |
+ // Sorted rel32 RVAs. This is mutable because ParseFile() temporarily sorts |
+ // these by file offsets. |
mutable std::vector<std::unique_ptr<TypedRVA>> rel32_locations_; |
private: |