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

Unified Diff: courgette/courgette_tool.cc

Issue 2854113002: [Courgette] Reduce AssemblyProgram to reduce Courgette-apply RAM floor and disk churn. (Closed)
Patch Set: Update courgette_fuzzer in libfuzzer. Created 3 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_flow.cc ('k') | courgette/disassembler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: courgette/courgette_tool.cc
diff --git a/courgette/courgette_tool.cc b/courgette/courgette_tool.cc
index 46bd578e1d38b4db610295686a3d97dcb870ef40..7abcf6ea1b1933b76ab24cfc72b5fcb09e6e5a51 100644
--- a/courgette/courgette_tool.cc
+++ b/courgette/courgette_tool.cc
@@ -155,8 +155,10 @@ void Disassemble(const base::FilePath& input_file,
const base::FilePath& output_file) {
CourgetteFlow flow;
BufferedFileReader input_buffer(input_file, flow.name(flow.ONLY));
- flow.ReadAssemblyProgramFromBuffer(flow.ONLY, input_buffer, false);
- flow.CreateEncodedProgramFromAssemblyProgram(flow.ONLY);
+ flow.ReadDisassemblerFromBuffer(flow.ONLY, input_buffer);
+ flow.CreateAssemblyProgramFromDisassembler(flow.ONLY, false);
+ flow.CreateEncodedProgramFromDisassemblerAndAssemblyProgram(flow.ONLY);
+ flow.DestroyDisassembler(flow.ONLY);
flow.DestroyAssemblyProgram(flow.ONLY);
flow.WriteSinkStreamSetFromEncodedProgram(flow.ONLY);
flow.DestroyEncodedProgram(flow.ONLY);
@@ -171,16 +173,27 @@ void Disassemble(const base::FilePath& input_file,
void DisassembleAndAdjust(const base::FilePath& old_file,
const base::FilePath& new_file,
const base::FilePath& output_file) {
+ // Flow graph and process sequence (DA = Disassembler, AP = AssemblyProgram,
+ // EP = EncodedProgram, Adj = Adjusted):
+ // [1 Old DA] --> [2 Old AP] [4 New AP] <-- [3 New DA]
+ // | | |
+ // | v (move) v
+ // +---> [5 Adj New AP] --> [6 New EP]
+ // (7 Write)
CourgetteFlow flow;
BufferedFileReader old_buffer(old_file, flow.name(flow.OLD));
BufferedFileReader new_buffer(new_file, flow.name(flow.NEW));
- flow.ReadAssemblyProgramFromBuffer(flow.OLD, old_buffer, true);
- flow.ReadAssemblyProgramFromBuffer(flow.NEW, new_buffer, true);
- flow.AdjustNewAssemblyProgramToMatchOld();
+ flow.ReadDisassemblerFromBuffer(flow.OLD, old_buffer); // 1
+ flow.CreateAssemblyProgramFromDisassembler(flow.OLD, true); // 2
+ flow.DestroyDisassembler(flow.OLD);
+ flow.ReadDisassemblerFromBuffer(flow.NEW, new_buffer); // 3
+ flow.CreateAssemblyProgramFromDisassembler(flow.NEW, true); // 4
+ flow.AdjustNewAssemblyProgramToMatchOld(); // 5
flow.DestroyAssemblyProgram(flow.OLD);
- flow.CreateEncodedProgramFromAssemblyProgram(flow.NEW);
+ flow.CreateEncodedProgramFromDisassemblerAndAssemblyProgram(flow.NEW); // 6
flow.DestroyAssemblyProgram(flow.NEW);
- flow.WriteSinkStreamSetFromEncodedProgram(flow.NEW);
+ flow.DestroyDisassembler(flow.NEW);
+ flow.WriteSinkStreamSetFromEncodedProgram(flow.NEW); // 7
flow.DestroyEncodedProgram(flow.NEW);
courgette::SinkStream sink;
flow.WriteSinkStreamFromSinkStreamSet(flow.NEW, &sink);
@@ -199,20 +212,33 @@ void DisassembleAdjustDiff(const base::FilePath& old_file,
const base::FilePath& new_file,
const base::FilePath& output_file_root,
bool adjust) {
+ // Same as PatchGeneratorX86_32::Transform(), except Adjust is optional, and
+ // |flow|'s internal SinkStreamSet get used.
+ // Flow graph and process sequence (DA = Disassembler, AP = AssemblyProgram,
+ // EP = EncodedProgram, Adj = Adjusted):
+ // [1 Old DA] --> [2 Old AP] [6 New AP] <-- [5 New DA]
+ // | | | | |
+ // v | | v (move) v
+ // [3 Old EP] <-----+ +->[7 Adj New AP] --> [8 New EP]
+ // (4 Write) (9 Write)
CourgetteFlow flow;
BufferedFileReader old_buffer(old_file, flow.name(flow.OLD));
BufferedFileReader new_buffer(new_file, flow.name(flow.NEW));
- flow.ReadAssemblyProgramFromBuffer(flow.OLD, old_buffer, adjust);
- flow.ReadAssemblyProgramFromBuffer(flow.NEW, new_buffer, adjust);
+ flow.ReadDisassemblerFromBuffer(flow.OLD, old_buffer); // 1
+ flow.CreateAssemblyProgramFromDisassembler(flow.OLD, adjust); // 2
+ flow.CreateEncodedProgramFromDisassemblerAndAssemblyProgram(flow.OLD); // 3
+ flow.DestroyDisassembler(flow.OLD);
+ flow.WriteSinkStreamSetFromEncodedProgram(flow.OLD); // 4
+ flow.DestroyEncodedProgram(flow.OLD);
+ flow.ReadDisassemblerFromBuffer(flow.NEW, new_buffer); // 5
+ flow.CreateAssemblyProgramFromDisassembler(flow.NEW, adjust); // 6
if (adjust)
- flow.AdjustNewAssemblyProgramToMatchOld();
- flow.CreateEncodedProgramFromAssemblyProgram(flow.OLD);
+ flow.AdjustNewAssemblyProgramToMatchOld(); // 7, optional
flow.DestroyAssemblyProgram(flow.OLD);
- flow.CreateEncodedProgramFromAssemblyProgram(flow.NEW);
+ flow.CreateEncodedProgramFromDisassemblerAndAssemblyProgram(flow.NEW); // 8
flow.DestroyAssemblyProgram(flow.NEW);
- flow.WriteSinkStreamSetFromEncodedProgram(flow.OLD);
- flow.DestroyEncodedProgram(flow.OLD);
- flow.WriteSinkStreamSetFromEncodedProgram(flow.NEW);
+ flow.DestroyDisassembler(flow.NEW);
+ flow.WriteSinkStreamSetFromEncodedProgram(flow.NEW); // 9
flow.DestroyEncodedProgram(flow.NEW);
if (flow.failed())
Problem(flow.message().c_str());
« no previous file with comments | « courgette/courgette_flow.cc ('k') | courgette/disassembler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698