Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(15)

Unified Diff: courgette/disassembler.h

Issue 1935203002: [Courgette] Using LabelManager to reduce Courgette-apply peak RAM by 25%. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Sync. Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « courgette/courgette.h ('k') | courgette/disassembler.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: courgette/disassembler.h
diff --git a/courgette/disassembler.h b/courgette/disassembler.h
index 7c57099570d66d9ba965ad999ca3015b0fd1ae6b..d84b11406a5200aa1b952372d0c0a27a8e4b1483 100644
--- a/courgette/disassembler.h
+++ b/courgette/disassembler.h
@@ -8,6 +8,8 @@
#include <stddef.h>
#include <stdint.h>
+#include <vector>
+
#include "base/macros.h"
#include "courgette/courgette.h"
#include "courgette/image_utils.h"
@@ -18,6 +20,38 @@ class AssemblyProgram;
class Disassembler : public AddressTranslator {
public:
+ // Visitor/adaptor to translate RVA to target RVA for abs32.
+ class RvaVisitor_Abs32 : public VectorRvaVisitor<RVA> {
+ public:
+ RvaVisitor_Abs32(const std::vector<RVA>& rva_locations,
+ const AddressTranslator& translator);
+ ~RvaVisitor_Abs32() override { }
+
+ // VectorRvaVisitor<RVA> interfaces.
+ RVA Get() const override;
+
+ private:
+ const AddressTranslator& translator_;
+
+ DISALLOW_COPY_AND_ASSIGN(RvaVisitor_Abs32);
+ };
+
+ // Visitor/adaptor to translate RVA to target RVA for rel32.
+ class RvaVisitor_Rel32 : public VectorRvaVisitor<RVA> {
+ public:
+ RvaVisitor_Rel32(const std::vector<RVA>& rva_locations,
+ const AddressTranslator& translator);
+ ~RvaVisitor_Rel32() override { }
+
+ // VectorRvaVisitor<RVA> interfaces.
+ RVA Get() const override;
+
+ private:
+ const AddressTranslator& translator_;
+
+ DISALLOW_COPY_AND_ASSIGN(RvaVisitor_Rel32);
+ };
+
virtual ~Disassembler();
// AddressTranslator interfaces.
@@ -29,6 +63,17 @@ class Disassembler : public AddressTranslator {
virtual ExecutableType kind() const = 0;
+ // Returns a caller-owned new RvaVisitor to iterate through abs32 target RVAs.
+ virtual RvaVisitor* CreateAbs32TargetRvaVisitor() = 0;
+
+ // Returns a caller-owned new RvaVisitor to iterate through rel32 target RVAs.
+ virtual RvaVisitor* CreateRel32TargetRvaVisitor() = 0;
+
+ // Removes unused rel32 locations (architecture-specific). This is needed
+ // because we may remove rel32 Labels along the way. As a result the matching
+ // matching rel32 addresses become unused. Removing them saves space.
+ virtual void RemoveUnusedRel32Locations(AssemblyProgram* program) = 0;
+
// Returns true if the buffer appears to be a valid executable of the expected
// type, and false otherwise. This needs not be called before Disassemble().
virtual bool ParseHeader() = 0;
@@ -57,6 +102,9 @@ class Disassembler : public AddressTranslator {
return offset <= length() && elements <= (length() - offset) / element_size;
}
+ // Computes and stores all Labels before scanning program bytes.
+ void PrecomputeLabels(AssemblyProgram* program);
+
// Reduce the length of the image in memory. Does not actually free
// (or realloc) any memory. Usually only called via ParseHeader().
void ReduceLength(size_t reduced_length);
« no previous file with comments | « courgette/courgette.h ('k') | courgette/disassembler.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698