| 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());
|
|
|